TechnoC 2.1

Что есть лучшего? – сравнив прошедшее,
свести его с настоящим.
Козьма Прутков

Программиста-профессионала отличает творческий и взвешенный подход к выбору программного продукта. Учитывая, что рынок программных продуктов изобилует разнообразными средствами разработки прикладного ПО, его правильный выбор во многом предопределяет успех проекта. Если бы речь шла о создании прикладных программ, несомненно, большая часть программистов предпочла бы язык С или С++, как наиболее мощный и гибкий. В настоящей статье приведено описание C-подобного языка программирования, который с точки зрения авторов является наилучшим для реализации алгоритмов управления технологическими процессами.

В начале 90-х годов Международной Электротехнической Комиссией (МЭК) был опубликован стандарт IEC 1131-3, описывающий синтаксис и семантику пяти языков технологического программирования – графических: SFC (последовательность функциональных схем), FBD (схемы функциональных блоков), LD (релейно-контактные схемы) и текстовых: ST (структурированный текст), IL (язык инструкций). Основным является язык SFC, задающий структуру алгоритма в виде шагов и переходов. Другие языки служат для описания действий внутри шагов и условных операций при переходах. Наличие в стандарте высокоуровневых языков FBD и ST, простых, удобных и наглядных, сводит на нет потребность в низкоуровневых языках LD и IL. Указанные низкоуровневые языки могут быть востребованы специалистами, которые имеют опыт работы с этими языками и не желают переучиваться на что-либо новое. Обычно языки FBD и ST используются в комбинации с языком SFC, поэтому разработчику, занимающемуся технологическим программированием, необходимо знать несколько языков IEC 1131-3.

Использование графических языков для реализации алгоритмов направлено на облегчение процесса программирования, так как алгоритмы в графическом виде, как правило, должны лучше восприниматься человеком. Но это утверждение справедливо в случае реализации простых алгоритмов. Если задачу невозможно разбить на мелкие независимые части, либо такие части тесно взаимосвязаны, графическая форма представления программы выливается в клубок сплетенных функциональных блоков и связей, размещенный на множестве экранов. В этом случае алгоритм становится необозримым, процесс программирования усложняется, а на редактирование и отладку алгоритма требуется значительно больше времени, чем при использовании классических текстовых языков. Можно предположить, что графические языки ориентированы, в основном, на начинающих пользователей и предназначены, прежде всего, как средство для программирования простых задач либо задач, допускающих разбиение на простые, независимые части. При программировании прикладных задач в средах MS VisualStudio, CBuilder, Delphi в графической форме выполняется только построение интерфейса с человеком, а все кодирование выполняется в текстовом виде. Это является еще одним аргументом преимущества текстовой формы написания программ управления технологическими процессами.

Ограниченность стандарта и реализаций языков IEC 1131-3, наличие огромного количества наработанных, отлаженных функций и библиотек, написанных на языке С, перенос которых на языки IEC 1131-3 затруднен или связан с возможными ошибками, вынуждает многих производителей ПО для контроллеров расширять набор языковых средств за счет языка С. В составе инструментальных средств контроллеров обычно поставляется SDK, с помощью которого пользователь имеет возможность создать функцию на языке С и прикомпоновать ее к основной задаче.

Армия разработчиков программ на языке С многократно превышает количество специалистов, знакомых с языками IEC 1131-3. Кроме того, изучить азы языка С проще, чем заниматься изучением нескольких языков IEC 1131-3 причем зачастую по документации на иностранном языке. Наличие доступной литературы по С упрощает процесс изучения языка в ограниченном объеме инструкций, достаточных для простой и быстрой реализации задач буквально после прочтения первых глав книги. Однако использование языка С для реализации алгоритмов управления технологическими процессами связано с рядом неудобств. Даже располагая библиотекой готовых функциональных блоков, классов, драйверов устройств и т.п., пользователь вынужден заниматься разработкой сетевого обмена для связи со SCADA системами, решать задачу обновления (замены) исполняемой в контроллере программы и ее удаленной отладки, а также  реализовывать механизм дублирования контроллеров.

