DDE (Dynamic Data Exchange - динамический обмен данными) представляет собой коммуникационный протокол, разработанный компанией Microsoft для обмена данными между различными Windows-приложениями и их синхронизации. Для нормального функционирования DDE необходимо два участника – приложение, запрашивающее данные, и приложение, посылающее данные. Приложение, запрашивающее данные, называется клиентом. Приложение, посылающее данные, называется сервером.
Клиент DDE. В качестве приложения клиента может выступать любое приложение, позволяющее осуществлять DDE-запросы к DDE-серверу. В качестве примера приложения, обладающего возможностями DDE-клиента, можно привести электронную таблицу Microsoft Excel, позволяющую в качестве формулы в какой-либо ячейке устанавливать запрос с автообновлением данных к указываемому DDE-серверу.
Сервер DDE. Приложение, обеспечивающее возможности сервера, должно “уметь” принимать DDE сообщения и посылать данные в ответ на запросы приложений-клиентов. У одного DDE-сервера может быть один или несколько DDE-клиентов.
Сеанс DDE – активная непрерывная связь между клиентом и сервером.
Транзакция DDE – одиночный акт обмена данными в процессе сеанса.
В DDE используется трёхуровневая система адресации: service (зарегистрированный сервис, как правило, указывается приложение, предоставляющее серверные функции); topic (раздел данных, например, имя файла, или таблица базы данных); item (элемент данных, подлежащий передаче).
Если в качестве сервера DDE выступает MS Excel, эта схема выглядит следующим образом: service – "EXCEL"; topics – электронная таблица "[Книга1]Лист1"; item –ячейка "R1C2".
Поскольку Windows базируется на архитектуре, использующей сообщения, то наиболее подходящим методом для автоматической передачи данных между прикладными программами является посылка сообщений. Все транзакции выполняются с помощью передачи между программами клиентом и сервером DDE сообщений:
WM_DDE_INITIATE – инициализирует диалог между прикладными программами сервера и клиента;
WM_DDE_ACK – посылается в ответ на полученное сообщение;
WM_DDE_REQUEST – запрашивает у сервера значение элемента данных;
WM_DDE_POKE – посылает значение элемента данных серверу;
WM_DDE_ADVISE – устанавливает постоянную связь между сервером и клиентом;
WM_DDE_DATA – посылает значение элемента данных клиенту;
WM_DDE_EXECUTE – посылает строку прикладной программе-серверу, которая должна выполнить ее как последовательность команд;
WM_DDE_UNADVISE – завершает постоянную связь между сервером и клиентом;
WM_DDE_TERMINATE – завершает диалог.
Посылка сообщений – это нижний уровень обмена данными между DDE-клиентом и DDE-сервером. На верхнем уровне DDE-обмен реализован в виде функций, содержащихся в динамической библиотеке DDEML.DLL.
Технология DDE удобна для взаимодействия между такими приложениями как MS Excel – MS Word и т.п. Однако при высоком потоке передачи данных этот механизм не очень подходит вследствие низкой надежности и низкой скорости передачи сообщений. Для SCADA–систем имеются модификации: пакетированный DDE-обмен - FastDDE. Применение последнего заметно повышает эффективность и производительность обмена данными благодаря уменьшению общего количества DDE-пакетов, которыми клиент и сервер обмениваются между собой. Но принципиальные недостатки, связанные с надежностью и зависимостью от количества загруженных в текущий момент приложений Windows, остались.
С целью расширения возможностей стандартного протокола DDE на локальную сеть предложен NetDDE. Он позволяет приложениям, запущенным на компьютерах, объединенных в локальную сеть, вести DDE-обмен.