Запрос значений других атрибутов
При обмене с локальным МРВ из приложения – 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.
Для запроса реального значения канала 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