Работа со сторонними программами

Previous Next


Кроме управления по TCP-порту, система «Бенукс» имеет  возможность обмениваться информацией с другими программами системы "Windows" с использованием межоконных сообщений.


Таким образом,  у сторонней программы имеются следующие возможности:


1. Запросить статус или текущее значение любого датчика, заведённого в логгеры системы "Бенукс".  Например, получить величину температуры или значение влажности, а также состояние цифрового датчика "1" или "0".

примечание: информация о текущих значениях берётся с индикаторных панелей, расположенных в окнах логгеров. Поэтому система "Бенукс" должна находится с состоянии "сканирование".


2. Послать "Бенуксу" команду включить или отключить устройство или оборудование. Причём, это устройство должно быть доступно на панели ручного управления.


3. Послать "Бенуксу" команду управления устройством на основе DS2890 (ЦАП).


4. Послать "Бенуксу" команду установки значения для внутрипрограммного датчика-переменной.


5. Получить от Бенукса текущее состояние устройства ручного управления, в том числе DS2890 (ЦАП)


6. Запросить у "Бенукса" текущее состояние(статус) системы.


7. Послать команду управления сканированием:

     Команда START - запуск сканирования.

     Команда STOP - останов сканирования.

     Команда CONTIN - продолжение сканирования после останова.


8. Послать "Бенуксу" команду "запустить сценарий".


9. Послать "Бенуксу" команду "остановить сценарий".




    ИНФОРМАЦИЯ ДЛЯ ПРОГРАММИСТОВ:  

Обмен информацией выполняется с использованием стандартных межоконных сообщений системы Windows. Для этого сторонняя программа должна использовать функции WinAPI:    "FindWindow" и "SendMessage". Самой первой должна быть использована функция FindWindow для "подключения" к системе "Бенукс"   (достаточно одного вызова), а затем любое количество вызовов функции "SendMessage".  


Краткое описание используемых стандартных функций WinAPI:


     function FindWindow(ClassName, WindowName: PChar): HWnd;   Находит окно с совпадающими ClassName и WindowName.

  Параметры:    

ClassName:  Имя класса окна, заканчивающееся пустым символом, в нашем случае: 'TForm_benuks_main'.

