Автор: Пользователь скрыл имя, 13 Декабря 2010 в 20:05, реферат
Современная АСУТП (автоматизированная система управления технологическим процессом) представляет собой многоуровневую человеко-машинную систему управления. Создание АСУ сложными технологическими процессами осуществляется с использованием автоматических информационных систем сбора данных и вычислительных комплексов, которые постоянно совершенствуются по мере эволюции технических средств и программного обеспечения.
Введение 2
АСУ ТП и диспетчерское управление 2
Компоненты систем контроля и управления и их назначение 4
Разработка прикладного программного обеспечения СКУ: выбор пути и инструментария 7
Технические характеристики 8
Открытость систем 9
Стоимостные характеристики 10
Эксплуатационные характеристики 10
Графический интерфейс 11
Графические средства InTouch 11
Окна в InTouch 11
Объекты и их свойства 13
Организация взаимодействия с контроллерами 16
Аппаратная реализация связи с устройствами ввода/вывода 17
Серверы ввода/вывода в InTouch 18
Поддерживаемые коммуникационные протоколы 18
Особенности адресации в InTouch 20
Обмен данными с другими приложениями 21
Определение имени доступа в словаре переменных InTouch 22
Тренды в SCADA - системах 25
Тренды в InTouch 25
Архивирование (регистрация) значений переменной 26
Отображение трендов 26
Изменение параметров архивных трендов в режиме исполнения 29
Система распределенных архивов 29
Встроенные языки программирования 30
Скрипты в InTouch 31
Типы скриптов 31
Встроенные функции 32
Функции Quick Functions 36
Разработка графопостроителя в системе InTouch 37
Разработка DDE-сервера 37
Разработка DDE - клиента 39
Список литературы 41
Рис. 9. Обмен информацией на примере Modbus - сервера. |
Фирма Wonderware предлагает DDE и SuiteLink - серверы,
которые поддерживают более 800 типов контроллеров
основных производителей и различные
протоколы.
Если
нужного драйвера все-таки нет, можно
воспользоваться пакетом
Схемы, приведенные на рис. 9, интерпретируют стандартный обмен информацией между узлом (приложением) View и контроллером (ПЛК) в режиме сбора данных и управления. В этом режиме, как уже было сказано выше, приложение View - клиент по определению.
Но приложения
InTouch могут взаимодействовать не
только между собой, но и с другими
Windows - приложениями. Одним из известных
примеров такого приложения является
Microsoft Excel. InTouch - приложение может считывать
и записывать какие - либо значения
в любую клетку открытой в Excel электронной
таблицы. Аналогично и программа Excel может
читать и записывать информацию в базу
данных InTouch - приложения. Данный механизм
обеспечивает одновременное обновление
данных в одном приложении при изменении
их значений в другом.
Если клиентом (приложением, запрашивающим
информацию) по - прежнему является узел
View, то Excel - это приложение, поставляющее
информацию (сервер). В качестве группы
или топика (Topic) тогда будет выступать
имя таблицы Excel, а элемент обмена информацией
- ячейка в таблице Excel (табл.2.1, вариант
1).
Когда клиентом является приложение Excel,
а сервером - приложение View, группой в этом
случае всегда является словарь переменных
InTouch (база данных) с именем Tagname. Элементом
обмена будет элемент базы данных - имя
переменной (табл.2.1, вариант 2).
Таблица
2.1.
|
В случае обмена данными по сети с
использованием пакета Wonderware NetDDE необходимо
к трехуровневой структуре адреса добавить
четвертый уровень - имя удаленного узла
сети (Node Name).
Подводя итог вышесказанному, следует подчеркнуть, что информация по доступу к данным устройств ввода/вывода или других приложений должна храниться в приложении (в словаре переменных). И разработчику в InTouch-приложении важно подключиться к вышеописанному каналу доступа. Для этого в InTouch необходимо определить имя доступа Access Name и связать его с переменной приложения.
Определение имени доступа в словаре переменных InTouch
В InTouch - приложениях
вся информация о переменных приложения
хранится в Tagname Dictionary (Словарь переменных).
Это не что иное, как база данных
реального времени - один из центральных
компонентов InTouch.
При определении переменной в базе данных
InTouch запрашивает определенную информацию
о каждой переменной, например, имя переменной,
ее тип, имя доступа и т. д.
В пакете InTouch используется два базовых
типа переменных - Memory (внутренние) и I/O
(переменные ввода/вывода).
Переменные типа Memory могут быть использованы
для создания различных системных констант,
моделирования элементов системы управления
и в вычисляемых переменных, доступных
другим Windows - программам.
Все переменные, которые получают или
передают свое значение другой Windows - программе,
должны иметь тип ввода/вывода (I/O). В эту
категорию попадают переменные, которые
посредством канала доступа (Access Name) принимают
или отправляют данные из/в серверов ввода/вывода,
других приложений InTouch, других программ
Windows.
Определение новой переменной в базе данных
InTouch, как и просмотр, и модификация атрибутов
уже существующих переменных, производится
в диалоге Tagname Dictionary (рис.10). Доступ к этому
диалогу осуществляется командой Speсial/Tagname
Dictionary в окне среды разработки WindowMaker или
двойным щелчком по иконке Tagname Dictionary в
окне Application Explorer.
Рис. 10. Диалог Tagname Dictionary (Словарь переменных). |
Поля Tagname и Comment предназначены для
ввода имени переменной и соответствующего
комментария. По умолчанию включена опция
Read/Write (чтение/запись). Можно отметить
и опцию Read Only, если в процессе исполнения
WindowViewer должен только читать значение
переменной.
В любое
время в режиме проектирования можно
открыть список переменных приложения
щелчком по кнопке Select для выбора соответствующей
переменной, просмотра списка или модификации
атрибутов. Диалог Select Tag (выбор переменной)
представлен на рис.11.
Рис. 11. Диалог Select Tag (выбор переменной). |
Для каждой переменной в этом диалоге
приведена следующая
Группа алармов (Alarm group, рис.11) для переменной определяется в диалоге, вызываемом нажатием кнопки Group диалога Tagname Dictionary. Все, что касается алармов, рассматривается в соответствующем разделе ниже.
Выбор
типа переменной осуществляется в диалоге
Tag Types (тип переменной, рис. 12), вызываемом
на экран нажатием кнопки Туре диалога
Tagname Dictionary.
Рис. 12. Диалог Tag Types (тип переменной). |
В этом диалоге представлен полный
список основных типов переменных InTouch.
Выбор завершается отметкой соответствующей
опции и щелчком по Ok.
После выбора типа переменной программа
возвращает пользователя в диалог Tagname
Dictionary (Словарь переменных). При этом будет
открыт и дополнительный диалог подробного
описания переменной, содержание которого
зависит от выбранного типа. Кнопка Access
Name (имя доступа) используется для определения
канала обмена (канала доступа) с сервером,
с которым будет связана описываемая переменная.
Имя доступа Access Name определяется именем
узла, именем приложения и именем группы
или топика. Имя топика должно совпадать
с соответствующим именем, заданным при
конфигурировании DDE, SuiteLink-сервера. Имя
элемента, как компонента многоуровневого
адреса, определяется в поле Item (рис.13).
В распределенных системах InTouch имя доступа
может быть определено либо как локальный
адрес, либо как глобальный.
Локальные адреса используются в том случае,
когда View - узлы имеют свои серверы ввода/вывода.
На рис. 13 узлы исполнения (View - узлы), каждый
со своей копией одного и того же приложения,
ссылаются на свои собственные источники
данных ввода/вывода (серверы ввода/вывода).
Рис. 13. Сеть View – узлов с собственными серверами ввода/вывода. |
Поэтому при определении канала
доступа к информации ввода/вывода
достаточно трехуровневого адреса (Application
- приложение, Topic - объект, Item - элемент).
Имя узла (Node) в этом случае опускается.
Щелчок по кнопке Access Name (рис.2.3.8) вызывает
на экран одноименный диалог. Этот диалог
предназначен для определения нового
канала доступа (кнопка Add), модификации
существующего (Modify) или удаления (Delete).
Щелчок по кнопке Add вызывает диалог определения
нового канала доступа. В качестве имени
(канала) доступа (Access Names) рекомендуется
выбирать имя группы или топика (Topic Name).
Следует подчеркнуть, что поле Node Name (имя
узла) оставлено пустым. Щелчок по кнопке
Ok возвращает пользователя в диалог Access
Names (имена доступа) с определенным именем
доступа.
Глобальные адреса источников данных
ввода/вывода позволяют нескольким View
- узлам обращаться к одному и тому же серверу
ввода/вывода. Такой подход предоставляет
возможность отказаться от нескольких
серверов ввода/вывода, однако менее защищен
от отказов (рис.14).
Рис.14. Архитектура с двумя View - узлами и сервером ввода/вывода. |
Два View - узла исполняют идентичные копии
одного и того же приложения и ссылаются
на один и тот же источник ввода/вывода
(I/O сервер). Поэтому при определении канала
доступа к информации ввода/вывода необходимо
использовать четырехуровневый адрес
(Node - узел, Application -приложение, Topic - объект,
Item - элемент).
При выборе имени доступа действует то же правило, что и при локальной адресации: рекомендуется, чтобы это имя совпадало с именем группы данных или топика (Topic Name). Но поле Node Name (имя узла) необходимо заполнить. В качестве этого имени при глобальной адресации выбирают имя узла, на котором установлен сервер ввода/вывода, являющийся источником данных для нескольких приложений.
Для каждой переменной ввода/вывода задается атрибут Access Name. С одним именем доступа, как правило, связано большое количество переменных. Распределение переменных по группам (топикам) - произвольное. Но для оптимизации функционирования серверов рекомендуется в одну группу относить переменные с одинаковой частотой обновления. В противном случае частота, задаваемая при конфигурировании топика в сервере, должна соответствовать минимальному временному кванту. Желательно на этапе конфигурирования сервера определить группы (топики) для каждого частотного диапазона и в соответствии с этими группами создать имена доступа (Access Name) в InTouch (лучше даже, чтобы имена групп совпадали с именами доступа). А далее каждую описываемую в InTouch-приложении переменную типа I/O связывать с подходящим именем доступа для обеспечения рационального пакетирования данных.
Графическое представление значений технологических параметров во времени способствует лучшему пониманию динамики технологического процесса предприятия. Поэтому подсистема создания трендов и хранения информации о параметрах с целью ее дальнейшего анализа и использования для управления является неотъемлемой частью любой SCADA - системы.
Тренды реального времени (Real Time) отображают динамические изменения параметра в текущем времени. При появлении нового значения параметра в окне тренда происходит прокрутка графика справа налево. Таким образом текущее значение параметра выводится всегда в правой части окна.
Тренды становятся историческими (Historical) после того, как данные будут записаны на диск и можно будет использовать режим прокрутки предыдущих значений назад с целью посмотреть прошлые значения. Отображаемые данные тренда в таком режиме будут неподвижны и будут отображаться только за определенный период.
InTouch предлагает пользователю оба типа графических объектов, называемых трендами: тренд реального времени и исторический (архивный) тренд. Тренды реального времени дают возможность создавать графики изменения во времени четырех переменных (4 пера), в то время как для исторических трендов можно конфигурировать до восьми перьев в одном объекте. Количество объектов типа "тренд" в приложении, в том числе и в одном окне, не ограничено.
Оба типа
трендов создаются c использованием
специальных графических
При работе
системы в режиме WindowViewer (среда
исполнения) InTouch может производить
запись значений переменных в регистрационный
файл. Для того, чтобы архивирование переменной
выполнялось, необходимо включить опцию
Log Data (регистрация данных) при определении
переменной в диалоге Tagname Dictionary.
Запись в регистрационный файл производится
всякий раз при изменении переменной на
величину, превышающую порог для архивирования
(Log Deadband), и по умолчанию один раз в час,
если значение переменной за это время
не изменилось. Поле Log Deadband находится
в диалоге детального описания целой или
вещественной переменной.
Чтобы значения переменных, для которых
опция Log Data разрешена, записывались в
регистрационные файлы, необходимо общее
разрешение глобальной функции регистрации.
Его задают в диалоге Historical Logging Properties
(параметры архивирования, рис. 15), который
вызывается на экран командой Special/Configure/Historical
Logging. В этот диалог можно также войти из
окна Application Explorer.
Рис.15. Диалог Historical Logging Properties. |
Включение опции Enable Historical Logging дает общее
разрешение на регистрацию значений
переменных. Срок хранения регистрационных
файлов на диске (исключая текущий день)
определяется в поле Keep Log Files for в днях.
Если в это поле введено значение 0, файлы
будут храниться бесконечно долго. Регистрационные
файлы могут быть размещены в каталоге
приложения (опция по умолчанию Store Log Files
in Application Directory). В противном случае следует
отметить опцию Store Log Files in Specific Directory (хранить
файлы в ином каталоге) и ввести полный
путь до каталога, в котором будут храниться
регистрационные файлы (при работе с распределенными
архивами - полный сетевой путь).
Тренды реального
времени являются динамическими
объектами. Они позволяют выводить
изменения значений переменных, как
только они происходят для любой
конкретной переменной или для выражения,
которое содержит одну или несколько
переменных. Данные будут появляться в
окне тренда и двигаться справа налево.
Чтобы создать тренд реального времени,
необходимо:
Рис.16. Объект "тренд реального времени". |
При создании тренда реального времени настройки его конфигурации устанавливаются по умолчанию (настройки предыдущего тренда).
Для конфигурирования тренда реального времени следует либо дважды щелкнуть на созданном объекте, либо, предварительно выбрав объект, запустить команду Special/Animation Links. На экране появится диалог Real Time Trend Configuration (конфигурирование тренда реального времени). Среди настроек этого диалога можно отметить диапазон времени, охватываемый трендом (Time Span), частоту вывода значение переменной (Interval), разрешение сетки по большим и малым делениям горизонтальной и вертикальной осей (Time Division, Value Division), цвета фона и рамки графика (Color). Конфигурирование перьев тренда включает выбор имени переменной или выражения, цвета и толщины линии для каждого пера (поле Expression). Для повышения производительности системы следует отметить опцию Only update when in memory (обновлять, когда в памяти). В этом случае обновление данных тренда будет производиться только в моменты, когда окно с трендом отображается на дисплее (находится в RAM). Есть и другие способы повышения производительности при работе с трендами реального времени (уменьшение толщины линии графика, уменьшение частоты выводы значений переменной). Например, если установлен диапазон времени (Time Span) в 30 минут, а частота вывода - 2 секунды, то число измерений, которые нужно провести за каждые 30 минут, будет равно 900 (30 * 60/2 = 900). При частоте выводе в 5 секунд число измерений существенно уменьшается: 30 * 60/5 = 360. Исторические (архивные) тренды не являются динамическими. Они обеспечивают "снимок" состояния данных за прошедшее время, то есть по архивным данным. В отличие от трендов реального времени исторические тренды обновляются только по команде - при запуске скрипта, изменении значения выражения или нажатии оператором соответствующей кнопки. При конфигурировании архивного тренда можно создать "визиры" (ползунки, бегунки), с помощью которых удобно получить значения всех отображаемых переменных на один и тот же момент времени. Бегунки архивного тренда представляют собой позиционные индикаторы на временной оси, положение которых определяет объем извлекаемых данных. Связав объект "движковый регулятор" с полем бегунка, можно осуществлять перемещение вдоль архивного тренда. Кроме того, имеются функции вычисления среднего, минимального и максимального значений в определенном бегунком положении. Можно создать правый и левый бегунки и производить обработку данных кривой, расположенной между бегунками. Вычисляются следующие величины: среднее, минимальное, максимальное, отношение мин/макс и стандартное отклонение. В зависимости от положения бегунков на оси можно реализовать и другие функции (увеличение и уменьшение заключенной между бегунками области графика).
Благодаря системе распределенных архивов на один и тот же график можно выводить информацию из нескольких баз данных.
Все сказанное выше о механизме создания тренда реального времени инструментом Real Time Trend в среде разработки WindowMaker и о его последующем конфигурировании можно отнести и к архивному тренду, создаваемому инструментом Historical Trend среды разработки.
Предлагаемый ниже способ создания и конфигурирования архивного тренда предполагает использование мастер-средств библиотеки Wizard.
Нажатие кнопки
выбора мастер-средств в панели инструментов
вызывает появление на экране диалога
Wizard Selection (выбор мастер-средств).
После выбора из предложенного набора
мастер-средств Hist Trend with Scooters (архивный
тренд с бегунками) и щелчка по Ok программа
возвращает пользователя в среду разработки.
Курсор мыши при этом примет форму вставки
. Последующий щелчок мыши на предполагаемом
месте нахождения создаваемого объекта
выводит на экран архивный тренд (рис.17).
Объекты этого типа ведут себя аналогично
любым другим объектам, то есть их можно
перемещать, масштабировать и т. д.
Рис.17. Объект "архивный тренд". |
Двойной щелчок на объекте приводит
к появлению на экране диалога
конфигурирования архивного тренда
(Historical Trend Char Window).
Рис.18. Диалог конфигурирования архивного тренда. |
Для конфигурирования тренда с параметрами
по умолчанию следует нажать кнопку Suggest
(вариант). Нажатие кнопок Times и Values выводит
на экран окна конфигурирования разрешения
сетки по большим и малым делениям горизонтальной
и вертикальной осей, цвета фона и рамки
графика, временного диапазона и т. д. Кнопка
Pens (перья) предназначена для настройки
перьев архивного тренда.
Чтобы
добавить в тренд функции
При управлении
в режиме реального времени оператор
анализирует архивную информацию. Объем
информации, ее временные диапазоны, объем
статистических данных, необходимые для
принятия решения по управлению технологическим
процессом, заранее не известны. Поэтому
оператор должен иметь возможность менять
настройки архивных трендов, не выходя
из режима Runtime. В InTouch такая возможность
существует.
Для этого следует включить опцию Allow runtime
changes (разрешить изменения во время исполнения)
в диалоге конфигурирования архивного
тренда (в книге не показан).
Теперь в режиме WindowViewer щелчок на архивном
тренде будет вызывать на экран диалог
изменения параметров архивного тренда
(Historical Trend Setup). В этом диалоге можно определить
дату и время начала архивного тренда
(поле Chart Start), его временной диапазон (Chart
Length), присвоить перьям цвет и имена переменных,
выбирая их из словаря.
Архивный тренд может выводиться в одном
из трех возможных режимах:
Выбор режима производится в поле Display Mode.
В InTouch имеется
система распределенных архивов, обеспечивающая
поиск архивных данных в любом InTouch - приложении.
Данная система расширяет возможности
стандартных архивов InTouch, позволяя одновременно
получать информацию из нескольких удаленных
баз данных, которые в этом случае называются
провайдерами архивов.
Одновременно можно обращаться к восьми
провайдерам (по одному на каждое перо).
Каждый узел, выполняющий функцию регистрации,
может писать только в один архив.
Система, приведенная на рис.19, имеет два
провайдера архивов. Левый провайдер регистрирует
информацию только из узла, расположенного
слева внизу. Правый провайдер регистрирует
информацию из узла, расположенного справа
вверху. Остальные три узла (вверху слева)
лишь используют архивные данные. Читать
информацию из архивных файлов может каждый
из узлов системы.
Создание такой системы предполагает следующие действия:
Рис. 19. Распределенная система архивов. |
Встроенные языки программирования - мощное средство SCADA - систем, предоставляющее разработчику гибкий инструмент для разработки сложных приложений. Первые версии SCADA - систем либо не имели подобных языков, либо эти языки реализовывали небогатый набор функций. В современных версиях SCADA - систем функциональные возможности языков становятся существенно богаче. Явно выделяются два подхода:
В каждом языке допускается расширение набора функций. В языках, ориентированных на технологов, это расширение достигается с помощью дополнительных инструментальных средств (Toolkits). Разработка дополнительных функций выполняется обычно программистами - профессионалами.
Разработка новых функций при втором подходе выполняется обычно разработчиками приложений (как и в традиционных языках программирования).
Полнота использования возможностей встроенных языков (особенно при втором подходе) требует соответствующего уровня квалификации разработчика, если, конечно, в этом есть необходимость. Требования задачи могут быть не столь высокими, чтобы применять всю "мощь" встроенного языка.
Во всех языках функции разделяются на группы, часть из которых присутствует практически во всех языках: математические функции, функции работы со строками, обмен по SQL , DDE - обмен и т. д.
В разрабатываемом
приложении создаются программные
фрагменты, состоящие из операторов
и функций языка, которые выполняют
некоторую последовательность действий.
Эти программные фрагменты
Каждая
из функций во встроенном языке выполняется
в синхронном или асинхронном режиме.
В синхронном режиме выполнение следующей
функции не начинается до тех пор, пока
не завершилось исполнение предыдущей.
При запуске асинхронной функции управление
переходит следующей, не дожидаясь завершения
исполнения предыдущей функции.
В связи с этим возникает несколько вопросов.
С каким приоритетом исполняется каждый
из фрагментов, допускается ли рекурсия
при обработке событий и если да, то каков
уровень вложенности? В SCADA - системах уровень
вложенности пока не стандартизован, но
оговаривается особо в рамках каждой из
них.
Скрипты в InTouch - это программные фрагменты, активизируемые по событиям (по нажатию клавиши, кнопки, открытию окна, изменению значения переменной и т. д.).
В InTouch различают несколько типов скриптов:
Диалоги редактора, открываемые при создании скриптов различных типов, имеют небольшие отличия. Вызов диалога редактора скриптов в окне WindowMaker осуществляется командой Special/Scripts с последующим выбором типа создаваемого или редактируемого скрипта. Для этого можно также воспользоваться окном Application Explorer, выбрав папку Scripts. На рис. 5.1.1 приведен диалог Application Scripts (скрипты уровня приложения).
Редактор скриптов InTouch поддерживает два типа скриптов: простые и сложные. Простые скрипты - это скрипты, содержащие операторы присваивания, сравнения, простые математические функции и т. д. Сложные скрипты позволяют выполнять различные логические операции типа IF - THEN - ELSE, а также могут включать циклы типа FOR - NEXT.
Справа, в поле Functions, размещены клавиши вызова списков различных групп встроенных функций. Доступ к спискам встроенных функций возможен также командой Insert/Functions с последующим выбором группы функций (см. рис. 5.1.1).
В пакете InTouch имеется
набор встроенных функций, которые
могут быть связаны с командами
или использованы в скриптах для выполнения
самых различных задач.
Все встроенные функции разбиты на четыре
группы:
- String... - для обработки различных символьных
строк и переменных;
- Math... - математические функции;
- System... - системные функции;
- Misc... - функции для работы с алармами распределенных
систем, трендами, печатью и др.
· Вызов списка функций группы осуществляется
нажатием соответствующей клавиши. Например,
щелчок по клавише String... редактора скриптов
вызывает появление диалога Choose function (выбор
функции) со списком строковых функций.
Описание некоторых функций этого списка приведено в табл. 5.1.
Таблица 5.1. |
Каждая строковая функция имеет
один или несколько аргументов (до 6). Например,
синтаксис функции StringFromReal выглядит следующим
образом:
StringFromReal(Number,
- 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.
Математические функции работают с целыми и вещественными аргументами, выдавая целый или вещественный результат. В левой части оператора присваивания допускается указывать и целые переменные. Однако необходимо иметь ввиду, что преобразование вещественного значения в целое может привести к усечению результата.
Файловые функции предназначены для считывания и записи информации в файлы. У всех файловых функций есть два общих аргумента - Filename и FillOffset. Аргумент Filename (имя файла) хранит имя файла, из которого должна быть считана или в который должна быть записана информация (имя также должно включать и путь к файлу). Аргумент FillOffset (смещение в файле) задает относительную позицию в файле, начиная с которой будут читаться или записываться данные. Смещение задается в байтах от начала файла. Первый байт файла имеет смещение 0. После завершения каждая функция возвращает следующее доступное смещение в файле. Например, если функция читает 5 байтов данных, начиная с 10-го байта, то после завершения функция возвратит 15. Некоторые встроенные функции группы System приведены в табл. 5.2.
Таблица 5.1. |
Остальные аргументы файловых функций
не поддаются типизации и различны для
каждой функции.
Например, функция FileReadFields имеет четыре
аргумента и следующий синтаксис:
FileReadFields(Filename,
- StartTag - идентифицирует
первый элемент в имени
- NumberOfFields - идентифицирует число полей
для чтения.
В этой широкой (с точки зрения назначения функций) группе можно выделить несколько более узко специализированных подгрупп. Функции, название которых начинается с alm, используются только в распределенных системах алармов. Некоторые из них приведены в табл.5.3.1.
Таблица 5.3.1. |
Первым аргументом всех встроенных функций
алармов является ObjectName (имя объекта алармов).
Часто в роли одного из аргументов выступает
Comment (комментарий). Например, функция almAckSelect
имеет следующий синтаксис: almAckDisplay(ObjectName,
Функции, название которых начинается
с HT, используются только с архивными трендами.
Примеры таких встроенных функций - в табл.5.3.2.
Таблица 5.3.2. |
Встроенные функции для работы
с архивными трендами также могут
иметь несколько аргументов (до четырех).
Функции, приведенные в табл. 5.3.2, имеют
следующий синтаксис:
- HTGetPenName(Hist_Tag,
UpdateCount, PenNum);
- HTGetValue(Hist_Tag,
- HTScrollLeft(Hist_Tag,Percent)
- HTSetPenName(Hist_Tag,PenNum,
- HTZoomIn (Hist_Tag,LockString).
Первый аргумент
всех встроенных функций для работы
с трендами - Hist_Tag (имя тренда). Из
других аргументов следует отметить
PenNum (номер пера тренда), ValType_Text (строка,
указывающая тип возвращаемого
значения), Tagname (новое имя пера).
Функции, название которых начинается
с wc (табл.5.3.3), используются с управляющими
объектами окна (простые списки, текстовые
окна, ниспадающие списки и т. д.)
Таблица 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,
где:
- Window - имя
окна;
- Left - число дюймов от левого края;
- Top - число дюймов от верхнего края;
- Width - ширина распечатываемого окна;
- Height - высота распечатываемого окна;
- Options - дискретные значения 0 или 1.
Вставка
встроенных функций в скрипт производится
щелчком по выбранной функции
в списке функций. Она вместе со своими
аргументами будет
По окончании редактирования скрипта
следует нажать кнопку Ok. При обнаружении
в скрипте каких-либо ошибок на экран будет
выведено соответствующее сообщение.
В большинстве случаев курсор установится
в ту позицию, которая привела к появлению
ошибки. Прежде чем скрипт будет сохранен,
все ошибки должны быть исправлены.
Quick Functions - это
скрипты, которые могут
Наиболее часто эти функции используют
в выражениях при определении динамических
свойств объектов. Чем это вызвано? Дело
в том, что длина выражения в поле Expression
диалогов определения динамических свойств
объектов должна быть не более 256 символов.
Это относится к таким динамическим свойствам,
как цвет линии, цвет заполнения, изменение
высоты и ширины, вертикальное и горизонтальное
перемещение, вертикальное и горизонтальное
заполнение, видимость, мерцание, ориентация,
блокировка.
Для ввода более длинных выражений можно
воспользоваться функциями Quick Functions. При
этом выражение в поле Expression должно содержать
операторы CALL вызова функций Quick Functions,
каждая из которых, в свою очередь, должна
иметь в качестве последнего оператора
RETURN для возврата результата в вызывающее
выражение. Организованное таким образом
выражение может содержать многие тысячи
символов и быть сколь угодно сложным.
Сохраненная функция Quick Functions может быть
использована в любом другом скрипте или
выражении.
Quick Functions могут быть синхронными и асинхронными
скриптами. Синхронные скрипты выполняются
последовательно, в то время, как после
запуска одного асинхронного скрипта
может быть запущен другой (синхронный
или асинхронный) скрипт. Это позволяет
отделять исполняющиеся довольно долго
операции (типа обращений к базам данных)
от основной программы. Асинхронные скрипты
не могут возвращать результаты. Поэтому
в качестве скриптов Quick Functions, используемых
в выражениях (Expression) для определения динамических
свойств объектов, следует применять только
синхронные скрипты.
Создание скриптов Quick Functions осуществляется
в диалоговом окне редактора Quick Functions.
Вызов этого диалога на экран в окне WindowMaker
производится в командой Special/Scripts с последующим
нажатием на строке Quick Functions.
Список Name содержит имена всех определенных к данному моменту скриптов Quick Functions. Щелчок по имени скрипта выводит его текст в рабочее поле диалога.
Команда Scripts/New предназначена для создания нового скрипта и вызывает на экран диалог для ввода его имени. После щелчка по Ok новое имя будет включено в список имен Name.
Следующий этап - определение аргументов нового скрипта в таблице Arguments диалога Quick Function. В левую колонку таблицы вводят имя аргумента (до 31 символа), в правую - его тип (Integer, Real, Discrete, Message). В одном скрипте допускается до 16 аргументов.
После определения типов аргументов можно приступать к написанию текста скрипта Quick Function в рабочем поле (под таблицей Arguments).
Данный раздел посвящен разработке четырехканального графопостроителя визуализирующего данные, поступающие по DDE каналу с DDE сервера. В программе предусмотрена возможность масштабирования по каждому из каналов.
Приложение, получающее данные из другого приложения по DDE и/или управляющее другим приложением с помощью команд через DDE является DDE-клиентом. В этом случае второе приложение является DDE-сервером. Рассмотрим проект DDE-сервера, выполненного на языке программирования Borland Delphi 6.
На рис.20
представлено окно DDE-сервера во время
дизайна в среде Delphi
Рис. 20.
Окно DDE-сервера на стадии проектирования
в Delphi
Для построении DDE-сервера в Delphi имеются два объекта, расположенные на странице System Палитры Компонент - TDdeServerConv и TDdeServerItem. Обычно в проекте используется один объект TDdeServerConv и один или более TDdeServerItem. Для получения доступа к сервису DDE-сервера, клиенту потребуется знать несколько параметров : имя сервиса (Service Name) - это имя приложения (обычно - имя выполняемого файла без расширения EXE, возможно с полным путем); Topic Name - в Delphi это имя компоненты TDdeServerConv; Item Name - в Delphi это имя нужной компоненты TDdeServerItem. Назначение объекта TDdeServerConv - общее управление DDE и обработка запросов от клиентов на выполнение макроса.
Объект TDdeServerItem связывается с TDdeServerConv и определяет, что, собственно, будет пересылаться по DDE. Для этого у него есть свойства Text и Lines. (Text имеет то же значение, что и Lines[0].) При изменении значения этих свойств автоматически происходит пересылка обновленных данных во все приложения-клиенты, установившие связь с сервером.
При запуске
приложения происходит выполнение процедуры
TDDEServe.FormActivate:
procedure TDDEServe.FormActivate(Sender: TObject);
var nidata : TNotifyIconData;
begin
Application.ShowMainForm := False;
ShowWindow(Application.Handle, SW_HIDE);
ShowWindow(Application.
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_MYICONNOTIFY;
hIcon := Application.Icon.Handle;
StrPCopy(szTip,Application.
end;
Shell_NotifyIcon(NIM_ADD, @nidata);
ru:=10;
end;
В этой
процедуре приложение сворачивается
в системный Tray, а форма становится
невидимой. Окончание работы DDE-сервера
вызывается путём нажатия левой или правой
кнопкой мыши на иконке приложения в области
системного Tray. Обработка этого события
выполняется в процедуре TDDEServe.WMICON:
procedure TDDEServe.WMICON(var msg: TMessage);
begin
case msg.LParam of
WM_RBUTTONDOWN,WM_LBUTTONDOWN: close;
end;
end;
При этом,
при закрытии окна приложения вызывается
процедура TDDEServe.
procedure TDDEServe.FormDestroy(Sender: TObject);
var nidata : TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle;
uID := 1;
end;
Shell_NotifyIcon(NIM_DELETE, @nidata);
end;
Работа
приложения в целом строится посредством
вызова процедуры TDDEServe.
implementation
{$R *.DFM}
uses ComObj, activex, ShellApi, shlobj, registry;
var
xsin: integer;
ru:real;
boolka:boolean;
procedure TDDEServe.Timer1Timer(Sender: TObject);
var LPTbyte: byte;
begin
xsin:=xsin+1;
if xsin>1000 then xsin:=xsin-1000;
DDEItem100.Text:=inttostr(5*(
asm
mov dx,379h
in al,dx
and al,80h
mov LPTbyte,al
end;
DDEItem200.Text:=inttostr(
DDEItem300.Text:=inttostr(
if (xsin/5)=trunc(xsin/5) then
if (ru<round(50+50*sin(xsin/20))) then
begin
boolka:=true;
ru:=ru+20
end else
begin
boolka:=false;
ru:=ru-20
end;
if boolka then DDEItem400.Text:='100' else DDEItem400.Text:='0';
end;
Для обеспечения DDE-обмена задекларированы следующие константы:
‘DDEServer’ – имя сервиса (Service Name);
‘DDETopic’ – Topic Name;
‘DDEItem100’ – переменная обмена;
‘DDEItem200’ – переменная обмена;
‘DDEItem300’ – переменная обмена;
‘DDEItem400’ – переменная обмена.
Основа человеко-машинного интерфейса в рамках InTouch - это иерархически взаимосвязанные анимированные сенсорные окна. Для создания нового окна выполним команду File/New Window... (Файл/Новое Окно). На экране появится диалоговое окно Window Properties (Свойства Окна), которое необходимо заполнить.
Здесь следует ввести только имя окна (поле Name) Scope. Остальные поля и опции оставлены без изменений. Окно с указанными атрибутами появится на экране. Там же будет отображена и Панель Инструментов InTouch - Tools, с которой предстоит интенсивно работать далее.
График
представляет собой прямоугольную
область с нанесенными
Панель
настройки графиков вызывается двойным
щелчком левой кнопки мышки по
окну графика и состоит из четырех
текстовых строк
Для организации обмена данными через DDE интерфейс необходимо определить четыре (по числу каналов) переменные типа DDE Integer (Item1, Item2, Item3, Item4). Для этого сначала в разделе Special/DDE Access Names… необходимо нажать кнопку Add и в появившемся диалоговом окне указать имя приложения (DDE Application/Server Name), от которого будет производиться запрос данных, и имя группы/объекта (DDE Topic Name), содержащего требуемую информацию. В нашем случае качестве имени приложения используется имя DDEServer, имя объекта – DDETopic. Далее в разделе Special/Tagname Dictionary/New вводятся поочередно переменные типа DDE Integer. Название элемента (Item) для каждой переменной имеет различные имена: DDEItem100 – для Item1, DDEItem200 – для Item2, DDEItem300 – для Item3 и DDEItem400 – для Item4. Данная информация используется для определения DDE-переменной в Словаре Переменных InTouch.
Для того,
чтобы запустить программу
Ниже
представлен внешний вид
Рис. 21.
Окно программы графопостроителя.
1. Scada . ru - Публикации - SCADA - системы: взгляд изнутри
// URL: http://www.scada.ru/
2. Кабаев С.В. Пакет программного обеспечения Intouch - система мониторинга и управления в объектах промышленной автоматизации
// URL: http://www.mka.ru/go/?id=
3. ТРЕЙС МОУД - интегрированная SCADA- и softlogic-система для разработки АСУТП // URL: http://adastra.ru/ru/tm/tm5/
4. Кузнецов
А. Genesis for Windows – графическая scada-система
для разработки АСУ ТП. // Современные технологии
автоматизации.- 1997.- №3.