[Delphi, Промышленное программирование, SCADA, Разработка под Linux] Как я SCADA-систему на Linux переводил
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В этой статье я бы хотел рассказать о том, что Windows проекты на Delphi возможно перевести на Linux в разумные сроки и с разумными трудозатратами. Что такое SCADA-система, рассказывать не буду, а перейду сразу к делу.Runtime ядро SCADA работает под Windows в качестве сервиса. Функции стандартные «как у всех»: сбор, обработка, архивирование данных, передача данных в другие SCADA-системы по стандартным протоколам обмена. Визуализация только через Web. Runtime ядро SCADA написано на Delphi. Решено было адаптировать исходный код под FreePascal/Lazarus, так чтобы код под Windows компилировался и в FreePascal и в Delphi, вторым этапом было допиливание проекта непосредственно на Linux машине и переделка его в демон. В FreePascal привлекала возможность компиляции как для x64, так и для плат Raspberry pi (архитектуры ARMv7, ARM64 (aarch64)).Конфигуратор работает под Windows в виде графического приложения. Пока решено не переводить его на Linux, в крайнем случае можно запустить под Wine.Теперь перейдем к Runtime и будем говорить о нём. В нём применяются разнообразные компоненты:
- Работа с сетью. Компоненты Indy: IdTCPServer, IdTCPClient для реализации промышленных протоколов обмена. idHTTPServer для Web-сервера. Под Linux FreePascal они тоже есть. Оставляем без изменений.
- Работа с базами данных. В Windows применялся FireDAC. Под Linux FreePascal его не было, и не предвиделось. Решено было добавить функцию работы с архивами с использованием компонентов ZeosLib. Отзывы о данной библиотеке были самыми разнообразными: начиная от хороших, заканчивая негативными. Библиотека показала себя с хорошей стороны. Несомненное достоинство в том, что она работает как в Delphi так и в FreePascal Windows и Linux.
- Скриптовой движок. В Windows использовался DWScript. Использование его под Linux FreePascal невозможно. Параллельно с ним для Linux – версии добавлен RemObjects Pascal Script. Скрипты, написанные для DWScript могут быть перенесены в RemObjects Pascal Script с минимальными переделками. В Windows могут работать скрипты обоих движков одновременно. RemObjects Pascal Script не работают на архитектуре aarch64, поэтому версия для этой архитектуры без скриптов.
- Работа с СОМ-портом. Использовались не компоненты , а функции. А в Linux они полностью отличаются от Windows.
Нужно подключить необходимые модули:Uses {$IFDEF UNIX} termio, baseunix, unix, {$ELSE}Открытие СОМ-порта функцией fpOpen вместо CreateFile. Запись Filewrite вместо WriteFile. Чтение FileRead вместо ReadFile. И многое другое, про это можно написать целую статью.Основные моменты, с которыми приходится сталкиваться при переводе проектов Delphi на Linux FreePascal:
- Строки. Функция Length() выдаёт разный результат в Delphi и Lazarus если в строке есть русские буквы. Потому что функция работает с ANSI-строками, то есть с теми, что занимают по 1 байту на символ. А кириллица - это не ANSI а UTF8, и требует по 2 байта на символ. Вместо Length() можно использовать UTF8Length(), но такой функции нет в Delphi. В этой ситуации однозначной рекомендации нет, либо использовать директивы условной компиляции, либо использовать обходные варианты, которые в Delphi и Lazarus работают одинаково.
- Cthreads. Чтобы работать с потоками в Linux нужно подключать модуль cthreads. uses {$IFDEF UNIX} cthreads, {$ENDIF}. Причем подключать его надо самым первым непосредственно в lpr-файле. Это касается не только программы, но и динамических библиотек so.
- {$MODE Delphi}. Если не компилируется что-то, что работает в Delphi, укажите в начале модуля режим совместимости с Delphi {$IFDEF FPC} {$MODE delphi} {$ELSE} {$ENDIF}.
По аналогии были переведены на Linux драйверы для протоколов МЭК 60870-5-104, МЭК 60870-5-101, MQTT, SNMP, работа с ini-файлами, а так же периодический Ping. Драйверы представляют из себя динамические библиотеки so, которые подключаются при запуске демона.Так же были переведены на Linux OPC UA серверы некоторых стандартных и не очень протоколов.Небольшие субъективные выводы, которые я сделал после проделанной работы:
- Переводить на Linux приложение без графической оболочки проще, чем с GUI.
- Практически любой проект на Delphi без графической оболочки можно перевести на Linux за вполне вменяемые сроки.
- Переписать всё с нуля на более модном языке не проще.
Время перевода заняло около полугода. Результат здесь.И напоследок скриншот:
===========
Источник:
habr.com
===========
Похожие новости:
- [Настройка Linux, Графические оболочки, Разработка под Linux] Альфа-выпуск GNOME 40 доступен для пользователей
- [Python, Разработка мобильных приложений, Интерфейсы, Промышленное программирование] Открываем четыре Школы: разработки интерфейсов, бэкенда, мобильной разработки и дизайна
- [Настройка Linux, *nix, Разработка под Linux, Процессоры] Компания Corellium собрала образ Linux для работы на процессоре Apple M1
- [Настройка Linux, Разработка под Linux, Kubernetes] Теперь в Debian комфортнее работать с k8s. Сопровождающий добавил 200 зависимостей и вынудил комитет одобрить монолит
- [Промышленное программирование] О несомненной пользе применения современного оборудования Simatic
- [Open source, Разработка под Linux, AR и VR, Игры и игровые приставки] Сегодня большинство Windows-игр отлично запускаются под Linux. Спасибо, Proton
- [*nix, C, Разработка под Linux] Перехват и обработка событий в файловой системе Linux
- [Разработка под Linux, IT-компании] Corellium выпустила прототип порта Linux для системы на кристалле Apple M1
- [Разработка под Linux, Программирование микроконтроллеров, Компьютерное железо, Процессоры] BeagleBoard представила доступный одноплатный компьютер на RISC-V
- [Системное программирование, C, Разработка под Linux, Программирование микроконтроллеров] Сюрпризы в коде на Си (перевод)
Теги для поиска: #_delphi, #_promyshlennoe_programmirovanie (Промышленное программирование), #_scada, #_razrabotka_pod_linux (Разработка под Linux), #_scada, #_delphi, #_delphi, #_promyshlennoe_programmirovanie (
Промышленное программирование
), #_scada, #_razrabotka_pod_linux (
Разработка под Linux
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 11:10
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В этой статье я бы хотел рассказать о том, что Windows проекты на Delphi возможно перевести на Linux в разумные сроки и с разумными трудозатратами. Что такое SCADA-система, рассказывать не буду, а перейду сразу к делу.Runtime ядро SCADA работает под Windows в качестве сервиса. Функции стандартные «как у всех»: сбор, обработка, архивирование данных, передача данных в другие SCADA-системы по стандартным протоколам обмена. Визуализация только через Web. Runtime ядро SCADA написано на Delphi. Решено было адаптировать исходный код под FreePascal/Lazarus, так чтобы код под Windows компилировался и в FreePascal и в Delphi, вторым этапом было допиливание проекта непосредственно на Linux машине и переделка его в демон. В FreePascal привлекала возможность компиляции как для x64, так и для плат Raspberry pi (архитектуры ARMv7, ARM64 (aarch64)).Конфигуратор работает под Windows в виде графического приложения. Пока решено не переводить его на Linux, в крайнем случае можно запустить под Wine.Теперь перейдем к Runtime и будем говорить о нём. В нём применяются разнообразные компоненты:
=========== Источник: habr.com =========== Похожие новости:
Промышленное программирование ), #_scada, #_razrabotka_pod_linux ( Разработка под Linux ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 11:10
Часовой пояс: UTC + 5