Обмен данными с другими приложениями.

Но приложения InTouchмогут взаимодействовать не только между собой, но и с другими Windows - приложениями. Одним из известных примеров такого приложения является Microsoft Excel. InTouch - приложение может считывать и записывать какие - либо значения в любую клетку открытой в Excelэлектронной таблицы. Аналогично и программа Excelможет читать и записывать информацию в базу данных InTouch - приложения. Данный механизм обеспечивает одновременное обновление

данных в одном приложении при изменении их значений в другом.

Если клиентом (приложением, запрашивающим информацию) по - прежнему является узел View, то Excel- это приложение, поставляющее информацию (сервер). В качестве группы или топика (Topic) тогда будет выступать имя таблицы Excel, а элемент обмена информацией - ячейка в таблице Excel(табл.1, вариант 1).

Когда клиентом является приложение Excel, а сервером - приложение View, группой в этом случае всегда является словарь переменных InTouch(база данных) с именем Tagname. Элементом обмена будет элемент базы данных - имя переменной (табл.1, вариант 2).

Таблица 1.

Приложение-клиент Приложение-сервер Группа Элемент
1. View Excel Sheet1.XLS R1C1
2. Excel View Tagname R_Level

В случае обмена данными по сети с использованием пакета Wonderware NetDDEнеобходимо к трехуровневой структуре адреса добавить четвертый уровень - имя удаленного узла сети (Node Name).

Подводя итог вышесказанному, следует подчеркнуть, что информация по доступу к данным устройств ввода/вывода или других приложений должна храниться в приложении (в словаре переменных). И разработчику в InTouch-приложении важно подключиться к вышеописанному каналу доступа. Для этого в InTouch необходимо определить имя доступа Access Nameи связать его с переменной приложения.

В распределенных системах InTouch имя доступа может быть определено либо как локальный адрес, либо как глобальный.

Локальные адреса используются в том случае, когда View - узлы имеют свои серверы ввода/вывода. На рисунке узлы исполнения (View - узлы), каждый со своей копией одного и того же приложения, ссылаются на свои собственные источники данных ввода/вывода (серверы ввода/вывода).

Обмен данными с другими приложениями. - student2.ru

Поэтому при определении канала доступа к информации ввода/вывода достаточно трехуровневого адреса (Application - приложение, Topic - объект, Item - элемент). Имя узла (Node) в этом случае опускается.

Команда Special/Access Names (или щелчок по кнопке Access Name диалога Tagname Dictionary) вызывает на экран следующий диалог:

Обмен данными с другими приложениями. - student2.ru

Этот диалог предназначен для определения нового канала доступа (кнопка Add), модификации существующего (Modify) или удаления (Delete). Щелчок по кнопке Addвызывает диалог определения нового канала доступа.

Обмен данными с другими приложениями. - student2.ru

Диалог определения канала доступа заполнен в соответствии с примером, рассмотренным выше. В качестве имени (канала) доступа (Access Names) рекомендуется выбирать имя группы или топика (Topic Name).

Следует подчеркнуть, что поле Node Name (имя узла) оставлено пустым.

Щелчок по кнопке Ok возвращает пользователя в диалог Access Names (имена доступа) с определенным именем доступа.

Обмен данными с другими приложениями. - student2.ru

Работа 6. DDE - обмен.

Цель работы: организация связи между двумя Windows - программами (Excel и InTouch) по протоколу DDE.

1. Откройте окно Alarms и программу Excel. Расположите приложения так, что бы был виден движковый регулятор в окне Alarms.

2. Выделите ячейку в таблице Excel и введите следующее выражение:

=view|tagname!IntTag

Перед нажатием клавиши Enter в Excel запустите WindowViewer.

3. Вернитесь в Excel, нажмите Enter. В выделенной ячейке появится значение переменной. Оно должно изменяться при перемещении движка регулятора в окне WindowViewer.

4. Теперь сконфигурируйте оба приложения как клиент и сервер. Закройте окно Alarms и откройте окно Scratch (черновик).

5. Поместите в этом окне текстовый объект # и задайте ему свойство User Input/Analog. Укажите новую переменную XLTagсо значениями Min Value = - 9999 и Max Value= 9999.

