При обмене с монитором – сервером NetDDE – из приложения возможен запрос значений атрибута (0, R) (ADVISE или REQUEST), а также запрос (REQUEST) и задание (POKE) значений других атрибутов каналов узла (как удаленного, так и локального).
Имя сервера задается в следующем формате:
\\<name>\NDDE$
где name – имя компьютера, на котором запущен МРВ.
Тема запроса задается как RTM<k>$, где k – индивидуальный номер узла.
Если в узле существуют каналы с одинаковым именем, то выполнение запроса влияет только на канал с наименьшим ID.
В приведенных ниже примерах узел имеет индивидуальный номер 3.
Для запроса реального значения канала ch1 узла nodeA в режиме ADVISE в ячейку таблицы Excel нужно записать следующую формулу (параметр Update в диалоге Links должен иметь значение Automatic):
='\\nodeA\NDDE$'|'RTM3$.OLE'!'ch1'
Запросить значение атрибута (0, R) канала ch1 в режиме REQUEST из Excel можно с помощью следующего макроса:
Sub read_ch1_R()
chNum = Application.DDEInitiate("\\nodeA\NDDE$", "RTM3$")
Worksheets("Sheet1").Range("C1") = Application.DDERequest(chNum, "ch1")
Application.DDETerminate chNum
End Sub
Для запроса значения произвольного атрибута в режиме REQUEST можно использовать макрос, в котором в качестве item указано уточненное имя атрибута.
В следующем макросе запрашивается значение атрибута 32 канала ch1 узла nodeA:
Sub read_attr32()
chNum = Application.DDEInitiate("\\nodeA\NDDE$", "RTM3$")
Worksheets("Sheet1").Range("C1") = Application.DDERequest(chNum, "ch1.32")
Application.DDETerminate chNum
End Sub
Для задания значения произвольного атрибута можно использовать макрос, в котором в качестве item указано уточненное имя атрибута.
В следующем макросе в атрибут 32 канала ch1 узла nodeA записывается значение из ячейки C3 таблицы Excel:
Sub write_attr32()
chNum = Application.DDEInitiate("\\nodeA\NDDE$", "RTM3$")
Application.DDEPoke chNum, "ch1.32", Worksheets("Sheet1").Range("C3")
Application.DDETerminate chNum
End Sub
Для записи в атрибут (2, In) указание его номера не обязательно:
Sub write_ch1_In()
chNum = Application.DDEInitiate("\\nodeA\NDDE$", "RTM3$")
Application.DDEPoke chNum, "ch1", Worksheets("Sheet1").Range("C3")
Application.DDETerminate chNum
End Sub