WindowName: Текстовый заголовок окна (в нашем случае не используется).   Возвpащаемое значение: Описатель(идентификатор) окна.


     function SendMessage(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Longint;  

Отправляет сообщение окну с указанным идентификатором.

Параметры:

Wnd: Окно, пpинимающее сообщение. В нашем случае идентификатор, полученный функцией FindWindow.

Msg: Тип сообщения,  в нашем случае (WM_USER).

wParam: передаваемый параметр сообщения.

lParam: дополнительный параметр сообщения.

Возвpащаемое значение: Значение, возвpащенное пpинимающим оконом.


Ниже приводится описание команд обмена сторонней программы с системой "Бенукс".


Перед началом обмена необходимо к системе "Бенукс" отправить идентификатор окна сторонней программы.

Это делается с помощью двух функций Win API:

FindWindow(PChar('TForm_benuks_main'), nil ) и SendMessage(G_HWND_benuks, WM_USER+11, 0, Handle)

Первая функция находит основное окно системы "Бенукс" и возвращает цифровой идентификатор этого окна. С помощью второй функции сторонняя программа отправляет цифровой идентификатор своего окна к системе "Бенукс". После этого сторонняя программа может отправлять запросы и команды к системе "Бенукс".



Приводим список отправляемых сообщений:


1. запрос текущего состояния датчика, в том числе виртуального "датчика-переменной"

SendMessage(G_HWND_benuks, WM_USER+11, n, m)  

         где:

      G_HWND_benuks - цифровой идентификатор окна системы "Бенукс", полученный командой  FindWindow.

      n - порядковый номер логгера в системе "Бенукс"

      m - порядковый номер датчика внутри n-логгера

         возвращаемое значение функции:

  1:   нормальное выполнение.

  0: Ошибка отправки сообщения с результатом.

 -1: Датчик с текущим статусом "ОШИБКА".

 -2: Не установлен идентификатор окна, выдавшего запрос.

 -3: Не допустимый номер логгера.

 -4: Не допустимый номер датчика .

 -5: Не допустимый тип датчика.



2. команда управления оборудованием

SendMessage(G_HWND_benuks, WM_USER+12, x, y)  

          где:

      G_HWND_benuks - цифровой идентификатор окна системы "Бенукс", полученный командой  FindWindow.

      x - порядковый номер устройства управления оборудованием на панели ручного управления в системе "Бенукс"

      y - команда управления (1 - включить, 0 - отключить)

         возвращаемое значение функции:

  1: нормальное выполнение.

 -1: Ошибка при включении-отключении устройства.

 -2: Не установлен идентификатор окна, выдавшего запрос.

 -3: Не доступно окно ручного управления.

 -4: Не допустимый номер устройства ручного управления.

 -5: Не допустимый параметр команды управления.



3.  команда управления устройством на основе DS2890 (ЦАП).

SendMessage(G_HWND_benuks, WM_USER+16,  x,  y)

         где:

       G_HWND_benuks - цифровой идентификатор окна системы "Бенукс", полученный командой  FindWindow  

      x - порядковый номер устройства управления оборудованием на панели ручного управления в системе "Бенукс"

      y - команда управления в % (от 0 до 100)

         возвращаемое значение функции:

  1:   нормальное выполнение

 -1:  Ошибка при управлении устройством.

 -2:  Не установлен идентификатор окна, выдвшего запрос.

 -3:  Не доступно окно ручного управления.

 -4:  Не допустимый номер устройства ручного управления.

 -5:  Не допустимый параметр команды управления DS2890.



4. установить значение виртуального  "датчика-переменной"

SendMessage(G_HWND_benuks, WM_COPYDATA,  17, DataBuffer )  

          где:

      G_HWND_benuks - цифровой идентификатор окна системы "Бенукс", полученный командой  FindWindow.

      DataBuffer - строка, состоящая из трёх параметров, разделённых пробелом.  Параметры следующие:

      первый - порядковый номер логгера в системе "Бенукс"

      второй  - порядковый номер датчика внутри логгера

      третий  -  числовое значение для датчика-переменной

         возвращаемое значение функции:

  1: нормальное выполнение.

 -1: Датчик с текущим статусом "ОШИБКА".

 -2: Не установлен идентификатор окна, выдвшего запрос.

 -3: Не допустимый номер логгера.

 -4: Не допустимый номер датчика.

 -5: Не допустимый тип датчика.

 -6: Не допустимая величина устанавливаемого значения.

 -7: Датчик не является виртуальным (вычисляемым).

 -8: Датчик не является переменной.



5.  запрос текущего состояния  устройства ручного управления, в том числе DS2890 (ЦАП)

SendMessage(G_HWND_benuks, WM_USER+15, x, 0);

          где:

      G_HWND_benuks - цифровой идентификатор окна системы "Бенукс", полученный командой  FindWindow.

      x - порядковый номер устройства в окне "ручное управлене" в системе "Бенукс"

         возвращаемое значение функции:

  0 или 1:  состояние цифрового устройства

  от 0 до 100:  состояние устройства на основе DS2890 (ЦАП)

 -1: устройство управления в состоянии "ERROR"'.

 -2: Не установлен идентификатор окна, выдвшего запрос.

 -4: не допустимый номер устройства ручного управления.

 -5: ошибка при чтении величины положения DS2890.



6.  запрос текущего состояния(статуса) системы "Бенукс"

 SendMessage(G_HWND_benuks, WM_USER+13, 0, 0)

      где:

      G_HWND_benuks - цифровой идентификатор окна системы "Бенукс", полученный командой  FindWindow.

         возвращаемое значение функции:      

-1: ОШИБКА отправки команды "запрос текущего статуса".

  1: создание объектов (при запуске программы).

  2:  загрузка справочника (при запуске программы).

  3:  cоздание логгеров (при запуске программы).

  4: показ окон (при запуске программы).

  5: активация окон (при запуске программы).

  6: система загружена и готова к работе.

  7: инициализация устройств (после команды "PUSK".

  8: при переходе в режим "STOP".

  9: выполняется сканирование.



7. команды управления сканированием:

        команда "START" для системы "Бенукс" (запустить сканирование)

 SendMessage(G_HWND_benuks, WM_USER+13, 1, 0)

      где:

      G_HWND_benuks - цифровой идентификатор окна системы "Бенукс", полученный командой  FindWindow.

         возвращаемое значение функции:

  1: нормальное выполнение.

 -1: Ошибка второго параметра (должен быть 0).

 -2: Не установлен идентификатор окна, выдавшего запрос.

 -3: Не допустимая команда.

       команда "STOP" для системы "Бенукс" (остановить  сканирование)

 SendMessage(G_HWND_benuks, WM_USER+13, 2, 0)

      где:

      G_HWND_benuks - цифровой идентификатор окна системы "Бенукс", полученный командой  FindWindow.

         возвращаемое значение функции:

  1: нормальное выполнение.

 -1: Ошибка второго параметра (должен быть 0).

 -2: Не установлен идентификатор окна, выдавшего запрос.

   -3: Не допустимая команда.


       команда "CONTIN" для системы "Бенукс" (продолжить  сканирование)

 SendMessage(G_HWND_benuks, WM_USER+13, 3, 0)

      где:

      G_HWND_benuks - цифровой идентификатор окна системы "Бенукс", полученный командой  FindWindow.

         возвращаемое значение функции:

  1: нормальное выполнение.

 -1: Ошибка второго параметра (должен быть 0).

 -2: Не установлен идентификатор окна, выдавшего запрос.

 -3: Не допустимая команда.


8. команда  "запустить сценарий".

SendMessage(G_HWND_benuks, WM_COPYDATA,  4, DataBuffer )  

          где:

      G_HWND_benuks - цифровой идентификатор окна системы "Бенукс", полученный командой  FindWindow.

      DataBuffer - строка с именем запускаемого сценария:



9. команда  "остановить сценарий".

SendMessage(G_HWND_benuks, WM_COPYDATA,  5, DataBuffer )  

          где:

      G_HWND_benuks - цифровой идентификатор окна системы "Бенукс", полученный командой  FindWindow.

      DataBuffer - строка с именем останавливаемого сценария:





  Примеры использования на Delphi:

   1. G_HWND_benuks:=FindWindow(PChar('TForm_benuks_main'), nil );

   2. SendMessage(G_HWND_benuks, WM_USER+11, 0, Handle);

   3. SendMessage(G_HWND_benuks, WM_USER+11, 1, 3);

   4. SendMessage(G_HWND_benuks, WM_USER+12, 3, 1);

   5. SendMessage(G_HWND_benuks, WM_USER+13, 0, 0);















































Created with the Personal Edition of HelpNDoc: Create HTML Help, DOC, PDF and print manuals from 1 single source