Если клиентом DDE является Excel, то DDE-обмен с МРВ может быть сконфигурирован с помощью: формул Excel; макросов VBA. Формула Excel может быть использована для запроса реального значения канала в режиме ADVISE или REQUEST. Запрос значений всех других атрибутов канала проводится только в режиме REQUEST.
Формат формулы EXCEL: =<server>|<topic>!<item>
server – имя сервера в формате RTM<k>, где k – индивидуальный номер узла;
topic – тема запроса (GET – для режима ADVISE, PUT – для режима REQUEST);
item – имя канала или уточненное имя атрибута в формате: <имя канала>.<номер атрибута> .
Примеры:
=RTM0|GET!Канал1 вызов реального значения канала КАНАЛ1 в режиме ADVISE;
=RTM0|PUT!Канал1.0 вызов реального значения (атрибут № 0) канала КАНАЛ1 в режиме REQUEST;
=RTM|PUT!Канал1.45 вызов значения атрибута "время последнего изменения реального значения" (атрибут № 45) для канала КАНАЛ1 в режиме REQUEST.
{DDEAuto RTM0 GET Канал1} вызов реального значения канала КАНАЛ1 в режиме ADVISE в поле MS WINWORD.
Через макросы VBA доступны режимы REQUEST и POKE. Для обмена с помощью макросов VBA используются функции:
Channel := DDEInitiate(App, Topic) – установка диалога по заданным сервису и теме;
DDETerminate(Channel) – прекращение диалога;
Data := DDERequest(Channel, Item) – запрос данных;
DDEPoke(Channel, Item, Data) – передача данных серверу;
DDEExecute(Channel, String) – передача команды другому приложению.
МРВ (DDE-клиент) – Excel (DDE-сервер)
Если монитор выступает в роли DDE-клиента, для конфигурирования обмена используются переменные DDE, которые создаются в группе DDE слоя ИСТОЧНИКИ/ПРИЕМНИКИ навигатора проекта.
Запрос значения в режиме ADVISE.Создадим в узле канал ch1 и свяжем его с переменной DDE с параметрами:
Откроем Excel, создадим новую книгу и запустим узел – установится связь монитора с книгой Excel, активной в данный момент, в режиме ADVISE. В этом режиме DDE-сервер (Excel) будет посылать DDE-клиенту (монитору) значение (при каждом его изменении) ячейки G6 (Row=6, Column=7) листа Sheet1, и это значение будет записано во вход канала ch1.
Запрос значения в режиме REQUEST.Создадим в узле канал ch2 и свяжем его с переменной DDE:
Для запроса в режиме REQUEST тип переменной DDE должен быть INPUT. Для запроса в режиме REQUEST параметру РЕЖИМ переменной DDE можно также задать значение REQ/POKE[data/r] или REQ/POKE[data/n]. Откроем Excel, создадим новую книгу и запустим узел – установится связь монитора с книгой Excel, активной в данный момент, в режиме REQUEST. В этом режиме монитор генерирует в соответствующем потоке запросы на чтение значения ячейки G6 листа Sheet1 и записывает это значение во вход канала ch2.
Задание значения в режиме POKE. Для передачи в указанную ячейку таблицы Excel выходного значения канала (атрибут Q), привязанная к этому каналу переменная DDE должна иметь тип OUTPUT. Создадим в узле канал ch_p и свяжем его с переменной DDE, параметры которой зададим следующим образом:
Для записи значения в Excel параметру MODE переменной DDE можно также задать значение REQ/POKE[data/r] или REQ/POKE[data/n]. Откроем Excel, создадим новую книгу и запустим узел – установится связь монитора с книгой Excel, активной в данный момент, в режиме POKE. В этом режиме монитор генерирует в соответствующем потоке запрос на запись выходного значения (при каждом его изменении) канала ch_p в ячейку G6 листа Sheet1.