Изложенные выше проблемы  явились основанием для разработки инструмента программирования контроллеров с открытой архитектурой. В состав инструментальных средств системы технологического программирования на языке ТехноСи входят все необходимые средства – компилятор программ, интерпретатор программ, интегрированная среда разработки, включающая отладчик. В основе пакета TechnoC (TC) использован язык, синтаксически похожий на язык С, что способствует его быстрому освоению. Язык ТС обеспечивает набор простых и сложных (массивы и структуры) типов данных, полноценную целочисленную и вещественную арифметику, автоматическое приведение типов переменных, предоставляет обширную стандартную библиотеку математических функций, функций работы со строками, файлами, календарные функции, функции преобразования типов и чисел. Для высокоточной десятичной арифметики реализованы функции, позволяющие выполнять вычисление с точностью до 200 десятичных цифр. Для написания универсальных функций и функциональных блоков (ФБ) язык TC содержит тип данных variant. В качестве переменной типа variant могут быть переданы переменные произвольного типа. Также язык допускает использование необязательных (опциональных) параметров функций и ФБ.

Как бы ни была высока квалификация программиста, ошибки в разрабатываемых программах неизбежны. Благодаря встроенному механизму обнаружения ошибок, называемому обработкой исключительных ситуаций, программа на ТС защищена от ошибок целочисленного и вещественного деления на 0, обращения по индексу за пределами массива, переполнения диапазона для всех типов переменных, зацикливания программы, переполнения стека (например, при рекурсивном вызове функций). Соответствующая ошибка будет зафиксирована с точностью до номера строки оператора, вызвавшего ошибку, уведомление об ошибке будет отправлено через встроенный механизм сообщений, а код, вызвавший ошибку, будет "изолирован". Программист же получает для анализа необходимую информацию, что гарантирует исправление ошибки. Стандартное сообщение о возникновении исключительной ситуации выводится всегда, независимо от того, перехвачена исключительная ситуация или нет.

Язык ориентирован на решение задач управления технологическими процессами и располагает достаточным набором средств быстрого и качественного их решения. В частности язык ТС содержит функциональные блоки аналогового регулирования (ПИ, ПИД, ПИДД), динамических преобразований, первичной обработки и т.п. ФБ можно разрабатывать самостоятельно средствами языка ТС или на любом языке высокого уровня. В последнем случае функции и ФБ должны быть реализованы в виде динамически загружаемой библиотеки. ТС удачно сочетает простоту изучения, функциональность, независимость от сторонних библиотек, что обеспечивает высокую живучесть проекта, переносимость на разные платформы.

Грамматика технологического языка ТС практически не отличается от обычного языка программирования С. Ниже приведен фрагмент программы на языке ТС, демонстрирующий это утверждение.

Программа на языке ТС

Из языка изъято понятие "указатель", которое пугает новичков, изучающих язык С, и добавляет в язык потенциальные ошибки при использовании этого механизма даже опытными пользователями. Для передачи выходных параметров в функции использован механизм передачи переменных по ссылке аналогично языку С++..

В язык ТС добавлено понятие функционального блока – функции, имеющей внутреннюю память, тип данных "таймер", строковый тип данных, позволяющий манипулировать строкой как обычной переменной, выполняя операции присваивания, катенации, сравнения. Добавлено понятие "секций", которые представляют собой циклически выполняемые функции. Они могут быть включены (исполняться) или выключены (не исполняться). Секция обеспечивает удобное структурное разбиение программы с использованием локальных переменных, вызовов функциональных блоков и функций.

Если отдельные программные модули представляют ноу-хау и должны быть скрыты от посторонних глаз, их содержимое может быть зашифровано. В этом случае программный модуль превращается в "черный ящик".

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

Для организации обмена данными между задачами в языке ТС применяется "связывание" глобальных переменных с переменными из другой задачи. При этом не требуется соответствия типов связываемых переменных и переменных из другой программы. Интерпретатор обеспечит автоматическое приведение типов.

