OpenSCADAWiki: Roman Savochenko/ Complex2
 

Complex2

Имя: Complex2
Основан/завершен: апрель 2000г / март 2005г
Участники: Роман Савоченко (автор, разработчик)
Описание: Проект Complex2 является развитием SCADA "Complex" фирмы ООО НИП "ДIЯ" на платформе DOS32. Complex2 значительно переработан и обновлен благодаря снятию ограничений платформы DOS16.
Версия: 1.0pre3 (разработка прекращена в пользу проекта OpenSCADA)
Под-проекты:
  • Библиотека поддержки DBF.
  • Конфигуратор Complex2.
  • Контроллер клавиатуры.
  • Интерпретатор математической записи в одну строку для виртуального контроллера.
  • Синтезатор русской и украинской речи.
  • Драйвер обслуживания нескольких PCI-видеоконтроллеров.
  • Портирование драйвера коммуникационного процессора CIF50PB для ОС Linux на Complex2(DOS32).
Материалы: Subversion Архив Complex2, Subversion Архив ComplexCfg, Фото-галерея, Клавиши управления
SCADA Complex2 (9 Kb)


Contents

1 Предыстория

Идея создания проекта Complex2 зародилась в процессе практического использования SCADA-системы "Complex".

SCADA "Complex" является ранней разработкой фирмы ООО НИП "ДIЯ", реализованной для программной платформы DOS(16). SCADA "Complex" предоставляет все функции, необходимые для систем данного класса при реализации систем управления технологическими процессами.

В процессе развития система SCADA "Complex" столкнулась с ограничениями программной платформы DOS(16):

Как следствие ограничения физической памяти система SCADA "Complex" содержит существенные недостатки функциональности, усложняющие эксплуатацию системы.

Решение проблемы ограничения физической памяти началось с экспериментов в защищенном режиме. Известно, что процессора семейства x86 фирмы Intel, начиная с i386, стали 32-разрядными и получили новый механизм работы с памятью. Для совместимости с процессорами предыдущего семейства было введено понятие режима процессора — реальный и защищённый режим. В реальном режиме процессор работает как старый, 16 разрядный, процессор с прямой адресацией 1 МБайта памяти. В защищённом режиме процессор открывает все свои возможности и позволяет прямо адресовать до 4 ГБайт памяти.

На начальном этапе, эксперименты заключались в прямом переключении в защищенный режим и самостоятельном заполнении всех дескрипторов процессора. В дальнейшем была обнаружена технология DPMI(DOS Protect Mode Interface), которая переключала процессор в защищенный режим и предоставляла API для доступа к функциям BIOS(Int 10), DOS(Int 21) и собственному API (Int 31). DPMI значительно упростил процедуру перехода в защищенный режим, сделав её практически незаметной. Однако старые компиляторы не имели стандартных механизмов для работы с DPMI и поиск продолжился в направлении подходящего компилятора.

В процессе поиска был обнаружен компилятор "Watcom", который является кроссплатформенным и в версии 10.0 предоставляет возможность создавать программы для платформ: DOS(16), DOS32, OS/2, QNX, Win16, Win32. Где платформа DOS32 и есть "программы выполняющиеся в защищенном режиме с использованием механизма DPMI". При этом компилятор позволяет линковать исполняемый файл с различными DOS-экстендерами (источниками DPMI). Например, с широко-известными экстендерами: DOS4G, DOS4GW, DOS32A, PMODEW, ZRDX.

Следующим шагом было получение и изучение исходных текстов SCADA "Complex". Исходные тексты SCADA "Complex" были предоставлены программистами фирмы ООО НИП "ДIЯ", однако в связи с закрытым статусом разработки SCADA "Complex", разработка SCADA "Complex2" также началась как закрытый проект, основанный на исходных текстах другого закрытого проекта.

 (2 Kb) На данный момент исходные тексты и материалы этого проекта открыты, поскольку потеряли свою актуальность и коммерческую ценность!

В процессе реализации проекта SCADA "Complex2" возникло несколько дочерних проектов, нацеленных на развитие и расширение функционала SCADA "Complex2".