Обмен данными с другими приложениями. - student2.ru

6. Нажмите Ok. Определите переменную XLTag как переменную типа I/O Real с Min Eu и Min Raw = – 9999, Max EU и Max Raw = 9999.

7. Нажмите кнопку Access Name в словаре переменных и щелкните на кнопке Add. Введите имя канала доступа в полеAccess Name (для русской версии Microsoft Office в поле Topic Name следует ввести [Книга1]Лист1):

Обмен данными с другими приложениями. - student2.ru

8. Нажмите Ok. Имя созданного канала доступа появится в списке доступных.

9. Нажмите Close. Имя канала доступа появится рядом с кнопкой Access Name в словаре переменных.

 
  Обмен данными с другими приложениями. - student2.ru

10. В поле Itemукажите строку и столбец ячейки Excel, например r2c2.

11. Нажмите кнопку Close, затем Ok.

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

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

14. Скопируйте ячейку в буфер (CTRL+C), перейдите в WindowMaker и вставьте мастер Value Displays - I/O Analog Displayв окно Scratch.

15. Нажмите кнопку Paste Link. Поля автоматически будут заполнены информацией о выбранной ячейке Excel.

16. Убедитесь, что опция Allow Input выбрана.

Обмен данными с другими приложениями. - student2.ru Обмен данными с другими приложениями. - student2.ru Обмен данными с другими приложениями. - student2.ru

17. Нажмите Ok и переключитесь в WindowViewer.

Раздел 7. Пример разработки проекта.

Задание на проектирование.

Требуется создать операторский интерфейс для управления технологическим процессом обезвоживания нефтяной эмульсии (рис.1).

Автоматизация процесса обезвоживания предполагает:

- контроль уровня раздела фаз в отстойнике;

- контроль расхода обезвоженной нефти;

- сигнализацию предельных отклонений верхнего и нижнего уровней

раздела фаз в отстойнике;

- автоматическое регулирование уровня раздела фаз в отстойнике.

Кроме этого, операторский интерфейс должен обеспечить оператору возможность перехода с автоматического режима работы контура регулирования уровня на ручной режим (дистанционное управление клапаном).

Второе окно интерфейса - тренды для отображения в реальном времени уровня раздела фаз и расхода обезвоженной нефти.

Обмен данными с другими приложениями. - student2.ru

Рис.2. Функциональная схема автоматизации.

Проект (анимация) должен запускаться и останавливаться с помощью кнопки, действие которой связано со сценарием проекта.

Разработка проекта.

1. Запустите InTouch Application Manager.Создайте новое приложение и запустите среду разработки приложений WindowMaker. Создайте первое окно приложения. Для этого вызовите команду File/ New Window... В появившееся диалоговое окно Window Properties введите имя окна (до 32 символов и пробелов). Выберете цвет для фона окна, щелкнув по окошечку Window Color. При появлении цветовой палитры выберете цвет, щелкнув по нему. Включите опции Title Bar,чтобы при загрузке окна его имя появлялось на титульной строке, и Size Controls для возможности изменения размеров окна. Оставшиеся опции можно оставить со значениями по умолчанию. Закончив выбор, нажмите Ok. На экране появится окно с заданными параметрами.

Выберите на панели инструментов Draw инструмент Rounded Rectangle (скругленный прямоугольник), щелкнув по нему. На свободном месте окна, нажав и удерживая левую кнопку мыши, протащите ее по диагонали, чтобы сформировать горизонтальную емкость. Если теперь отпустить левую кнопку, объект будет готов и выбран. Теперь можно изменить форму объекта, если потащить за любой из маленьких квадратиков вдоль границ объекта. Для увеличения/уменьшения радиуса скругления углов емкости отключите опцию клавиатуры Num Lockи, удерживая клавишу Shift, нажмите на клавишу+/- . Чтобы переместить объект, просто потащите его, зацепившись где-нибудь внутри объекта. Для выбора цветовых атрибутов объекта выделите его и щелкните по соответствующему инструменту управления цветом.

