Встроенные языки программирования
Встроенные языки программирования - мощное средство SCADA - систем, предоставляющее разработчику гибкий инструмент для разработки сложных приложений. Первые версии SCADA - систем либо не имели подобных языков, либо эти языки реализовывали небогатый набор функций. В современных версиях SCADA - систем функциональные возможности языков становятся существенно богаче. Явно выделяются два подхода:
- Ориентация встроенных языков программирования на технологов. Функции в таких языках являются высокоуровневыми, не требующими профессиональных навыков программирования при их использовании. Количество таких функций в базовых поставках не исчисляется сотнями, хотя существуют свободно распространяемые библиотеки дополнительных функций.
- Ориентация на системного интегратора. В этом случае в качестве языков чаще всего используются VBasic - подобные языки.
В каждом языке допускается расширение набора функций. В языках, ориентированных на технологов, это расширение достигается с помощью дополнительных инструментальных средств (Toolkits). Разработка дополнительных функций выполняется обычно программистами - профессионалами.
Разработка новых функций при втором подходе выполняется обычно разработчиками приложений (как и в традиционных языках программирования).
Полнота использования возможностей встроенных языков (особенно при втором подходе) требует соответствующего уровня квалификации разработчика, если, конечно, в этом есть необходимость. Требования задачи могут быть не столь высокими, чтобы применять всю "мощь" встроенного языка.
Во всех языках функции разделяются на группы, часть из которых присутствует практически во всех языках: математические функции, функции работы со строками, обмен по SQL , DDE - обмен и т. д.
В разрабатываемом приложении создаются программные фрагменты, состоящие из операторов и функций языка, которые выполняют некоторую последовательность действий. Эти программные фрагменты связываются с разнообразными событиями в приложении, такими как нажатие кнопки, открытие окна, выполнение логического условия (a +b > c). Каждое из событий ассоциируется с графическим объектом, окном, таймером, открытием/ закрытием приложения. Когда приложение содержит сотни окон, тысячи различных графических объектов, а с каждым из них связано несколько событий, в приложении может "работать" огромное количество отдельных программных фрагментов. Велика вероятность их "одновременной" активизации.
Каждая из функций во встроенном языке выполняется в синхронном или асинхронном режиме. В синхронном режиме выполнение следующей функции не начинается до тех пор, пока не завершилось исполнение предыдущей. При запуске асинхронной функции управление переходит следующей, не дожидаясь завершения исполнения предыдущей функции.
В связи с этим возникает несколько вопросов. С каким приоритетом исполняется каждый из фрагментов, допускается ли рекурсия при обработке событий и если да, то каков уровень вложенности? В SCADA - системах уровень вложенности пока не стандартизован, но оговаривается особо в рамках каждой из них.
3.1.1. Скрипты в InTouch
Скрипты в InTouch - это программные фрагменты, активизируемые по событиям (по нажатию клавиши, кнопки, открытию окна, изменению значения переменной и т. д.).
Типы скриптов
В InTouch различают несколько типов скриптов:
- Application Scripts (скрипты уровня приложения) относятся ко всему приложению и используются для запуска других приложений, имитации технологических процессов, вычисления значений переменных и т.д.
- Window Scripts (скрипты уровня окна) связываются с конкретным окном.
- Key Scripts (клавишные скрипты) привязываются к какой-либо клавише или комбинации клавиш клавиатуры. Это может быть полезным при создании каких-либо глобальных для всего приложения функций (возврат в главное окно, окончание сеанса работы с приложением и т. д.).
- Touch Pushbutton Action Scripts (скрипты, запускаемые кнопками) очень похожи на клавишные скрипты и связываются с объектами, которые будут использоваться в качестве исполнительных кнопок. Эти скрипты запускаются при каждом нажатии на объект-кнопку.
- Condition Scripts (скрипты по изменению логического выражения) связываются с логической переменной или выражением, которое будет принимать значения либо "истина", либо "ложь". Логические скрипты могут содержать в себе и аналоговые переменные.
- Data Change Scripts (скрипты по изменению данных) связываются либо с переменной, либо с полем переменной. Эти скрипты исполняются только один раз, когда значение переменной либо поля меняется на величину, превышающую значение допуска, заданного в словаре переменных.
- ActiveX Event (скрипты событий ActiveX) предназначены для поддержки механизма реакции на события в ActiveX - объектах. С каждым событием может быть связан один скрипт типа ActiveX Event, запускающийся в WindowViewer во время исполнения приложения.
- Quick Function - скрипты, которые могут вызываться из других скриптов и использоваться в выражениях при определении динамических свойств объектов.
Диалоги редактора, открываемые при создании скриптов различных типов, имеют небольшие отличия. Вызов диалога редактора скриптов в окне WindowMaker осуществляется командой Special/Scripts с последующим выбором типа создаваемого или редактируемого скрипта. Для этого можно также воспользоваться окном Application Explorer, выбрав папку Scripts. На рис. 3.1 приведен диалог Application Scripts (скрипты уровня приложения).
Рис. 3.1. Редактор скриптов Application Scripts (уровень приложения) |
Редактор скриптов InTouch поддерживает два типа скриптов: простые и сложные. Простые скрипты - это скрипты, содержащие операторы присваивания, сравнения, простые математические функции и т. д. Сложные скрипты позволяют выполнять различные логические операции типа IF - THEN - ELSE, а также могут включать циклы типа FOR - NEXT.
Справа, в поле Functions, размещены клавиши вызова списков различных групп встроенных функций. Доступ к спискам встроенных функций возможен также командой Insert/Functions с последующим выбором группы функций (см. рис. 3.1).
Встроенные функции
В пакете InTouch имеется набор встроенных функций, которые могут быть связаны с командами или использованы в скриптах для выполнения самых различных задач.
Все встроенные функции разбиты на четыре группы:
- String... - для обработки различных символьных строк и переменных;
- Math... - математические функции;
- System... - системные функции;
- Misc... - функции для работы с алармами распределенных систем, трендами, печатью и др.
Вызов списка функций группы осуществляется нажатием соответствующей клавиши. Например, щелчок по клавише String... редактора скриптов вызывает появление диалога Choose function (выбор функции) со списком строковых функций (рис. 3.2).
Рис.3.2. Список строковых функций |
Описание некоторых функций этого списка приведено в табл. 3.1.
Таблица 3.1.
|
Каждая строковая функция имеет один или несколько аргументов (до 6). Например, синтаксис функции StringFromReal выглядит следующим образом:
StringFromReal(Number,Precision,Type);
- Number - конвертируемая вещественная величина;
- Precision – количество десятичных знаков;
- Type - тип формата ( "f", "e", "E").
Например,
функция StringFromReal (263.365, 2, "f") возвращает «263.36»;
функция StringFromReal (263.365, 2, "e") возвращает «2.63е2»;
функция StringFromReal (263.55, 3, "E") возвращает «2.636Е2».
Функция Text имеет два аргумента: Text(Analog_Tag, "Format_Text");
-Analog_Tag - вещественное или целое число;
- Format_Text - формат преобразования.
Если указанный формат функции Text - "#0.00", то:
- при Analog_Tag = 66 функция возвращает 66.00;
- при Analog_Tag = 22.269 функция возвращает 22.27;
- при Analog_Tag =9.999 функция возвращает 10.00.
- Щелчок по клавише Math... вызывает появление диалога Choose function (выбор функции) со списком математических функций.
Рис.3.3. Список математических функций |
Математические функции работают с целыми и вещественными аргументами, выдавая целый или вещественный результат. В левой части оператора присваивания допускается указывать и целые переменные. Однако необходимо иметь ввиду, что преобразование вещественного значения в целое может привести к усечению результата.
- Системные функции делятся на две категории: файловые (File) и для работы с Windows - приложениями (Info). Список системных функций приведен на рис.3.4.
Рис.3.4. Список системных функций |
Файловые функции предназначены для считывания и записи информации в файлы. У всех файловых функций есть два общих аргумента - Filename и FillOffset. Аргумент Filename (имя файла) хранит имя файла, из которого должна быть считана или в который должна быть записана информация (имя также должно включать и путь к файлу). Аргумент FillOffset (смещение в файле) задает относительную позицию в файле, начиная с которой будут читаться или записываться данные. Смещение задается в байтах от начала файла. Первый байт файла имеет смещение 0. После завершения каждая функция возвращает следующее доступное смещение в файле. Например, если функция читает 5 байтов данных, начиная с 10-го байта, то после завершения функция возвратит 15. Некоторые встроенные функции группы System приведены в табл. 3.2.
Таблица 3.2
|
Остальные аргументы файловых функций не поддаются типизации и различны для каждой функции.
Например, функция FileReadFields имеет четыре аргумента и следующий синтаксис:
FileReadFields(Filename,FileOffset,StartTag,NumberOfFields);
- StartTag - идентифицирует первый элемент в имени InTouch-переменной;
- NumberOfFields - идентифицирует число полей для чтения.
- Группа функций Miscellaneous (клавиша Misc...) включает функции для работы с алармами распределенных систем, трендами, печатью и др.
Рис. 3.5. Список функций группы Miscellaneous |
В этой широкой (с точки зрения назначения функций) группе можно выделить несколько более узко специализированных подгрупп. Функции, название которых начинается с alm, используются только в распределенных системах алармов. Некоторые из них приведены в табл.3.3.
Таблица 3.3
|
Первым аргументом всех встроенных функций алармов является ObjectName (имя объекта алармов). Часто в роли одного из аргументов выступает Comment (комментарий). Например, функция almAckSelect имеет следующий синтаксис: almAckDisplay (ObjectName,Comment);
Функции, название которых начинается с HT, используются только с архивными трендами. Примеры таких встроенных функций - в табл.3.4.
Таблица 3.4
|
Встроенные функции для работы с архивными трендами также могут иметь несколько аргументов (до четырех). Функции, приведенные в табл. 5.3.2, имеют следующий синтаксис:
- HTGetPenName(Hist_Tag, UpdateCount, PenNum);
- HTGetValue(Hist_Tag,UpdateCount,PenNum,ValType_Text);
- HTScrollLeft(Hist_Tag,Percent);
- HTSetPenName(Hist_Tag,PenNum,Tagname);
- HTZoomIn (Hist_Tag,LockString).
Первый аргумент всех встроенных функций для работы с трендами - Hist_Tag (имя тренда). Из других аргументов следует отметить PenNum (номер пера тренда), ValType_Text (строка, указывающая тип возвращаемого значения), Tagname (новое имя пера).
Функции, название которых начинается с wc (табл.3.5.), используются с управляющими объектами окна (простые списки, текстовые окна, ниспадающие списки и т. д.)
Таблица 3.5
|
Функции этой подгруппы также могут иметь до четырех аргументов:
- wcDeleteItem("ControlName", ItemIndex);
- wcInsertItem("ControlName", ItemIndex, "MessageTag");
- wcLoadText("ControlName", "Filrename");.
Первый аргумент всех встроенных функций этой подгруппы - ControlName (имя управляемого окна). Часто в качестве аргумента используются ItemIndex (номер, соответствующий позиции элемента), MessageTag (строковое сообщение), Filrename (имя файла в формате ASCII).
В рассматриваемой группе функций Miscellaneous следует отметить функцию PrintWindow, i?aaiacia?aiioю для печати окна. Ее синтаксис выглядит следующим образом:
PrintWindow("Window",Left,Top,Width,Height,Options);,
где:
- Window - имя окна;
- Left - число дюймов от левого края;
- Top - число дюймов от верхнего края;
- Width - ширина распечатываемого окна;
- Height - высота распечатываемого окна;
- Options - дискретные значения 0 или 1.
Вставка встроенных функций в скрипт производится щелчком по выбранной функции в списке функций. Она вместе со своими аргументами будет автоматически вставлена в текст скрипта в точку, указанную курсором. После этого можно отредактировать список аргументов.
По окончании редактирования скрипта следует нажать кнопку Ok. При обнаружении в скрипте каких-либо ошибок на экран будет выведено соответствующее сообщение. В большинстве случаев курсор установится в ту позицию, которая привела к появлению ошибки. Прежде чем скрипт будет сохранен, все ошибки должны быть исправлены.
Функции Quick Function
Quick Functions - это скрипты, которые могут вызываться из других скриптов и использоваться в выражениях при определении динамических свойств объектов. Скрипты Quick Functions хранятся внутри того приложения, в котором они были созданы, и могут многократно использоваться в других скриптах InTouch.
Наиболее часто эти функции используют в выражениях при определении динамических свойств объектов. Чем это вызвано? Дело в том, что длина выражения в поле Expression диалогов определения динамических свойств объектов должна быть не более 256 символов. Это относится к таким динамическим свойствам, как цвет линии, цвет заполнения, изменение высоты и ширины, вертикальное и горизонтальное перемещение, вертикальное и горизонтальное заполнение, видимость, мерцание, ориентация, блокировка.
Диалог Fill Color (цвет заполнения), содержащий поле Expression, приведен на рис.3.6.
Рис.3.6 Диалог Fill Color (цвет заполнения) |
Для ввода более длинных выражений можно воспользоваться функциями Quick Functions. При этом выражение в поле Expression должно содержать операторы CALL вызова функций Quick Functions, каждая из которых, в свою очередь, должна иметь в качестве последнего оператора RETURN для возврата результата в вызывающее выражение. Организованное таким образом выражение может содержать многие тысячи символов и быть сколь угодно сложным.
Сохраненная функция Quick Functions может быть использована в любом другом скрипте или выражении.
Quick Functions могут быть синхронными и асинхронными скриптами. Синхронные скрипты выполняются последовательно, в то время, как после запуска одного асинхронного скрипта может быть запущен другой (синхронный или асинхронный) скрипт. Это позволяет отделять исполняющиеся довольно долго операции (типа обращений к базам данных) от основной программы. Асинхронные скрипты не могут возвращать результаты. Поэтому в качестве скриптов Quick Functions, используемых в выражениях (Expression) для определения динамических свойств объектов, следует применять только синхронные скрипты.
Создание скриптов Quick Functions осуществляется в диалоговом окне редактора Quick Functions. Вызов этого диалога на экран в окне WindowMaker производится в командой Special/Scripts с последующим нажатием на строке Quick Functions.
Рис.3.7. Диалог редактора Quick Functions |
Список Name содержит имена всех определенных к данному моменту скриптов Quick Functions. Щелчок по имени скрипта выводит его текст в рабочее поле диалога.
Команда Scripts/New предназначена для создания нового скрипта и вызывает на экран диалог для ввода его имени (в середине рис.3.7). После щелчка по Ok новое имя будет включено в список имен Name.
Следующий этап - определение аргументов нового скрипта в таблице Arguments диалога Quick Function. В левую колонку таблицы вводят имя аргумента (до 31 символа), в правую - его тип (Integer, Real, Discrete, Message). В одном скрипте допускается до 16 аргументов.
После определения типов аргументов можно приступать к написанию текста скрипта Quick Function в рабочем поле (под таблицей Arguments).
3.1.2. Встроенный язык программирования Cicode
Cicode - встроенный язык программирования системы Citect, созданный специально для мониторинга и управления приложениями. Это структурированный язык, похожий на Visual Basic или 'C'. Применение Cicode предоставляет пользователю доступ к данным проекта в режиме реального времени, а также ко всем переменным, алармам, трендам, отчетам и т. д.
Cicode поддерживает многозадачность и удаленный вызов процедур.
Команды Cicode
Для управления системой Citect и технологическим процессом используются команды. Каждая команда имеет механизм ее запуска. Команды могут быть вызваны вручную, когда оператор нажмет некоторую последовательность клавиш или кнопку на графической странице. Можно произвести конфигурирование команд для автоматического выполнения:
- при регистрации оператора для входа или выхода из среды исполнения;
- при открытии и закрытии графических страниц;
- при срабатывании алармов;
- при срабатывании событий;
- при выдаче отчетов.
Наиболее часто используют два типа команд:
- Touch commands (команды по нажатию) - активируются путем щелчка мышью на объекте.
- Keyboard commands (команды клавиатуры) - активируются путем набора соответствующих инструкций с клавиатуры.
Команды по нажатию (Touch Commands)
Оператор может выполнять команду (или серии команд) щелчком мыши на объекте. Можно задать несколько команд для одного объекта: одна команда выполняется, когда оператор нажал клавишу мыши на объекте, другая - когда отпустил клавишу, и третья - если оператор нажал и удерживает клавишу мыши. Предоставляется также возможность определить запрещающее условие для любого объекта на странице (включая кнопки). Когда это условие активно, объект не выделен или даже скрыт, и оператор не может его выбрать.
Можно привести множество примеров применения Touch Commands. В графических интерфейсах часто используют кнопки для запуска и остановки насосов, для вкл./выкл. электродвигателей, для перехода на другие графические страницы. Характерным примером применения Touch Commands является вызов выпадающего окна для ввода информации (суперджин). В одних случаях это лицевая панель контроллера, в других - пульт управления насосом или клапаном. С помощью кнопок и иконок, расположенных в этих выпадающих окнах, можно выполнять различные команды: щелчок по соответствующей иконке вызывает смену режима работы контроллера (ручное и автоматическое управление), клавишами "пуск" и "стоп" оператор включает и выключает насосы и т. д.
Команды клавиатуры
Команды клавиатуры - это команды или серии команд, активируемые при введении оператором определенной последовательности клавиш.
Можно описывать команды клавиатуры, которые будут действовать:
- на всех графических страницах (System Keyboard commands - задаются в Project Editor);
- только на определенной графической странице (Page Keyboard commands - задаются в Page properties);
- только, если оператор указал мышью на определенный объект (Object keyboard commands - задаются в свойствах объекта).
Если одна и та же последовательность клавиш назначена для различных команд в зависимости от местонахождения, будет исполняться команда с максимальным приоритетом. Порядок приоритета (от высшего к низшему) следующий:
- объектные команды клавиатуры;
- страничные команды клавиатуры;
- общесистемные команды клавиатуры.
Командам можно присвоить привилегии и посылать сообщения на регистрацию команды и времени ее подачи.
Для определения команд необходимо ввести выражение или несколько выражений в поле команд закладки Input диалога Свойства объекта (рис.3.8). Каждое выражение в команде обычно используется для решения одной задачи, такой как ввод значения переменной, вычисление значения, вывод сообщения на экран, запуск отчета и т. д.
Рис.3.8. Диалог Свойства объекта на закладки Input/Touch |
Выражения Cicode
Cicode - выражения являются базовыми элементами языка Cicode. В выражениях могут быть константы, значения переменных или результаты сложных вычислений. Выражения можно использовать для вывода на экран или регистрации данных для мониторинга и анализа, для запуска различных состояний системы, таких как алармы, события, отчеты.
В отличие от команд, выражения не выполняют конкретных задач, они их оценивают. Этот процесс оценки значения можно использовать для вывода информации на экран или принятия решений.
Функции Cicode
Cicode - функции могут выполнять более сложные задачи, чем команды и выражения. Citect имеет около 700 встроенных функций, которые могут показывать страницы, подтверждать алармы, делать вычисления и т. д.
- Cicode - функция - это набор выражений, переменных, операторов, условий выполнения и других функций. Эти функции эквивалентны подпрограммам BASIC и подпрограммам или функциям, используемым в Pascal или C.
- Вызов функции осуществляется введением ее имени в любую команду или выражение. При этом должен быть соблюден следующий синтаксис:
FunctionName(Arg1, Arg2,...); где:
- FunctionName - имя функции;
- Arg1, Arg2,... - аргументы функции.
Обычно функции требуют нескольких аргументов, но некоторые функции имеют один строковый аргумент. Например, функция PageDisplay("Boiler 1"); вызывает графическую страницу "Boiler 1". Следует обратить внимание на то, что строковый аргумент помещен в двойные кавычки.
Большинство функций требует нескольких аргументов. Список аргументов должен находиться в скобках, один от другого аргументы отделяются запятой. Очень важен порядок введения аргументов в функцию.
Например, функция Login("Manager", "ABC"); предназначена для регистрации пользователя в системе. Первый аргумент ("Manager") указывает имя пользователя, а второй аргумент ("ABC") - его пароль. Если изменить порядок ввода аргументов, при регистрации пользователя будет выведена ошибка. В качестве аргумента можно использовать целые и действительные числа.
В качестве примера такой функции можно привести AlarmAck(1, 0);. С помощью этой функции можно подтверждать алармы на страницах текущих алармов. Первый аргумент несет информацию о выбранном способе подтверждения алармов (1 - подтверждение всех алармов страницы), а второй - о списке алармов на странице (0 - подтверждение всех алармов списка, на котором установлен курсор).
Возможно использование в качестве аргументов встроенных функций и переменных проекта. Например, функция DspStr(25, "TextFont", B1_TIC_101_PV); выводит значение переменной B1_TIC_101_PV в анимационной точке AN25. Если заключить переменную в двойные кавычки ("B1_TIC_101_PV"), то будут выведены текстовые символы B1_TIC_101_PV, а не значение переменной. Второй аргумент несет информацию о шрифте, которым будет осуществлен вывод.
В качестве аргумента в функции можно использовать последовательность клавиш, вводимую оператором в режиме исполнения. Например, для облегчения выбора оператором страниц проекта можно определить последовательность клавиш ####### Enter и команду PageDisplay(Arg1);.
Рис.3.9. Диалог Свойства страницы на закладке Keyboard Commands |
При выполнении команды вводом с клавиатуры имени страницы с последующим нажатием клавиши Enter ее имя вводится в качестве аргумента Arg1 функции PageDisplay. Таким образом, оператор может вывести на экран любую страницу проекта.
- Имя каждой функции (FunctionName) включает следующую информацию:
- от трех до пяти букв для типа функции - Trend, Plot, Win...;
- одно или два слова описания данных - Info, ClietInfo, Mode...;
- одно слово описания действия - Get, Set, Read...
- Синтаксис встроенных функций может быть представлен следующим образом:
<Scope>
<ReturnDataType>
FUNCTION <functionname>
(<arg1datatype arg1[=DefaultValue]>,
<arg2datatype arg2[=DefaultValue]>,
. . .
<argndatatype argn[=DefaultValue]>)
<Statement(s);>
:
RETURN <ReturnValue;>
END
Во встроенной функции можно выделить семь основных частей :
- Scope - область применения (Public - для всех файлов или только объявленных в функции - Private);
- DataType - тип данных всех аргументов отдельной строкой;
- слово FUNCTION, набранное на клавиатуре отдельной строкой;
- FunctionName - имя функции; - аргумент (список аргументов, отделенных запятой);
- Statement(s) - выражение/выражения отдельной строкой в программе;
- слово END.
По умолчанию, область применения функции - Public. Другими словами, эта функция будет доступна всем файлам Cicode, страницам и базам данных проекта. Если функция объявлена как Private, то она доступна только тому файлу, в котором объявлена.
Обязательным является объявление типа всех аргументов функции (INT, REAL, STRING, OBJECT).
В системе Citect насчитывается несколько десятков групп встроенных функций. Основные из них приведены в табл. 3.7.
Таблица 3.7
|
Наиболее часто в Citect используются следующие шесть групп функций: Alarm, Page, Keyboard, Report, Time/date, Miscellaneous (функции для работы с алармами, страницами проекта, клавиатурой, отчетами, временем/датой и смешанные функции).
Группа Alarm включает более 40 встроенных функций. Некоторые достаточно часто применяемые функции этой группы представлены в табл.3.8.
Таблица 3.8
|
Группа Page насчитывает более 20 функций, среди которых часто применяются следующие функции (табл.3.9).
Таблица 3.9
|
Аргументы приведенных в табл. 3.9 функций имеют следующий смысл:
- Category - номер категории аларма;
- Page - имя страницы или ее номер (в двойных кавычках);
- sName - имя файла.
Редактор Cicode
Citect поддерживает около 700 встроенных функций. Эти функции (или комбинация нескольких функций) могут обычно выполнять большинство задач системы управления. Если же некоторые задачи не могут быть решены с помощью встроенных функций, можно написать собственные функции.
Редактор Cicode специально предназначен для редактирования и отладки Cicode - функций. Вход в Редактор Cicode (Cicode Editor) осуществляется из окна Project Editor нажатием иконки в инструментальной панели или командой Tools/ Cicode Editor.
Рис.3.10. Окно Редактора Cicode (Cicode Editor) |
Cicode Editor - полнофункциональная интегрированная среда программирования для создания и отладки программ на языке Cicode. Рабочая область редактора - окна, куда выводится содержимое файлов с программами на языке Cicode (рис.3.10). Одновременно может быть открыто несколько таких окон с программами, принадлежащими различным проектам.
Опции меню содержат все команды, необходимые для создания, редактирования и отладки программ. Для обеспечения быстрого доступа к некоторым командам под строкой меню размещены инструментальные панели, содержащие иконки для редактирования, компилирования и отладки программ.
В Cicode представлены стандартные операторы, применяемые в большинстве языков программирования: математические, операторы отношения, логические, битовые.
Условный оператор IF может быть использован в двух форматах: IF THEN и IF THEN ELSE. Cicode поддерживает два типа операторов цикла: FOR... DO и WHILE... DO.
Встроенные в редактор средства отладки программ позволяют запускать и останавливать процесс отладки, вставлять и удалять точки останова, а также контролировать пошаговое исполнение. Для задания точек останова можно использовать специальную функцию Cicode, либо вставлять их вручную.
Отличительный знак редактора Cicode - " жучок " в правом нижнем углу экрана, меняющий свой цвет в зависимости от режима работы: в режиме редактирования программы - красного цвета, в режиме отладки - зеленого.
Cicode - функции записываются в файлы, хранящиеся на жестком диске. Эти файлы имеют расширение .CI для их идентификации. При компилировании проекта компилятор читает все файлы, в которых хранятся Cicode - функции. Для каждой функции или группы функций можно создать свой файл. С точки зрения обслуживания в одном и том же файле лучше хранить функции, относящиеся к одной задаче. Например, хранить все функции, относящиеся к алармам, в файле Alarm.CI. Файлы с Cicode - функциями хранятся в одной директории вместе с проектом.
3.1.3. Взгляд со стороны на языки программирования InTouch и Citect
Выносимые на суд читателя системы - InTouch и Citect - предлагают пользователю языки программирования двух типов (см. начало раздела 3).
- В основную поставку InTouch входит набор до 100 функций. Но следует отметить, что:
- существуют десятки дополнительных библиотек с InTouch - функциями, которые загружаются отдельно;
- в InTouch возможна разработка Quick - функций на базе имеющихся операторов, встроенных функций и ранее созданных Quick - функций (после сохранения Quick - функции она автоматически появляется в общем списке функций InTouch);
- возможна разработка новых функций с использованием FactorySuite Toolkit и Visual C/C++.
- Язык Cicode в Citect разработан на базе С/С++. Набор встроенных функций в системе превышает 700. Разработка новых функций производится способом, свойственным традиционным языкам программирования.
- Синтаксический анализ программного кода в редакторе скриптов системы InTouch осуществляется в момент сохранения скрипта. При наличии ошибок диалог редактора скриптов не закрывается кнопкой Ok до тех пор, пока все ошибки не будут исправлены. При этом курсор каждый раз указывает на первую ошибку в списке.
- В Cicode синтаксический анализ программы выполняется на этапе компиляции файла Cicode. В этом языке используются свойственные традиционным языкам средства отладки: точки останова, пошаговое исполнение и т. д.
- В InTouch существуют функции для отладки, которые позволяют выводить в специальный файл (Wonderware Logger) статусную информацию о выполнении скриптов.
- Использование Cicode требует более квалифицированной подготовки разработчиков приложений, особенно, если планируется создание многочисленных дополнительных функций.
Базы данных
В самом общем смысле база данных (БД) - это система хранения информации, обращение к которой осуществляется через средство управления базой данных (СУБД). Н