2 Цели

Перед системой SCADA Complex2 ставились цели:

3 Complex2

Экран SCADA Complex2 (92 Kb)
Рис. 1. Экран SCADA "Complex2".


После получения и изучения исходных текстов SCADA "Complex" выяснилось, что система использует несколько внешних библиотек/программ в процессе работы. Этими библиотеками являются:

Из перечисленных трёх библиотек особенно хотелось-бы отметить библиотеку "TCTask". TСTask является свободной разработкой фирмы "Tecon", которая предназначена для создания многозадачного окружения реального времени для программ на языке C в рамках однозадачной системы DOS. Учитывая важность TCTask решено было, в первую очередь, выполнить перенос TCTask в среду DOS32. Задача значительно упростилась благодаря наличию исходных текстов библиотеки. По истечению двух месяцев библиотека TCTask была успешно портирована и достаточно стабильно работала. Текущая версия библиотеки TCTask включена в дерево проекта Complex2 и собирается вместе с ним.

Следующая внешняя библиотека — "inputdb", на самом деле являлась отдельной программой с помощью которой SCADA "Complex" загружает БД в память. Функции данной программы были выделена в отдельную программу из-за нехватки памяти, поэтому в Complex2 функции этой программы были включены в основной исполняемый файл, а в дальнейшем заменены на функции новой универсальной библиотеки работы с DBF-файлами.

Из этих библиотек только pcxlib оказалась недоступной в исходных кодах и, следовательно, не позволяла выполнить прямой перенос в новую систему. Как выяснилось библиотека "pcxlib" предоставляла функции для работы с изображениями в формате pcx, а также с библиотеками изображений. Проблема была решена путём реверс-инжиниринга необходимых функций данной библиотеки. В частности, в рамках проекта, были реализованы функции:

За основу в реализации функции отображения были взяты наработки программистов SCADA "Complex".

Благодаря полученным знаниям в последствии была реализована функция печати содержимого экрана в файл. Благодаря этой функции процедура снятия копий экрана стала элементарной в любой среде.

Дальнейшие действия заключались в адаптации исходного кода SCADA "Complex" к новым библиотекам и защищенной среде DOS32 вообще.

Главным отличием среды DOS32 от DOS(16), со стороны исходных текстов, является отличие длины данных типа "int". Так, в среде DOS(16) их размер составляет 16 бит, в то время как в среде DOS32 составляет 32 бита. В связи с этим обстоятельством во всех структурах данных, которые отражаются на файлы, необходимо было сменить тип на "short int". Для систематизации и создания более переносимой программы были определены новые типы данных: word, word_s, byte.

Дальнейший процесс портирования не вызывал проблем, кроме отдельных случаев с закоренелыми ошибками SCADA "Complex". Дело в том, что при работе в реальном режиме процессора программа может писать куда угодно и её ничто не остановит, в то время как в защищённом режиме запись, скажем за пределы рабочего сегмента, приводит к ошибке сегментации памяти. По этой причине на начальном этапе портирования система довольно часто аварийно завершала работу по ошибке сегментации памяти. В процессе доводки все явно выраженные ошибки были устранены.