Теперь нужно создать клапан. Для удобства рисования установите сетку (команда Arrange/Snap to Grid). Затем, используя средство Polygon(многоугольник - панель Draw), нарисуйте равносторонний треугольник, одна из сторон которого параллельна вертикальным линиям сетки. Дублируйте нарисованный треугольник (нажмите кнопку Duplicate панели инструментов General). Выделите второй треугольник и нажмите кнопку Flip Horizontal(отобразить зеркально по вертикали - панель Arrange). Соедините два треугольника, используя клавиши стрелок и мышь. Для перемещения объекта предварительно выделите его. Добавьте шток клапана с помощью инструмента Rectangle(прямоугольник - панель Draw). Расположите шток под клапаном. Для этого выделите шток и нажмите кнопку Send to Back(поместить под - панель Arrange). Нарисуйте привод клапана с помощью инструмента Ellipse.

Клапан готов. Но созданный клапан состоит из четырех отдельных элементов. Чтобы сделать из них единый объект, нажмите клавишу F2 для выделения всех объектов в окне, а затем нажмите кнопку Make Symbol(объединить в символ - панель Arrange). Теперь все составляющие клапан элементы объединены в символ и могут обрабатываться как единый объект. Можно изменять размер клапана, выделив его и потянув за один из захватов. Можно переместить клапан в новое место. У созданного объекта можно изменить цвет заполнения, линий, цвет рамки.

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

Подрисуйте к емкости участки трубопровода для подачи в нее эмульсии и вывода обезвоженной нефти и дренажной воды. Для этого воспользуйтесь библиотекой мастер-объектов Wizard (группа Symbol Factory) или простыми объектами (H/V Line - гор./верт. линия). Толщину линии можно выбрать, воспользовавшись меню Line. В разрывы трубопровода вставьте предварительно нарисованные клапаны.

Если элементы трубопровода и клапаны нарисованы отдельно и не соединены с емкостью, соедините их. Отдельные объекты можно либо протащить к новому месту, либо выбрать и стрелками точно позиционировать на место (с точностью до пикселя). Удерживая клавишу Shift во время использования стрелок для перемещения, можно сдвигать объект на 10 пикселей одним нажатием на клавишу, а удерживая Ctrl - на 50 пикселей.

Далее в соответствии с заданием нужно создать числовые поля, на которые будут выводиться текущий уровень раздела фаз в отстойнике и расход обезвоженной нефти. Удобнее было бы эти поля поместить в рамки, подкрашенные соответствующим цветом. Воспользовавшись инструментом Rectangle (прямоугольник - панель Draw), нарисуйте рамку и присвойте ей желаемые цветовые атрибуты. А так как речь идет о двух параметрах, произведите дублирование рамки. Переместите созданные рамки на места, удобные для наблюдения за процессом (возможно, удобнее их поместить в верхней части окна).

Теперь выберите инструмент Т (текст), которым нужно набрать названия параметров и знаки числового поля для вывода значений переменных на экран. Предварительно подберите шрифт, его стиль и размер, выбрав команду Text/Fonts. На свободном месте окна напечатайте один знак

решетки #, нажмите Enter. Нажатие этой клавиши завершает ввод первой текстовой строки и позволяет создать новую текстовую строку. Введите размерность параметра и нажмите Enter. Наконец, введите название параметра. Теперь нужно сдвинуть эти строки на свои места в одну из рамок. Повторите все проделанное выше для второго параметра.

Для сигнализации предельных отклонений верхнего и нижнего уровней раздела фаз предлагается создать в окне еще две рамки с соответствующими текстовыми полями (только текстовыми полями, т. к. выводить значение уровня в эти рамки нет необходимости). В дальнейшем, при анимации объектов окна, можно будет “заставить” эти рамки мерцать красным цветом при выходе уровня раздела фаз за установленные границы.

