Имя: Complex2 Основан/завершен: апрель 2000г / март 2005г Участники:Роман Савоченко (автор, разработчик) Описание: Проект Complex2 является развитием SCADA "Complex" фирмы ООО НИП "ДIЯ" на платформе DOS32. Complex2 значительно переработан и обновлен благодаря снятию ограничений платформы DOS16. Версия: 1.0pre3 (разработка прекращена в пользу проекта OpenSCADA) Под-проекты:
Идея создания проекта Complex2 зародилась в процессе практического использования SCADA-системы "Complex".
SCADA "Complex" является ранней разработкой фирмы ООО НИП "ДIЯ", реализованной для программной платформы DOS(16). SCADA "Complex" предоставляет все функции, необходимые для систем данного класса при реализации систем управления технологическими процессами.
В процессе развития система SCADA "Complex" столкнулась с ограничениями программной платформы DOS(16):
физическая память 640кб;
сквозная сегментация блоками по 64кб, что приводит к ограничениям в работе с памятью и дисками;
недоступность устройств на PCI шине.
Как следствие ограничения физической памяти система 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" также началась как закрытый проект, основанный на исходных текстах другого закрытого проекта.
На данный момент исходные тексты и материалы этого проекта открыты, поскольку потеряли свою актуальность и коммерческую ценность!
В процессе реализации проекта SCADA "Complex2" возникло несколько дочерних проектов, нацеленных на развитие и расширение функционала SCADA "Complex2".
2 Цели
Перед системой SCADA Complex2 ставились цели:
снять ограничения физической памяти;
обеспечить совместимость со SCADA "Complex";
устранить ограничения SCADA "Complex";
планомерно расширять функциональность.
3 Complex2
Рис. 1. Экран SCADA "Complex2".
После получения и изучения исходных текстов SCADA "Complex" выяснилось, что система использует несколько внешних библиотек/программ в процессе работы. Этими библиотеками являются:
pcxlib;
inputdb;
TCTask.
Из перечисленных трёх библиотек особенно хотелось-бы отметить библиотеку "TCTask". TСTask является свободной разработкой фирмы "Tecon", которая предназначена для создания многозадачного окружения реального времени для программ на языке C в рамках однозадачной системы DOS. Учитывая важность TCTask решено было, в первую очередь, выполнить перенос TCTask в среду DOS32. Задача значительно упростилась благодаря наличию исходных текстов библиотеки. По истечению двух месяцев библиотека TCTask была успешно портирована и достаточно стабильно работала. Текущая версия библиотеки TCTask включена в дерево проекта Complex2 и собирается вместе с ним.
Следующая внешняя библиотека — "inputdb", на самом деле являлась отдельной программой с помощью которой SCADA "Complex" загружает БД в память. Функции данной программы были выделена в отдельную программу из-за нехватки памяти, поэтому в Complex2 функции этой программы были включены в основной исполняемый файл, а в дальнейшем заменены на функции новой универсальной библиотеки работы с DBF-файлами.
Из этих библиотек только pcxlib оказалась недоступной в исходных кодах и, следовательно, не позволяла выполнить прямой перенос в новую систему. Как выяснилось библиотека "pcxlib" предоставляла функции для работы с изображениями в формате pcx, а также с библиотеками изображений. Проблема была решена путём реверс-инжиниринга необходимых функций данной библиотеки. В частности, в рамках проекта, были реализованы функции:
получение изображения из библиотеки;
помещение изображения в библиотеку;
отображение изображений в формате 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" работа перешла в стадию создания новых функций и расширения существующих возможностей. Так были расширены и добавлены возможности:
Объекты сигнализации:
Добавлена сигнализация миганием. Даже после исчезновения аварийной сигнализации продолжается мигание зелёным.
Количество групп контуров, графиков и мнемосхем расширено до 127.
Мнемосхемы:
Добавлена сигнализация миганием. Даже после исчезновения аварийной сигнализации продолжается мигание зелёным.
Выделение клапанов и других активных элементов. Мигание курсора на активном элементе или самого активного элемента для привлечения внимания к активному элементу.
Добавлена возможность входа в настройки регуляторов.
Увеличено, до 16, число быстро-доступных активных элементов, посредством альтернативной раскладки.
Добавлено отображение направления недостоверности.
Группы контуров:
Добавлена возможность произвольного заполнения группы.
Графики:
Добавлена возможность произвольного заполнения группы.
Количество графиков в группе графиков увеличено до 8.
Обзорный кадр:
Добавлена возможность входить в настройки регуляторов.
Добавлена сигнализация миганием. Даже после исчезновения аварийной сигнализации продолжается мигание зелёным.
Виртуальный контроллер:
Добавлена поддержка переменного количества коэффициентов и переменных. Количество коэффициентов и переменных может свободно варьироваться от 0 до 127.
Каждый вход и коэффициент именован строкой длиной не более 127 символов.
Разработан интерпретатор математической записи в одну строку.
Добавлена корректная обработка исключительных ситуаций при манипуляции с вещественными числами.
Создана гибкая и мощная библиотека работы с БД типа Dbase.
Добавлена зона нечувствительности, используемая при сигнализации.
Клавиатура:
Добавлена поддержка раскладок различных клавиатур. Тип клавиатуры можно просто выбрать в параметрах запуска.
Добавлена поддержка кодов клавиш с удержанных вместе с клавишей "Shift".
Разработан новый контроллер клавиатуры для расширения функциональности SCADA системы в целом.
Сигнализация:
Добавлена поддержка звуковых адаптеров (Sound Blaster), что предоставляет проигрывание звуковых файлов формата "WAV" на любую скорость, моно и стерео звучания, 8 разрядного качества.
Разработан синтез речи методом фонемного синтеза с поддержкой Русского и Украинского языков.
Печать:
Добавлена функция печати экрана в файл изображения PCX.
Протоколы:
Добавлен протокол событий, в который помещаются сообщения всех отклонений от нормы.
Контроллеры:
Полностью пересмотрена схема работы с контроллерами в результате чего все функции, отвечающие за работу конкретного контроллера, инкапсулированы в соответствующем им файле.
Добавлена полная поддержка контроллеров фирмы Siemens S7-300 и S7-400 на базе коммуникационного процессора фирмы Hilsher CIF50PB и драйверов этой фирмы для ОС Linux, портированных в ОС DOS32.
Добавлена частичная поддержка контроллера UMC-800.
Добавлена возможность повышения частоты системного таймера, а следовательно и увеличения частоты опроса контроллера более 18Гц.
Архивы:
Добавлена возможность указания периода архивирования от 1 до 9 сек, с учётом периодичности архивирования меняется отображение всех графиков.
В настоящий момент дерево проекта унифицировано и собирается свободным компилятором OpenWatcom версии 1.3. Причём, компилировать проект можно как с помощью IDE-среды компилятора Watcom так и просто командой wmake из дерева проекта. Следовательно, проект можно собрать в ОС DOS или в любом эмуляторе среды DOS, например в эмуляторе DOSEMU.
4 Complex-конфигуратор
Рис. 2. Конфигуратор SCADA Complex2.
В процессе расширения и добавления новых функций в SCADA "Complex2" остро стал вопрос в расширении функциональных возможностей конфигурационных утилит SCADA "Complex". Конфигурация SCADA "Complex" вообще состоит из группы конфигурационных утилит:
PR22 – утилита написана на "Clip" и предназначена для конфигурирования контроллеров и их параметров.
Form – утилита написана на "Clip" и предназначена для конфигурирования форм отображения.
Grad – утилита написана на "С" и предназначена для создания мнемосхем и привязки динамики.
Algoblock – утилита написана на "Clip" и предназначена для конфигурирования виртуального контроллера.
Поскольку утилиты написанные на "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 выполняет функции:
Добавление новых типов контроллеров путём корректировки файла описания типов контроллеров. Позволяет забыть про необходимость корректировки конфигуратора при каждом подключении к системе новых типов контроллеров. Кроме того, позволяет предоставлять заказчику только определённый список контроллеров.
Открытие сразу нескольких окон конфигурации, а также окон другого проекта путём смены текущего каталога.
Операции с контроллерами: добавить, вставить, удалить, удалить группу, переименовать, изменить порядок в списке.
Операции над параметрами: добавить, вставить, удалить, удалить группу, переименовать, перенести в другой контроллер, перенести группу, поиск, поиск следующего, изменить порядок в списке.
Операции над объектами сигнализации: добавлять, вставлять, удалять, переименовывать объекты сигнализации (а также групповые операции), менять порядок в списке объектов сигнализации, подключать дискретный параметр, отвечающий за состояние сигнализации объекта сигнализации, добавлять, вставлять, удалять, заменять мнемосхемы (а также групповые операции), менять порядок в списке мнемосхем, добавлять, вставлять, удалять, заменять группы графиков (а также групповые операции), менять порядок в списке группы графиков, добавлять, вставлять, удалять, заменять группы контуров (а также групповые операции), менять порядок в списке группы контуров.
Операции над группами контуров: добавлять, вставлять, удалять, переименовывать группы контуров (а также групповые операции), менять порядок в группе контуров, устанавливать/редактировать имя группы контуров, добавлять, удалять, копировать параметры в восьми позициях выбранной группы контуров.
Операции над группами графиков: добавлять, вставлять, удалять, переименовывать группы графиков (а также групповые операции), менять порядок в группе графиков, устанавливать/редактировать имя группы графиков, добавлять, удалять, копировать параметры в восьми позициях выбранной группы графиков, устанавливать/редактировать границы отображения параметра в группе графиков.
Операции над обзорными кадрами: добавлять, вставлять, удалять, переименовывать обзорные кадры (а также групповые операции), менять порядок обзорных кадров, установка количества строк и столбцов, добавлять, удалять, копировать параметры в доступных позициях выбранного обзорного кадра.
Операции над сводными таблицами: добавлять, вставлять, удалять, переименовывать сводные таблицы (а также групповые операции), менять порядок сводных таблиц, установка количества строк и столбцов, редактировать имена окон, редактировать имена параметров, добавлять, удалять, копировать параметры в доступных позициях выбранных окон указанной сводной таблицы обзорного кадра.
Операции над голосовыми сообщениями: добавлять, вставлять, удалять, переименовывать голосовые сообщения (а также групповые операции), менять порядок голосовых сообщений, установка приоритета сообщения, выбор языка сообщения, редактирование текста сообщения и текста рекомендации, подключение звуковых файлов из библиотеки звуковых файлов, проговаривание набранного сообщения, наговаривание требуемого сообщения (не реализовано).
Операции над мнемосхемами: добавлять, вставлять, удалять, переименовывать мнемосхемы (а также групповые операции), менять порядок мнемосхем, предварительный/тестовый просмотр выбранной мнемосхемы, добавлять, вставлять, удалять, заменять статику выбранной мнемосхемы (а также групповые операции), менять порядок статики выбранной мнемосхемы, редактирование параметров выбранной статики, добавлять, вставлять, удалять, заменять параметры динамики выбранной мнемосхемы (а также групповые операции), менять порядок параметров динамики выбранной мнемосхемы, устанавливать тип динамики для выбранного параметра динамики, и настройка соответствующих характеристик динамики, выбор позиции параметра динамики на экране, с отображением мнемосхемы в целом, используя мышь или клавиатуру.
Операции над формулами алгоблоков: добавлять, вставлять, удалять, переименовывать формулы (а также групповые операции), менять порядок формул, копировать формулы из других проектов(библиотек),выбирать тип редактируемых формул или фиксированные формулы или гибкие (по умолчанию доступны только гибкие, а выбор фиксированных скрыт за комбинацией клавиш Ctrl-F10), добавлять, вставлять, удалять, переименовывать входы и коэффициенты (а также групповые операции), менять порядок входов и коэффициентов с соответствующей перестановкой параметров в описание формулы, редактировать описание формулы с проверкой синтаксиса.
Операции над алгоблоками: добавлять, вставлять, удалять, заменять алгоблоки (а также групповые операции), менять порядок алгоблоков, выполнять поиск (по имени алгоблока, переменной используемой в алгоблоке, типу алгоблока), выполнять поиск следующего алгоблока по ранее описанным признакам, редактировать наименование алгоблока, подключать, очищать параметры на входах алгоблоков, редактировать значения коэффициентов алгоблоков, менять тип(формулу) алгоблока, контролировать правильность выбора формулы в поле обзора формулы.
Операции с библиотеками: добавлять, вставлять, удалять, извлекать рисунки из библиотеки рисунков (а также групповые операции), менять порядок рисунков в библиотеке рисунков, корректировать рисунки под EGA палитру, добавлять, вставлять, удалять, извлекать звуковые файлы из библиотеки звуков (а также групповые операции), менять порядок звуков в библиотеке звуков.
Операции общего контроля БД с возможностью автоматического устранения дефектов и полного документирования процесса проверки.
Изменение текущей директории (для открытия БД другого проекта).
Просмотр протокола сообщений программы конфигурирования.
Контроль размера доступной оперативной памяти.
В настоящий момент дерево проекта унифицировано и собирается свободным компилятором OpenWatcom версии 1.3. Причём, компилировать проект можно как с помощью IDE-среды компилятора Watcom так и просто командой wmake из дерева проекта. Следовательно, проект можно собрать в ОС DOS или любого эмулятора среды DOS, например в эмуляторе DOSEMU.