Введениевскадасистемы
Скачать 3.5 Mb.
|
4.2.2. Отображениетрендов Для отображения трендов на экране в системе Citect предусмотрены специальные шаблоны страниц: • одиночный тренд (SingleTrend) - шаблон для создания страницы с одним окном трендов, в котором имеется до 8 перьев; • двойной тренд (DoubleTrend-) - шаблон для создания страницы с двумя окнами трендов, в каждом из которых имеется до 8 перьев; • сравнительный тренд (CompareTrend) - шаблон для создания страницы c двумя трендами, наложенными один на другой в целях их сравнения (до четырех пар графиков); • масштабный тренд (ZoomTrend) - шаблон страницы с функцией масштабирования; • выпадающий тренд (PopTrend) - шаблон для вывода тренда в любом месте экрана (в отдельном окне). • тренды по событию (EventTrend) - шаблон страницы с одним окном для тренда по событию во времени на восемь перьев; Эти шаблоны практически исчерпывают все потребности разработчика при создании трендов проекта. Если все-таки появится необходимость в создании нового шаблона, Citect и в этом случае предоставит свой инструмент. В графическом редакторе Graphics Builder на линейке инструментов имеется иконка NEW, щелчок по которой выводит на экран меню, одна из опций которого предназначена для создания нового шаблона (рис.4.2.5). Рис.4.2.5. Меню New для создания новой страницы, шаблона, символа, джинна и суперджина. Создание нового шаблона - интересная, творческая работа. Но читателю не менее интересно оценить то, что уже создал Citect. Тренды, созданные с помощью этих шаблонов, является одновременно и трендами реального времени (текущие данные появляются в реальном времени в правой части графика), и архивными трендами. Все шаблоны страниц уже снабжены различными средствами навигации и чтения значений параметров. Здесь присутствуют: • кнопки перемещения маркера по графикам влево и вправо, при этом перемещать репер можно маленькими или большими шагами, а также в начало или конец графика; • кнопка вывода статистических параметров - минимума, максимума, статистического среднего и стандартного отклонения; • кнопка увеличения выделенного участка графика; • кнопки изменения разрешения по времени и охватываемому периоду; • кнопка, позволяющая в реальном времени менять параметры перьев; • кнопки вывода данных графика на печать и записи в файл; • кнопка копирования данных в буфер обмена Windows для их использования в других приложениях (в табличном формате) типа Word, Excel и т. д. В качестве примера такого шаблона предлагается одиночный тренд (SingleTrend)-, приведенный на рис. 4.2.6. Рис.4.2.6. Шаблон одиночного тренда с окном настройки перьев. Панель сравнения графиков предоставляет оператору возможность одновременно выводить два графика, назначив каждому перу свои временные характеристики. Двойной щелчок мышью по полю тренда выводит на экран диалог конфигурирования перьев (8 перьев) тренда. Вводить с клавиатуры имена переменных нет необходимости. Достаточно открыть в поле каждого пера список переменных проекта и выбрать переменную, которая будет отображаться этим пером на тренде. Для переконфигурирования перьев тренда в режиме Runtime Citect предлагает использовать специальные страницы трендов и функцию PageTrend(), позволяющую подключать к этим страницам требуемые переменные (перья). С помощью этой функции можно выводить на одну страницу тренда переменные, имеющие одну и ту же частоту выборки (одновременно не более восьми). При создании такой страницы тренда следует все поля диалога конфигурирования перьев оставить пустыми, а функцию PageTrend( ) связать с одной из кнопок страницы меню. Теперь нажатие этой кнопки в режиме исполнения будет вызывать функцию PageTrend(sPage, sTag1 ... sTag8): • sPage - имя страницы тренда; • sTag1 ... sTag8 - имена переменных. Остается ввести имя страницы тренда и имена переменных для соответствующих перьев. Например, функция PageTrend("MyTrend", "PV1", "PV2", " PV3") обеспечит вывод переменных PV1, PV2, PV3 на страницу тренда с именем MyTrend. Все вышеизложенное делает механизм трендов в Citect удобным не только при конфигурировании (разработке), но и в процессе эксплуатации (Runtime). При запуске режима Runtime страница одиночного тренда будет выглядеть следующим образом (рис.4.2.7). Рис.4.2.7. Страница одиночного тренда в режиме Runtime. 4.3. Отличияподсистемотображенияиархивированияв InTouch и Citect Среди программных продуктов рассматриваемого класса (SCADA - системы) InTouch и Citect выделяются своими подсистемами архивирования и отображения регистрируемых на жесткий диск данных технологического процесса. Подсистема архивирования. И в Citect, и в InTouch используется кольцевой буфер, принцип построения которого предполагает автоматическое уничтожение файла с самыми старыми в настоящий момент данными. В Citect непосредственно указывается количество файлов в буфере и продолжительность регистрации в файл, в InTouch - количество дней в буфере, но исполняющая система InTouch ежедневно создает новый архивный файл. (или вместо подчеркнутых слов - количество дней в буфере, а фактически количество файлов, так как исполняющая система InTouch ежедневно создает новый архивный файл.) Данные для архивирования в InTouch задаются на этапе определения переменной приложения. Таким образом, любая переменная, независимо от ее типа, может быть включена в список для архивирования (опция Log Data). В Citect предлагается вводить дополнительную переменную (переменную типа Trend) и с ней связывать переменную Citect - приложения или выражение. Основным режимом регистрации в InTouch является режим по изменению значения, т. е. регистрация переменной производится только в тот момент, когда изменение значения переменной превысило величину, указанную в Log Deadband. В Citect основной режим регистрации - периодический (через определенные интервалы времени) либо по событию. Архивные файлы обеих подсистем имеют скрытый формат, что логично, но предоставляются утилиты для доступа к ним. Подсистема отображения. Для графического отображения архивной информации в InTouch используются два стандартных объекта (Real Time Trend, Historical Trend) и Wizard - объект, детально описанные в настоящей главе. Особенность данных объектов в том, что они могут вставляться в окно, и в них может выводиться до четырех (тренд реального времени) и восьми переменных (архивный тренд). Входящий в базовую поставку комплект Productivity Pack включает 16 Pen Trend, позволяющий выводить до 16 переменных или выражений. Каждый из указанных объектов масштабируется и поэтому может быть размещен в части окна или на всем окне. Средства отображения архивных данных в InTouch отличаются простотой встраивания в приложение и связывания с переменными. В Citect предлагается большое количество шаблонов различных типов трендов: один тренд (до 8 перьев) на странице, два тренда на странице и т. д. Это говорит о том, что Ci Technologies считает подобные шаблоны типичными для использования в проектах (свой опыт компания выразила в шаблонах) и предлагает их пользователям Citect. В InTouch предлагаются стандартные объекты тренда реального времени и архивного тренда. Исторически сложилось так, что эти объекты разделены. Деление это условное хотя бы потому, что 16 Pen Trend из Productivity Pack функционирует в режиме и тренда реального времени, и архивного тренда. Шаблоны подсистемы отображения Citect едины для трендов реального времени и архивных трендов. Они позволяют выводить на страницы трендов архивные данные для их последующего анализа, отображая в то же самое время значения переменных в реальном времени. ГЛАВА 5. ВСТРОЕННЫЕЯЗЫКИПРОГРАММИРОВАНИЯ Встроенные языки программирования - мощное средство SCADA - систем, предоставляющее разработчику гибкий инструмент для разработки сложных приложений. Первые версии SCADA - систем либо не имели подобных языков, либо эти языки реализовывали небогатый набор функций. В современных версиях SCADA - систем функциональные возможности языков становятся существенно богаче. Явно выделяются два подхода: • Ориентация встроенных языков программирования на технологов. Функции в таких языках являются высокоуровневыми, не требующими профессиональных навыков программирования при их использовании. Количество таких функций в базовых поставках не исчисляется сотнями, хотя существуют свободно распространяемые библиотеки дополнительных функций. • Ориентация на системного интегратора. В этом случае в качестве языков чаще всего используются VBasic - подобные языки. В каждом языке допускается расширение набора функций. В языках, ориентированных на технологов, это расширение достигается с помощью дополнительных инструментальных средств (Toolkits). Разработка дополнительных функций выполняется обычно программистами - профессионалами. Разработка новых функций при втором подходе выполняется обычно разработчиками приложений (как и в традиционных языках программирования). Полнота использования возможностей встроенных языков (особенно при втором подходе) требует соответствующего уровня квалификации разработчика, если, конечно, в этом есть необходимость. Требования задачи могут быть не столь высокими, чтобы применять всю "мощь" встроенного языка. Во всех языках функции разделяются на группы, часть из которых присутствует практически во всех языках: математические функции, функции работы со строками, обмен по SQL , DDE - обмен и т. д. В разрабатываемом приложении создаются программные фрагменты, состоящие из операторов и функций языка, которые выполняют некоторую последовательность действий. Эти программные фрагменты связываются с разнообразными событиями в приложении, такими как нажатие кнопки, открытие окна, выполнение логического условия (a +b > c). Каждое из событий ассоциируется с графическим объектом, окном, таймером, открытием/ закрытием приложения. Когда приложение содержит сотни окон, тысячи различных графических объектов, а с каждым из них связано несколько событий, в приложении может "работать" огромное количество отдельных программных фрагментов. Велика вероятность их "одновременной" активизации. Каждая из функций во встроенном языке выполняется в синхронном или асинхронном режиме. В синхронном режиме выполнение следующей функции не начинается до тех пор, пока не завершилось исполнение предыдущей. При запуске асинхронной функции управление переходит следующей, не дожидаясь завершения исполнения предыдущей функции. В связи с этим возникает несколько вопросов. С каким приоритетом исполняется каждый из фрагментов, допускается ли рекурсия при обработке событий и если да, то каков уровень вложенности? В SCADA - системах уровень вложенности пока не стандартизован, но оговаривается особо в рамках каждой из них. 5.1. Скриптыв InTouch Скрипты в InTouch - это программные фрагменты, активизируемые по событиям (по нажатию клавиши, кнопки, открытию окна, изменению значения переменной и т. д.). 5.1.1. Типыскриптов В 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. На рис. 5.1.1 приведен диалог Application Scripts (скрипты уровня приложения). Рис. 5.1.1. Редактор скриптов Application Scripts (уровень приложения). Редактор скриптов InTouch поддерживает два типа скриптов: простые и сложные. Простые скрипты - это скрипты, содержащие операторы присваивания, сравнения, простые математические функции и т. д. Сложные скрипты позволяют выполнять различные логические операции типа IF - THEN - ELSE, а также могут включать циклы типа FOR - NEXT. Справа, в поле Functions, размещены клавиши вызова списков различных групп встроенных функций. Доступ к спискам встроенных функций возможен также командой Insert/Functions с последующим выбором группы функций (см. рис. 5.1.1). 5.1.2. Встроенныефункции В пакете InTouch имеется набор встроенных функций, которые могут быть связаны с командами или использованы в скриптах для выполнения самых различных задач. Все встроенные функции разбиты на четыре группы: - String... - для обработки различных символьных строк и переменных; - Math... - математические функции; - System... - системные функции; - Misc... - функции для работы с алармами распределенных систем, трендами, печатью и др. Вызов списка функций группы осуществляется нажатием соответствующей клавиши. Например, щелчок по клавише String... редактора скриптов вызывает появление диалога Choose function (выбор функции) со списком строковых функций (рис.5.1.2). Рис.5.1.2. Список строковых функций. Описание некоторых функций этого списка приведено в табл. 5.1. Функция Описание StringFromIntg() Возвращает символьное представление целого аргумента в указанной системе счисления StringFromReal() Возвращает символьное представление вещественной величины либо в формате с плавающей запятой, либо в экспоненциальном формате StringLen() Возвращает длину указанной строки StringToIntg() Преобразует символьное представление целого числа во внутренний формат StringUpper() Преобразует все символы исходной строки в нижнем регистре в верхний регистр Text() Осуществляет форматированный вывод указанной целой или вещественной переменной в соответствии со строкой форматирования Таблица 5.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.63e2"; функция StringFromReal(263.55, 3, "E") возвращает "2.636E2". Функция 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 (выбор функции) со списком математических функций. Рис.5.1.3. Список математических функций. Математические функции работают с целыми и вещественными аргументами, выдавая целый или вещественный результат. В левой части оператора присваивания допускается указывать и целые переменные. Однако необходимо иметь ввиду, что преобразование вещественного значения в целое может привести к усечению результата. • Системные функции делятся на две категории: файловые (File) и для работы с Windows - приложениями (Info). Список системных функций приведен на рис.5.1.4. Рис.5.1.4. Список системных функций. Файловые функции предназначены для считывания и записи информации в файлы. У всех файловых функций есть два общих аргумента - Filename и FillOffset. Аргумент Filename (имя файла) хранит имя файла, из которого должна быть считана или в который должна быть записана информация (имя также должно включать и путь к файлу). Аргумент FillOffset (смещение в файле) задает относительную позицию в файле, начиная с которой будут читаться или записываться данные. Смещение задается в байтах от начала файла. Первый байт файла имеет смещение 0. После завершения каждая функция возвращает следующее доступное смещение в файле. Например, если функция читает 5 байтов данных, начиная с 10-го байта, то после завершения функция возвратит 15. Некоторые встроенные функции группы System приведены в табл. 5.2. Функция Описание FileCopy() Копирует исходный файл в файл-приемник FileReadFields() Возвращает очередную запись данных из CSV - файла FileReadMessage() Возвращает указанное количество байтов (или всю строку) из указанного файла FileWriteFields() Сохраняет в CSV - файле запись данных, состоящую из разделенных запятыми величин InfoDisk() Возвращает информацию об указанном локальном или сетевом диске InfoFile() Возвращает информацию об указанном файле или подкаталоге компьютера или сетевого устройства InfoTouchAppDir()Возвращает имя текущего каталога InTouch - приложения Таблица 5.1. Остальные аргументы файловых функций не поддаются типизации и различны для каждой функции. Например, функция FileReadFields имеет четыре аргумента и следующий синтаксис: FileReadFields(Filename,FileOffset,StartTag,NumberOfFields); - StartTag - идентифицирует первый элемент в имени InTouch-переменной; - NumberOfFields - идентифицирует число полей для чтения. • Группа функций Miscellaneous (клавиша Misc...) включает функции для работы с алармами распределенных систем, трендами, печатью и др. Рис.5.1.5. Список функций группы Miscellaneous. В этой широкой (с точки зрения назначения функций) группе можно выделить несколько более узко специализированных подгрупп. Функции, название которых начинается с alm, используются только в распределенных системах алармов. Некоторые из них приведены в табл.5.3.1. Функция Описание almAckDisplay() Подтверждает только те алармы, которые в текущий момент видны в окне отображения алармов almAckSelect() Подтверждает алармы, отмеченные оператором в окне отображения алармов almShowStats() Выводит панель статистики объекта отображения алармов Таблица 5.3.1. Первым аргументом всех встроенных функций алармов является ObjectName (имя объекта алармов). Часто в роли одного из аргументов выступает Comment (комментарий). Например, функция almAckSelect имеет следующий синтаксис: almAckDisplay(ObjectName,Comment); Функции, название которых начинается с HT, используются только с архивными трендами. Примеры таких встроенных функций - в табл.5.3.2. Функция Описание HTGetPenName() Возвращает имя переменной, связанной в текущий момент с указанным пером указанного тренда HTGetValue() Возвращает значение указанного типа, вычисляемого для указанного пера в пределах всего тренда HTScrollLeft() Устанавливает в качестве начала графика более раннее время. Визуально происходит прокрутка тренда влево HTSetPenName() Связывает перо тренда с указанной переменной HTZoomIn() Масштабирует существующий тренд путем задания новых времени начала и охватываемого интервала времени Таблица 5.3.2. Встроенные функции для работы с архивными трендами также могут иметь несколько аргументов (до четырех). Функции, приведенные в табл. 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 (табл.5.3.3), используются с управляющими объектами окна (простые списки, текстовые окна, ниспадающие списки и т. д.) Функция Описание wcDeleteItem() Уничтожает элемент с заданным порядковым номером как в простом, так и в ниспадающем списке wcInsertItem() Вставляет указанное сообщение в список wcLoadText() Заменяет содержимое текстового окна на новую информацию Таблица 5.3.3. Функции этой подгруппы также могут иметь до четырех аргументов: - 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. При обнаружении в скрипте каких-либо ошибок на экран будет выведено соответствующее сообщение. В большинстве случаев курсор установится в ту позицию, которая привела к появлению ошибки. Прежде чем скрипт будет сохранен, все ошибки должны быть исправлены. |