Предполагается, что уровень раздела фаз стабилизируется автоматическим регулятором, регулирующее воздействие которого направлено на клапан, установленный на линии сброса дренажной воды. Для перехода с автоматического управления этим клапаном на ручное (дистанционное) введите в схему переключатель руч./авт.Щелкните по иконке Wizard и в открывшемся меню выберите группу Switches(переключатели). Нажмите мышь на переключателе (Knob Switch) и щелкните по кнопке Select(или дважды щелкните по переключателю). Диалоговая панель автоматически закроется и вернется текущее окно. Курсор изменится на уголок при возвращении в текущее окно. Щелкните мышью для вставки объекта в окно. Дважды щелкните по мастер-объекту, чтобы произвести его конфигурирование (в поле Tagname введите имя объекта, например, Status, в позицию Switch Label - управление(control), в позицию ON Label - руч. (hand), в позицию OFF Label - авт.(avt)). Так как переменная Statusещене определена в словаре переменных, система выдаст запрос на ее определение. Подтвердите запрос и определите переменную Status(тип переменной -Memory Discrete).

Теперь нужно предоставить оператору возможность дистанционно управлять клапаном. Для этого вновь выберите инструмент Wizardи в открывшемся меню щелкните по строке Sliders (движковые регуляторы). Вставьте выбранный мастер-объект в окно и при его конфигурировании привяжите» к переменной valveтипаMemory Integer).

Но эти два «рычага» управления будут постоянно находиться в окне мнемосхемы, тогда как пользоваться ими оператору приходится редко. Если же в окне представлено несколько контуров регулирования, то экран будет «перегружен» объектами и оператору будет сложно в них ориентироваться.

Создайте новое окно типа Popup (всплывающее) без заголовка и без возможности изменения размеров окна. Размеры и положение окна подберите таким образом, чтобы в нем разместились переключатель,

движковый регулятор и кнопка для закрытия окна (при вызове окна оно не должно закрывать другие элементы интерфейса). Вырежьте поочередно переключатель и движковый регулятор из первого окна и вставьте в новое (всплывающее) окно (команда Paste меню правой кнопки). При этом параметры конфигурирования этих объектов сохраняются. Подрисуйте в новом окне кнопку с текстом Закрыть(для замены текста на кнопке выполните команду Special/Substitute String).

Для вызова на экран всплывающего окна в основном окне также создайте кнопку (Управление).

Наконец, нужно создать кнопку, нажатие на которую будет запускать и останавливать процесс (с текстом Пуск).

Графическое проектирование операторского интерфейса закончено. Но нужно решить еще три задачи, чтобы завершить проект: анимировать объекты, создать базу данных и написать сценарий проекта.

2. Анимацию объектов и создание базы данных переменных проекта можно выполнять раздельно, хотя удобнее их проводить одновременно для выбранного объекта.

Начните с отстойника. Щелчком выберите его, а затем щелкните по инструменту Fill (цвет заполнения) и выберите цвет для заполнения отстойника (для отстоявшейся воды). Далее выберите отстойник и нажмите клавишу Enter(или дважды щелкните по объекту). В появившемся диалоговом окне выбора динамических связей отметьте опцию Percent Fill/Vertical(процентное заполнение по вертикали) и щелкните по кнопкеVertical. В поле Expression введите имя описываемой переменной (например, ots_level). В графу Value at Max Fill (максимум заполнения) введите 3000 (диаметр отстойника в мм), минимум заполнения будет равен 0. В графы Max%иMin%введите, соответственно, 100 и 0.

Направление заполнения - вверх, отметьте опцию Up, после чего выберите цвет фона (Background Color). Напомним, что цвет заполнения был выбран ранее, здесь же речь идет о цвете верхней части отстойника (в данном примере в верхней части отстойника находится нефть). Чтобы закончить с отстойником, щелкните по Ok. Если имя переменной используется впервые, появится диалоговое окно для определения переменной (Tagname Dictionary).

Обратите внимание, что поле для имени переменной уже заполнено. Щелчком по кнопке Type выберите тип переменной - Memory Real (проект разрабатывается в отсутствие реальных контроллеров, его анимация будет

осуществлена с помощью скрипта). В поле Max Value введите 3000, в поле Eng Units (единицы измерения) - мм.

