Обмен приложение - МРВ как DDE-сервер

  Запрос значения атрибута R

  Запрос значений других атрибутов

  Задание значений атрибутов

При обмене с локальным МРВ из приложения – DDE-клиента – возможно:

   чтение атрибута (0, R) каналов (в режиме REQUEST или ADVISE);

   чтение (REQUEST) и запись (POKE) любых других атрибутов каналов.

Запись значений в атрибуты, вычисляемые в канале, не имеет смысла.

Если в узле существуют каналы с одинаковым именем, то выполнение запроса влияет только на канал с наименьшим ID.

Если клиентом DDE является Excel, то DDE-обмен с МРВ может быть сконфигурирован с помощью формул Excel и/или макросов VBA Формула Excel может быть использована только для запроса значения (в режиме ADVISE или REQUEST) – в этом случае она имеет следующий формат:

=<server>|<topic>!<item>

где

server – имя сервера в формате RTM<k>, где k – индивидуальный номер узла;

topic – тема запроса (см. примеры ниже);

item – имя канала или уточненное имя атрибута.

Уточненное имя атрибута имеет следующий формат:

<имя канала>.<номер атрибута>

Любой из перечисленных параметров DDE-формулы Excel следует заключить в одинарные кавычки в следующих случаях:

   если параметр содержит пробелы или служебные символы, которые используются в формулах Excel (двоеточие, минус и т.п.);

   если параметр имеет вид ссылки на ячейку (примером такого параметра может служить имя канала ch1).

В приведенных ниже примерах узел имеет индивидуальный номер 2.

Запрос значения атрибута R

Для запроса реального значения канала pila в режиме ADVISE в ячейку таблицы Excel нужно записать следующую формулу:

=RTM2|GET!pila

В этом режиме значение в ячейке обновляется автоматически.

В режиме ADVISE монитор посылает клиенту значение канала при каждом его пересчете.

Для запроса реального значения канала pila в режиме REQUEST в ячейку таблицы Excel нужно записать одну из следующих формул:

=RTM2|PUT!pila

=RTM2|PUT!pila.0

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

Запросить значение атрибута (0, R) канала в режиме REQUEST можно также с помощью одного из следующих макросов VBA Excel (во втором макросе тема запроса может быть произвольной):

Sub read_pila_R()

'PUT or GET to read R

chNum = Application.DDEInitiate("RTM2", "GET")

Worksheets("Sheet1").Range("F1") = Application.DDERequest(chNum, "pila")

Application.DDETerminate chNum

End Sub

 

Sub read_pila_R()

'Arbitrary topic

chNum = Application.DDEInitiate("RTM2", "LL")

Worksheets("Sheet1").Range("F1") = Application.DDERequest(chNum, "pila.0")

Application.DDETerminate chNum

End Sub

Запрос значений других атрибутов

Для запроса значения атрибутов (3, C),  (4, I), (7, P); (8, W), (26, HL), (27, LL), (28, HA), (29, LA), (30, HW), (31, LW), (79, CODE) и (127, NAME) могут быть использованы запросы двух видов:

   topic – короткое имя атрибута, item – имя канала;

   topic – произвольное значение (из допустимых), item – уточненное имя атрибута.

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

Таким образом, для запроса, например, верхнего предела (26, HL) канала ch1 в ячейку таблицы Excel нужно записать одну из следующих формул:

=RTM2|HL!'ch1'

=RTM2|PUT!ch1.26

Запросить значение атрибута из приведенного выше перечня (ниже в примерах запрашивается кодировка) можно также с помощью одного из следующих макросов (для запроса значений других атрибутов нужно использовать второй макрос):

Sub read_ch1_CODE()

'Short name to read attribute

chNum = Application.DDEInitiate("RTM2", "CODE")

Worksheets("Sheet1").Range("F1") = Application.DDERequest(chNum, "ch1")

Application.DDETerminate chNum

End Sub

  

Sub read_ch1_CODE()

'Arbitrary topic

chNum = Application.DDEInitiate("RTM2", "LL")

Worksheets("Sheet1").Range("F1") = Application.DDERequest(chNum, "ch1.79")

Application.DDETerminate chNum

End Sub

Задание значений атрибутов

Для задания значения атрибутов (2, In), (3, C),  (4, I), (7, P); (8, W), (26, HL), (27, LL), (28, HA), (29, LA), (30, HW), (31, LW), (79, CODE) и (127, NAME) могут быть использованы макросы двух видов:

   topic – короткое имя атрибута, item – имя канала;

   topic – произвольное значение (из допустимых), item – уточненное имя атрибута.

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

Таким образом, для записи в атрибут (2, In) канала ch1 значения из ячейки C3 таблицы Excel можно использовать один из следующих макросов:

Sub write_ch1_In()

'PUT or GET to write into In

chNum = Application.DDEInitiate("RTM2", "PUT")

Application.DDEPoke chNum, "ch1", Worksheets("Sheet1").Range("C3")

Application.DDETerminate chNum

End Sub

  

Sub write_ch1_In()

'Arbitrary topic

chNum = Application.DDEInitiate("RTM2", "HA")

Application.DDEPoke chNum, "ch1.2", Worksheets("Sheet1").Range("C3")

Application.DDETerminate chNum

End Sub