Предыстория

Идея создания проекта 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”. Компилятор “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.

Цели

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

снять ограничения физической памяти;

обеспечение совместимости со SCADA Complex;

устранить ограничения SCADA Complex;

планомерно расширять функциональность.

Complex2

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

pcxlib;

inputdb;

tctask.

Из перечисленных трёх библиотек особенно хотелось бы отметить библиотеку tсtask. TСtask является свободной разработкой фирмы Tecon(www.tecon.ru) которая предназначена для создания многозадачного окружения реального времени для программ на языке C в рамках однозадачной системы DOS. Учитывая важность tctask решено было в первую очередь выполнить перенос tctask в среду DOS32. Задача значительно упростилась благодаря наличию исходных текстов библиотеки. По истечению двух месяцев библиотека tctask была успешно портирована и достаточно стабильно работала. Текущая версия библиотеки tctask включена в дерево проекта Complex2 и собирается вместе с проектом 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-видеокарт для построения много-дисплейных конфигураций.
Невозможность изменения многих параметров системы без перекомпиляции. Например наличие отдельных исполняемых файлов для работы с инженерной и технологической клавиатурой.	Добавлена поддержка опций командной строки. Это позволило вынести многие опции в параметры запуска и соответственно подбирать конфигурацию под конкретные нужды.

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

Объекты сигнализации:

Добавлена сигнализация миганием даже после исчезновения аварийной сигнализации. Продолжается мигание зелёным.

Количество групп контуров, графиков и мнемосхем расширено до 127;

Мнемосхемы:

Добавлена сигнализация миганием даже после исчезновения аварийной сигнализации. Продолжается мигание зелёным.

Выделение клапанов и других активных элементов. Мигание курсора на активном элементе или самого активного элемента для привлечения внимания к активному элементу.

Добавлена возможность входить в настройки регуляторов.

Увеличено, до 16, число быстро доступных активных элементов, через альтернативную раскладку.

Добавлено отображение направления недостоверности.

Группы контуров:

Добавлена возможность произвольного заполнения группы.

Графики:

Добавлена возможность произвольного заполнения.

Количество графиков в группе графиков увеличено до 8.

Обзорный кадр:

Добавлена возможность входить в настройки регуляторов.

Добавлена сигнализация миганием даже после исчезновения аварийной сигнализации. Продолжается мигание зелёным.

Виртуальный контроллер:

Добавлена поддержка переменного количества коэффициентов и переменных. Количество коэффициентов и переменных может свободно варьироваться от 0 до 127.

Каждый вход и коэффициент именован именем длиной не более 127 символов.

Разработан интерпретатор математической записи в одну строку.

Добавлена корректная обработка исключительных ситуаций при манипуляции с вещественными числами.

Добавлен расширенный кадр управления.

Алгоритмы оптимизированы по времени.

Алгоритм регулятора имитирует регулятор контроллеров Siemens.

БД:

Создана гибкая и мощная библиотека работы с БД типа 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.

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

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

PR22 – утилита написана на “Clip” и предназначена для конфигурирования контроллеров и их параметров.

Form – утилита написана на “Clip” и предназначена для конфигурирования форм отображения.

Grad – утилита написана на “С” и предназначена для создания мнемосхем и привязки динамики.

Algoblock – утилита написана на “Clip” и предназначена для конфигурирования виртуального контроллера.

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

Сперва решено было реализовывать конфигуратор виртуального контроллер, поскольку он требовал значительных и неотложных изменений. Для реализации конфигуратора нужна была библиотека или среда создания TUI/GUI интерфейса. В начале выбор пал на компилятор BorlandC++ Builder. После создания первых набросков конфигуратора и переосмысления того что такой конфигуратор будет работать только в ОС 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.

Библиотека поддержки БД DBF

Контроллер клавиатуры

Виртуальный контроллер. Интерпретатор математической записи в одну строчку.

Синтезатор Русской и Украинской речи

Драйвер обслуживания нескольких PCI-видеоконтроллеров

Драйвер коммуникационного процессора CIF50PB

2005-04-18T16:44:28