Для изменения настроечных коэффициентов функциональных блоков в состав пакета ТС включен ActiveX компонент. Указанный компонент может быть встроен в панели SCADA системы.

Современное программное обеспечение
способно кардинально изменить способы
решения наших повседневных задач
Билл Гейтс

Исполнительная система в составе инструментальных средств программирования на языке ТС  (интерпретатор) программ обеспечивает многозадачный режим работы в реальном времени с периодами от 1 мс. В отдельно взятом контроллере может выполняться несколько программ на языке TC (задач), каждая со своим периодом запуска. Максимальное количество задач в проекте – 255.

Для повышения надежности системы в интерпретаторе предусмотрена  возможность резервирования процессорных плат, сетевых адаптеров, полевых шин для опроса устройств ввода/вывода, что позволяет создавать надежные отказоустойчивые системы. При этом от пользователя требуется только сконфигурировать систему, указав признак резервирования контроллера, IP адреса основного и резервного контроллера и еще несколько опциональных параметров. Резервирование компонентов контроллера выполняется прозрачно для пользователя. Все операции с резервированным контроллером выполняются так же, как и при использовании одинарного контроллера. Также для повышения надежности системы в интерпретаторе существуют такие возможности, как периодическое сохранение файлов состояния задач на диске контроллера с восстановлением состояния задачи после рестарта контроллера, поддерживается работа с WatchDog таймером контроллера. Для контроля передаваемых по сети данных, а также входных и выходных данных используется контрольная сумма MD5, что гарантирует практически их 100%-ую целостность и достоверность.

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

Если отладка – процесс удаления ошибок,
то программирование должно быть процессом их внесения.
Э. Дейкстра.

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

В любой момент отладки имеется возможность выполнить просмотр и изменение значений глобальных и локальных переменных в окне наблюдения и изменение настроек ФБ, просмотр стека вызова функций и значений параметров вызова этих функций с возможностью перехода по стеку вызова. Отладчик поддерживает два режима ведения времени: реальное и виртуальное время. В режиме виртуального времени можно ускорить или замедлить в заданное количество раз течение реального времени для offline отладки алгоритмов скоротечных или длительных процессов. Отладчик предоставляет для просмотра экран отладки и окно вывода технологических сообщений. Мониторинг периода выполнения задачи может быть выведен в виде графика. Основные операции пользователя в отладчике, такие как останов задачи, обновление задачи, переключение контроллеров из активного режима в пассивный, отключение/включение секций, отключение/включение устройств ввода вывода, а также каналов устройств, фиксируются в журнале и передаются в SCADA систему в виде технологических сообщений.

Одной из привлекательных особенностей системы программирования TC является возможность внесения изменений в выполняющиеся задачи без остановки процесса управления в контроллере, а также без перекомпоновки операционной системы. Такая возможность есть прямое следствие реализации языка TC как интерпретирующей системы. Интерпретатор позволяет выполнить перегрузку программы в контроллере управления без нарушения его работы. Состояние всех переменных при перегрузке сохраняется, время выполнения цикла не нарушается, подмена выполняется в начале очередного цикла выполнения. В момент перегрузки допускается добавление новых задач в контроллер управления и удаление старых задач без остановки процесса управления. При замене программы возможно выполнять любые изменения - добавлять описание новых переменных, функций и секций, или, наоборот, удалять существующие переменные. Можно увеличивать или уменьшать размерности массивов, изменять любой исполнительный оператор программы. Кроме того, программист может оперативно вносить изменения в настройки устройств ввода/вывода. "На ходу" без остановки процесса управления программно или из интегрированной среды могут быть добавлены и/или удалены устройства, в которых могут быть добавлены и удалены каналы.

Работа с модулями ввода/вывода выполняется путем вызова соответствующих функций из драйвера, реализованного в виде DLL. В составе инструментальной среды поставляется драйвер, поддерживающий работу с устройствами серии ADAM-4000 и ADAM-5000 фирмы Advantech, I-7000 и I-8000 фирмы ICP DAS, MODBUS (и как разновидность HID3000 фирмы Pepperl+Fuchs, STAHL IS1 фирмы Stahl), FIELDPOINT FP1000 фирмы National Instruments, HART, ПКП1 фирмы Овен. Список поддерживаемых устройств постоянно пополняется. Различные устройства могут быть подключены к одному порту. Для подключения новых устройств и разработки собственных драйверов в составе инструментальных средств поставляется SDK с подробным описанием функций и интерфейсов их вызова и примером.

