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

  Запрос атрибута R

  Запрос других атрибутов

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

При обмене с монитором – сервером NetDDE – из приложения возможен запрос значений атрибута (0, R) (ADVISE или REQUEST), а также запрос (REQUEST) и задание (POKE) значений других атрибутов каналов узла (как удаленного, так и локального).

Имя сервера задается в следующем формате:

\\<name>\NDDE$

где name – имя компьютера, на котором запущен МРВ.

Тема запроса задается как RTM<k>$, где k – индивидуальный номер узла.

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

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

Запрос атрибута R

Для запроса реального значения канала 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