В течении четырёх месяцев базовые функции системы были портированы и работа перешла в русло ликвидации недостатков и ограничений SCADA "Complex". Так, были устранены следующие проблемы:
Проблема SCADA "Complex" Решение в SCADA "Complex2"
Ограничение памяти 640Кб. Система Complex2 позволяет прямо адресовать до 4Гб оперативной памяти.
Ограничения размера файла 64Кб или неоднозначность и кусочность в работе с файлами более 64Кб. Система Complex2 позволяет непосредственно работать с файлами размером до 2Гб.
Отсутствие возможности обращения к устройствам на PCI-шине поскольку большинство из них отображают свою память на старшие адреса. Система Complex2 позволяет обращаться к любым устройствам на PCI-шине, поскольку использует 32-битную адресацию.
Ограничение на размер стека 64Кб, накладывает ограничение на количество параллельно-запускаемых задач, а также на активность использования стека ими. В процессе переноса TCtask на платформу DOS32 полностью снято ограничение на количество запускаемых задач и их активность, поскольку память под стек задач выделяется отдельно и указанного размера.
Двойная адресация элементов в БД. Например, все параметры адресовались в одних местах по шифру, а в других местах по идентификатору, что неоднократно приводило к ошибочным ссылкам на другие параметры. Реализована однозначная идентификация по шифру с проверкой валидности шифра при загрузке БД.
Заливка контуров на мнемосхемах иногда приводит к зависанию системы в случае разрыва контура. В Complex2 механизм залива заменён на безопасный.
При работе в много-дисплейном режиме некоторые графические элементы выводятся не на свой экран. Механизм работы в много-дисплейном режиме полностью пересмотрен и унифицирован. Кроме того, добавлена возможность использования нескольких PCI-видеокарт для построения много-дисплейных конфигураций.
Невозможность изменения многих параметров системы без перекомпиляции. Например, наличие отдельных исполняемых файлов для работы с инженерной и технологической клавиатурой. Добавлена поддержка опций командной строки. Это позволило вынести многие опции в параметры запуска и соответственно подбирать конфигурацию под конкретные нужды.

По мере устранения ограничений и недостатков SCADA "Complex" работа перешла в стадию создания новых функций и расширения существующих возможностей. Так были расширены и добавлены возможности:

В настоящий момент дерево проекта унифицировано и собирается свободным компилятором OpenWatcom версии 1.3. Причём, компилировать проект можно как с помощью IDE-среды компилятора Watcom так и просто командой wmake из дерева проекта. Следовательно, проект можно собрать в ОС DOS или в любом эмуляторе среды DOS, например в эмуляторе DOSEMU.

4 Complex-конфигуратор

Конфигуратор SCADA Complex2 (192 Kb)
Рис. 2. Конфигуратор SCADA Complex2.


В процессе расширения и добавления новых функций в SCADA "Complex2" остро стал вопрос в расширении функциональных возможностей конфигурационных утилит SCADA "Complex". Конфигурация SCADA "Complex" вообще состоит из группы конфигурационных утилит:

Поскольку утилиты написанные на "Clip" имеют те же проблемы что и SCADA "Complex" то их или нужно было портировать или переписывать. А поскольку язык Clip не обеспечивал достаточной гибкости и для Complex, то решено было написать новый конфигуратор. Кроме того, в практике использования Grad, востребованными оказались лишь функции привязки динамики, да и те вызывали множество нареканий.

Сперва, решено было реализовывать конфигуратор виртуального контроллер, поскольку он требовал значительных и неотложных изменений. Для реализации конфигуратора нужна была библиотека или среда создания TUI/GUI интерфейса. В начале выбор пал на компилятор BorlandC++ Builder. После создания первых набросков конфигуратора и переосмысления того, что такой конфигуратор будет работать только в ОС MS "Windows", решено было продолжить поиск сузив область поиска до сред для DOS32. На момент разработки оказалось, что мощная ООП библиотека фирмы Borland "Turbo Vision" открыта как свободный проект и даже портирована под компилятор Watcom. После получения библиотеки TurboVision(TV) проект конфигуратора виртуального контроллера перебрался на библиотеку "TV" и компилятор "Watcom".

После реализации конфигурации виртуального контроллера, решено было все остальные функции конфигурирования реализовывать в связке Watcom+TV и основать на его основе дочерний проект "ComplexCfg".

После двух месяцев разработки проекта ComplexCfg, были реализованы все основные функции. По состоянию на версию 1.0pre2 ComplexCfg выполняет функции:

В настоящий момент дерево проекта унифицировано и собирается свободным компилятором OpenWatcom версии 1.3. Причём, компилировать проект можно как с помощью IDE-среды компилятора Watcom так и просто командой wmake из дерева проекта. Следовательно, проект можно собрать в ОС DOS или любого эмулятора среды DOS, например в эмуляторе DOSEMU.