Для связи со SCADA системами используется OPC-сервер, обеспечивающий доступ к данным задач согласно спецификации OPC DA 2.04. OPC-сервер также выполняет роль сервера событий и тревог, обеспечивая обмен технологическими сообщениями между задачами и SCADA системой согласно спецификации OPC AE 1.10. OPC-сервер содержит диагностические данные о работе абонентов сети – абонент включен/выключен, активен/пассивен, доступен/недоступен, наличие ошибок в работе пользовательских и системных программ, суммарный объем трафика с абонентом, интенсивность сетевого обмена с абонентом и т.п. Сервер также может выполнять синхронизацию времени в контроллерах для поддержания единого времени в сети.

Пакет инструментальных средств системы технологического программирования на языке ТС включает интегрированную среду разработки технологических задач (TCIDE). Пример окна TCIDE приведен ниже на рисунке (кликните на рисунок чтобы увеличить):

Среда разработки

Удобная интегрированная среда позволяет быстро создать и отладить проект, предоставляя пользователю различные сервисы. Это и визуальное проектирование структуры (дерева) проекта и интерактивное определение свойств узлов проекта. Редактор программ выполняет подсветку синтаксиса, предоставляет возможность устанавливать закладки и быстро переходить к установленным закладкам. Неиспользуемые участки кода программ допускается "сворачивать" в одну строку. Редактор обеспечивает поиск по файлам проекта. Если во время компиляции программ/проекта будут обнаружены ошибки, пользователь может быстро перейти к месту ошибки из окна Build. Возможности, предоставляемые интегрированной средой, находятся на уровне сред программирования, к которым привык программист, работая с VisualStudio. Пакет инструментальных средств системы технологического программирования на языке ТС сопровождается подробной документацией на русском языке, содержащей в общей сложности свыше 500 страниц, а также CHM справкой для интегрированной среды разработки.

- Сэр, - вежливо спросил я,
- мы можем положиться на этот акулий порошок?
- Ну, - улыбаясь, произнес англичанин,
- это именно то, что мы хотели бы выяснить!
Тур Хейердал. Путешествие на «Кон-Тики»

Система программирования ТС практически не ограничивает размер кодовой части интерпретируемой программы, а также размер области ее данных, так как задачи выполняются в 32-разрядном адресном пространстве.

В настоящий момент поддерживаются интерпретаторы для настольных платформ Windows 9x/NT/2000/XP, а также для встраиваемой ОС Windows CE (платформа x86). Ведется работа по переносу интерпретатора в операционные системы Linux. В ближайшем будущем планируется поддержка интерпретатора для QNX. Эффективности и оптимизации работы интерпретатора было уделено особое внимание. Ниже приведены результаты оценки работы компилятора в сравнении с работой компилятора Microsoft VC++ 6.0.

Оценка производительности системы выполнялась при помощи стандартной программы WHETSTONES, которая используется для оценки производительности вещественной арифметики. В результате проведенных измерений получены следующие данные производительности интерпретатора ТС. Программа, скомпилированная с языка ТС, интерпретирует выполнение 10000 циклов за 171 секунду (5.8 MIPS), а программа, скомпилированная VC++ 6.0 - за 6 секунд, 166.7 MIPS. В реальной работе разница в производительности составляет ~ 5-6 раз. Это обусловлено тем, что функциональные блоки, на выполнение которых приходится основное время задачи, являются функциями, вызываемыми из DLL. Параллельно работающие задачи сетевого обмена, опроса устройств ввода/вывода, сохранения состояния задачи на диск и т.п. нивелируют разницу во времени выполнения.

Полнофункциональная демонстрационная версия продукта доступна для загрузки на сайте.