Разработка DLL доступа к данным

Интерфейсы

Взаимодействие Lectus OPC/DDE Toolkit и DLL доступа к данным осуществляется посредством интерфейсов которые реализуются либо на стороне OPC сервера (Lectus OPC/DDE Toolkit), либо на стороне DLL.

Список интерфейсов:
  • ILcsDriver - предоставляет серверу доступ к функциям DLL. Реализуется в DLL;
  • ILcsOPCServer - предоставляет доступ к функциям OPC сервера. Реализуется в OPC сервере;
  • ILcsItem - предоставляет DLL доступ к переменной(элемент данных) сервера. Реализуется в OPC сервере;
  • ILcsComPort - предоставляет DLL доступ к COM портам. Реализуется на OPC сервере;
  • ILcsReceiveData - получение данных с COM порта. Реализуется в DLL.
Разработка DLL доступа к данным заключается в создании динамической библиотеки DLL, которая экспортирует функцию:
function GetLcsDriver: ILcsDriver.
Данная функция возвращает указатель на объект реализующий интерфейс ILcsDriver. В динамической библиотеке нужно реализовать интерфейсы ILcsDriver и ILcsReceiveData.

Формы

Пространство переменных OPC сервера организовано иерархически. Переменная которая содержит другие переменные называется узлом. Узлы могут наследовать другие узлы. Таким образом можно организовать иерархичекую структуру описывающую реальную структуру данных устройства или множества устройств.

DLL доступа к данным должна содержать формы для интерактивного взаимодействия с конечным пользователем во время конфигурации переменных взаимодействующих с DLL. Необходимо создать три вида форм:

Форма конфигурации служит для определения общих параметров для DLL доступа к данным, например определение таймаута ожидания ответа от устройства. Форма параметров узла служит для определения параметров узла (логически объединенная группа переменных), например имя узла, частота опроса переменных узла, адрес устройства и т.п. Форма параметров переменной служит для определения параметров переменной, например имя переменной, адрес переменной и т.п. Из OPC сервера передается дескриптор (Handle) окна в которое форму нужно внедрить. Как это делается можно посмотреть на примерах поставляемых с программой Lectus OPC/DDE Toolkit.

Алгоритм работы

  1. OPC сервер вызывает экспортируемую DLL функцию GetLcsDriver и получает указатель на интерфейс ILcsDriver;
  2. Для передачи ссылок на интерфейсы ILcsOPCServer и ILcsComPort, а также получения названия и описание DLL доступа к данным, OPC сервер вызывает функцию ILcsDriver.Initial;
  3. При определении параметров DLL доступа к данным, вызывается функция ILcsDriver.ConfigCreate для создания внедренной формы конфигурации. Параметры конфигурации сохраняются и загружаются с помощью функций ILcsOPCServer.SaveConfig и ILcsDriver.LoadConfig;
  4. При определении параметров узла, вызывается функция ILcsDriver.AddNodeCreate для создания внедренной формы параметров узла. В данной функции передается указатель на интерфейс ILcsItem, через который возвращаются параметры узла. Точнее параметры передаются через функцию ILcsItem.AddChildItem. Параметры опеределяются как список свойств. Каждое свойство имеет описание и может быть любого скалярного типа. Идентификатор свойства задается в пределах от 5000 до 5999;
  5. При определении параметров переменной, вызывается функция ILcsDriver.AddItemCreate для создания внедренной формы параметров переменной. В данной функции передается указатель на интерфейс ILcsItem, через который возвращаются параметры переменной. Точнее параметры передаются через функцию ILcsItem.AddChildItem. Параметры опеределяются как список свойств. Каждое свойство имеет описание и может быть любого скалярного типа. Идентификатор свойства задается в пределах от 5000 до 5999;
  6. При опросе переменных OPC сервер вызывает функцию ILcsDriver.AddTask для каждой переменной, которая добавляет задачу опроса данной переменной в список задач. Далее вызывается функция ILcsDriver.RunTasks для обработки всех добавленных в список задач;
  7. Синхронные задачи сразу возвращают результат через ATaskDef.ptrItemState.vDataValue. Асинхронные задачи возвращают результат через функцию ILcsItem.OnReadComplete для асинхронного чтения, и ILcsItem.OnWriteComplete для асинхронной записи;
  8. OPC сервер предоставляет возможность передавать/получать данные через СОМ порты. Для этого необходимо вызвать функцию ILcsComPort.Write для передачи данных. Принятые данные будут переданы через функцию ILcsReceiveData.OnReceiveData. В случае, если предполагается одновременная работа с несколькими DLL доступа к данным, которые работают с COM портами, необходимо также вызывать функции ILcsComPort.OccupyPort для захвата COM порта и ILcsComPort.ReleasePort для освобождения COM порта.

Установка сервера у конечного пользователя