Разработка графопостроителя в системе InTouch



Данный раздел посвящен разработке четырехканального графопостроителя визуализирующего данные, поступающие по DDE каналу с 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.MainForm.Handle, SW_HIDE);

 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.Title);

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.FormDestroy, в которой происходит удаление иконки из системного Tray:

 

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.Timer1Timer по прерыванию таймера.

 

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*(xsin-20*trunc(xsin/20))); //пилообразный сигнал

   asm

   mov dx,379h

   in al,dx

   and al,80h

   mov LPTbyte,al

   end;

DDEItem200.Text:=inttostr(LPTbyte*100); //состояние линии LPT-порта                                          

DDEItem300.Text:=inttostr(round(50+50*sin(xsin/20)));

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’ – переменная обмена.

 

Разработка DDE - клиента

Основа человеко-машинного интерфейса в рамках InTouch - это иерархически взаимосвязанные анимированные сенсорные окна. Для создания нового окна выполним команду File/New Window... (Файл/Новое Окно). На экране появится диалоговое окно Window Properties (Свойства Окна), которое необходимо заполнить.

Здесь следует ввести только имя окна (поле Name) Scope. Ос­тальные поля и опции оставлены без изменений. Окно с указан­ными атрибутами появится на экране. Там же будет отображена и Панель Инструмен­тов InTouch - Tools, с которой предстоит интенсивно работать далее.

График представляет собой прямоугольную область с нанесенными координат­ными прямыми, на которой графически представляется изменение значения одной или нескольких переменных в течение времени. В пакете InTouch имеются объекты для ди­намического отображения значения переменной в реальном времени – графики реаль­ного времени (инструмент (Real-time Trend)), и, так называе­мые, аналитические кривые, которые строятся на основании архивных данных (инструмент (Historical Trend)). Для того, чтобы он появился в созданном нами окне, необходимо на Панели Инструмен­тов InTouch – Tools выбрать пункт Real – Time Trend и затем в окне приложения, удерживая нажатой левую кнопку мышки, придать графику необходимые размеры.

Панель настройки графиков вызывается двойным щелчком левой кнопки мышки по окну графика и состоит из четырех текстовых строк соответствующих графикам (Graph 1, Graph 2, Graph 3, Graph 4). Каждый график имеет независимые настройки масштаба и величины сдвига по вертикали, отображаемые на экране. Для этого используется компонент Analog Tagname Display (Wizard Selection ® Value Displays ® Analog Tagname Display). Ввод данных осуществляется не непосредственно в WindowViewer, а посредством компоненты Incr/Decr Buttons Up/Down (Wizard Selection ® Buttons ® Incr/Decr Buttons Up/Down). Нажатие на верхнюю или нижнюю стрелку приводит соответственно к увеличению или уменьшению значения переменной. Ограничение максимального и минимального значения указываются при декларации. Каждый компонент связан со своей переменной zoom1 – zoom4 (изменение масштаба графиков 1 – 4 соответственно) и sh1 – sh4 (изменение смещения графиков 1 – 4). Все переменные имеют тип Memory Integer. Для того, чтобы ввести новую переменную, необходимо описать ее в разделе Special/Tagname Dictionary/New. При этом необходимо указать ее имя в поле «Tagname:» и тип – в поле «Type:».

Для организации обмена данными через 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.

Для того, чтобы запустить программу графопостроителя и начать DDE – обмен, необходимо включить DDE сервер (т. е. запустить файл Ddeserver.exe) и переключиться в окно InTouch - WindowViewer (нажатием кнопки Runtime! в правом верхнем углу окна InTouch - WindowMaker). В процессе работы InTouch WindowViewer автоматически выполнит все требуемые действия по установлению канала об­мена данными и обработке значений элемента.

Ниже представлен внешний вид программы графопостроителя в окне InTouch - WindowViewer отображающей в виде четырех графиков данные, полученные от программы DDE сервера и соответствующие им масштабирующие коэффициенты.

 

Рис. 21. Окно программы графопостроителя.

 


Список литературы

1. Scada . ru - Публикации - SCADA - системы: взгляд изнутри

 // URL: http://www.scada.ru/publication/book/preface.html

2. Кабаев С.В. Пакет программного обеспечения Intouch - система мониторинга и управления в объектах промышленной автоматизации

// URL: http://www.mka.ru/go/?id=40463&url=www.rtsoft.ru

3. ТРЕЙС МОУД - интегрированная SCADA- и softlogic-система для разработки АСУТП // URL: http://adastra.ru/ru/tm/tm5/

4. Кузнецов А. Genesis for Windows – графическая scada-система для разработки АСУ ТП. // Современные технологии автоматизации.- 1997.- №3.

 

 


Дата добавления: 2019-07-15; просмотров: 153; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!