Если опция Alarms не включена, включите ее. Отметьте опцию Low и в появившиеся поля внесите значение нижнего уровня раздела фаз (например, 300), при котором будет включаться сигнализация, и уровень приоритета. То же самое проделайте для опции High (значение верхнего уровня для сигнализации - 2000). Щелкните по клавише Close. Переменная (уровень раздела фаз) анимирована и ее имя занесено в словарь переменных.

Чтобы анимировать объект # (решетка), выберите его и нажмите Enter (дважды щелкните по нему). Отметьте опцию Value Display/Analog(показать значение / аналоговое)и щелкните поклавише Analogдля выбора связи. Дважды щелкните по пустому полю Expression. В появившемся списке переменных выберите требуемую переменную (уровень раздела фаз ots_level - имя этой переменной уже находится в базе данных) и дважды щелкните по ней. Ее имя появится в поле Expression. Далее щелчок по Ok,затем еще раз Ok.

Проделайте вышеописанную операцию для анимации всех числовых полей проекта (переменной, отображающей расход нефти, присвойте имя debitn, тип -Memory Real).

Если имя переменной используется впервые (его еще нет в базе данных), введите его в поле Expression с клавиатуры.

Для анимации табло сигнализации отклонения уровня раздела фаз за верхний предел дважды щелкните по ранее созданному табло. В диалоговом окне описания связей включите опцию Miscellaneous/Blink и щелкните по клавише Blink. В поле Expression введите имя переменной ots_level(либо наберите на клавиатуре, либо воспользуйтесь приемом, описанным выше), поставьте точку и без пробела введите HiStatus (верхний предел). Отметьте опцию Blink visible(видимое мерцание) и выберите цвет мерцания табло.

Те же операции проделайте для анимации табло сигнализации отклонения уровня раздела фаз за нижний предел. В поле Expression после точки за именем переменной введите LoStatus (нижний предел).

Кнопке Управление присвойте динамическое свойствоTouch Pushbutton/Show Window - показать окно. В появившемся диалоге отметьте имя окна, которое будет открываться при нажатии кнопки Управление.

Во втором окне операторского интерфейса - переключатель, предоставляющий оператору возможность перевести контур на ручное управление. Ранее, при конфигурировании этого объекта, его имя было занесено в базу данных (словарь переменных). Объекты, созданные инструментом Wizardи сконфигурированные с помощью специального диалогового окна, не требуют дополнительной установки анимационных связей.

То же самое можно сказать и о другом элементе операторского интерфейса - движковом регуляторе. Нужно добавить лишь, что с помощью этого элемента оператор может воздействовать на исполнительное устройство, изменяя положение его штока от 0 до 100%.

Чтобы закончить с всплывающим окном, присвойте кнопке Закрыть динамическое свойство Touch Pushbutton/Hide Window- спрятать окно. В появившемся диалоге отметьте имя окна, которое будет закрываться при нажатии кнопки Закрыть.

Прежде чем описывать анимацию кнопки Пуск основного окна, следует пояснить ее назначение в этом проекте. Данный проект разрабатывается в условиях отсутствия реального технологического процесса, на объектах которого размещены датчики, исполнительные устройства. Нет реального контроллера с регистрами, устройствами ввода/ вывода, с помощью которых информация считывается с датчиков или передается на исполнительные устройства, нет, наконец, DDE драйвера - промежуточного звена между пакетом InTouch и контроллером. Поэтому тип всех переменных в данном проекте - Memory(для реальных переменных тип I/O). С другой стороны, интерфейс оператора должен быть “живым ”, т.е. уровень раздела фаз в отстойнике должен изменяться, а для этого должен изменяться расход дренажной воды через клапан и т. д.

Практически любые по сложности операторские интерфейсы могут быть созданы с помощью скриптов.

Существует несколько возможностей анимировать проект с помощью скриптов. Анимация проекта, разработанного в данном примере, базируется на сценарии действий при нажатии кнопки. И этой кнопкой является кнопка Пуск.

Дважды щелкните по кнопке Пуск. Присвойте ей динамическое свойство Touch Pushbutton/Discrete Value. В поле Tagname введите имя объекта (например, Start), включите опцию Toggle (переключать). Щелкните по Ok.Приопределении переменной Start выберите тип Memory Discrete).

