Разработка DDE-сервера.
Автоматизированная концепция SCАDA
Incr/Decr Buttons Up/Down). Нажатие на верхнюю или нижнюю стрелку приводит соответственно к увеличению или уменьшению значения переменной. Ограничение максимального и минимального значения указываются при декларации. Каждый компонент связан со своей переменной zoom1 — zoom4 (изменение масштаба графиков 1 — 4 соответственно) и sh1 — sh4 (изменение смещения графиков 1 — 4). Все переменные имеют тип… Читать ещё >
Разработка DDE-сервера. Автоматизированная концепция SCАDA (реферат, курсовая, диплом, контрольная)
Приложение, получающее данные из другого приложения по DDE и/или управляющее другим приложением с помощью команд через DDE является DDE-клиентом. В этом случае второе приложение является DDE-сервером. Рассмотрим проект DDE-сервера, выполненного на языке программирования Borland Delphi 6.
Для построении 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.
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 и затем в окне приложения, удерживая нажатой левую кнопку мышки, придать графику необходимые размеры.
Incr/Decr Buttons Up/Down). Нажатие на верхнюю или нижнюю стрелку приводит соответственно к увеличению или уменьшению значения переменной. Ограничение максимального и минимального значения указываются при декларации. Каждый компонент связан со своей переменной zoom1 — zoom4 (изменение масштаба графиков 1 — 4 соответственно) и sh1 — sh4 (изменение смещения графиков 1 — 4). Все переменные имеют тип Memory Integer. Для того, чтобы ввести новую переменную, необходимо описать ее в разделе Special/Tagname Dictionary/New. При этом необходимо указать ее имя в поле «Tagname:» и тип — в поле «Type:». Buttons Analog Tagname Display). Ввод данных осуществляется не непосредственно в WindowViewer, а посредством компоненты Incr/Decr Buttons Up/Down (Wizard Selection Value Displays Панель настройки графиков вызывается двойным щелчком левой кнопки мышки по окну графика и состоит из четырех текстовых строк соответствующих графикам (Graph 1, Graph 2, Graph 3, Graph 4). Каждый график имеет независимые настройки масштаба и величины сдвига по вертикали, отображаемые на экране. Для этого используется компонент Analog Tagname Display (Wizard Selection.
Для организации обмена данными через 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 сервера и соответствующие им масштабирующие коэффициенты.