Щелчок по кнопке Close, затем Ok и еще раз Ok. Анимационная связь для кнопки установлена.

Предполагается, что кнопка предназначена не только для запуска проекта, но и для его остановки. Первоначальный текст на кнопке - Пуск, но после запуска проекта он должен измениться на Стоп. Для задания кнопке этого свойства дважды щелкните по нейи установите динамическое свойство

Value Display/Discrete.В полеExpressionвведите имя переменной - Start, в поле On Message - Стоп, а в поле Off Message - Пуск.

3.Для создания скрипта выполните команду Speсial/Scripts/ Application Scripts. В поле Condition Type выберите тип скрипта - While Running(исполняется непрерывно пока запущено приложение), в поле Every - 50 мсек. На белом поле диалогового окна наберите следующую ниже программу (интерпретация программы предлагается читателю):

IF Start THEN

IF NOT Status THEN

ots_level =1000+100*Cos($Second*10);

valve = ots_level / 30;

ELSE

ots_level = valve *30+ 50*Cos($Second);

ENDIF;

debitn= 300 - ots_level/10;

ENDIF;

Щелчок по Ok.

Проверьте работу проекта в режиме просмотра WindowViewer.

В правом верхнем углу экрана, непосредственно за командами меню, виден текст Runtime (выполнение). Чтобы быстро переключиться в этот режим (WindowViewer), щелкните по этому тексту. (В режим выполнения можно войти, выбрав команду File/ WindowViewer. Для возвращения в режим разработки следует ввести команду File/WindowMaker). Из предложенного списка окон приложения выберите окна для просмотра в режиме Runtime и нажмите Ok.).

Чтобы запустить проект, щелкните по кнопке Пуск.

Если какие-либо компоненты интерфейса «не работают», исправьте ошибки и добейтесь работы проекта в полном объеме.

Создайте третье окно проекта с именем Тренды. Воспользовавшись инструментом Real-time Trend, разместите в нем тренд реального времени. Двойным щелчком по тренду вызовите диалог для его конфигурирования.

Диапазон времени, охватываемый трендом на экране (Time Span), установите 10 мин. Подберите частоту вывода на график значений переменных, например, 1 секунда (Sample). В поле Max Value введите 2000 (такой масштаб позволит просматривать все переменные).

Подберите цвета сетки, цифр по осям тренда таким образом, чтобы они

были хорошо видны на экране. Произведите конфигурирование перьев для отображения уровня раздела фаз в отстойнике (ots_level), расхода обезвоженной нефти (debitn), положения штока регулирующего клапана (valve).

Для обеспечения навигации по окнам проекта в окне мнемосхемы и окне трендов создайте кнопки, нажатие на которые позволит открывать соответствующие окна (со свойствомTouch Pushbutton/Show Window - показать окно).

Сохраните проект и перейдите в режим просмотра. Убедитесь, что все компоненты интерфейса работают в соответствии с заданием.

СОДЕРЖАНИЕ

Введение. 3

Раздел 1. Application Manager и WindowMaker. 4

Работа 1. Окна и графические объекты. 8

Раздел 2. Анимационные связи. 15

Работа 2. Создание анимационных связей. 16

Раздел 3. Скрипты. 24

Работа 3. Использование скриптов в InTouch. 27

Раздел 4. Алармы и события в InTouch. 33

Работа 4. Алармы и события. 36

Раздел 5. Тренды в InTouch. 41

Работа 5. Тренды реального времени и архивные тренды. 45

Раздел 6. Особенности адресация в InTouch. 53

Работа 6. DDE - обмен. 57

Раздел 7. Пример разработки проекта. 60

Андреев Евгений Борисович, доцент кафедры АТП

РГУ нефти и газа им. И.М.Губкина.

Проектирование систем управления в SCADA-пакете

InTouch 7.0

Сводный тем. план 2001

Подписано в печать Формат 60х90/16

Объем 4,0 уч.-изд. л. Тираж 100 экз.

Заказ №

Отдел оперативной полиграфии РГУ нефти и газа им. И.М.Губкина

117917, Москва, Ленинский просп., 65.

Наши рекомендации