En

Разработка драйверов устройств

Чтобы добавить поддержку нового типа устройств в Rapid SCADA, необходимо разработать драйвер устройства. В терминах Rapid SCADA драйвер называется библиотекой КП или DLL КП. Разработанная библиотека динамически подключается программой SCADA-Коммуникатор и выполняет опрос устройств и отправку команд управления.

Для разработки понадобится Microsoft Visual Studio 2010 или выше, а также библиотеки ScadaCommCommon.dll, ScadaData.dll и Log.dll, содержащие базовую функциональность. Актуальные версии этих DLL можно найти в директории установки Rapid SCADA.

Общая последовательность действий по разработке библиотеки КП:

  1. Запустите Visual Studio и создайте новый проект типа Class Library. Используйте для проекта .NET Framework
  2. Добавьте ScadaCommCommon.dll, ScadaData.dll и Log.dll в References проекта.
  3. Создайте класс, унаследованный от Scada.Comm.Devices.KPView, в котором реализуется пользовательский интерфейс библиотеки.
  4. Создайте класс, унаследованный от Scada.Comm.Devices.KPLogic, в котором реализуется логика обмена данными с устройствами.
  5. Выполните сборку проекта и выложите полученную DLL в директорию библиотек КП программы SCADA-Коммуникатор. По умолчанию C:\SCADA\ScadaComm\KP
  6. Перезапустите графическую оболочку SCADA-Коммуникатора, чтобы DLL стала доступна.
  7. Отлаживайте код библиотеки, используя журналы SCADA-Коммуникатора или с помощью удалённой отладки Visual Studio.

Необходимо соблюдать несколько правил именования файла DLL и классов:

  1. Имя файла создаваемой DLL должно начинаться с префикса Kp. Например, KpTest.dll.
  2. Классы, унаследованные от KPView и KPLogic, должны относиться к пространству имён Scada.Comm.Devices.
  3. Имена классов, унаследованных от KPView и KPLogic, должны иметь вид KpTestView и KpTestLogic соответственно, где KpTest – имя библиотеки КП.
  4. Имена классов чувствительны к регистру символов.

Примером создаваемой библиотеки КП является проект KpTest, относящийся к решению OpenKPs. Данное решение доступно на GitHub по ссылке. Ознакомьтесь проектом KpTest и другими проектами из OpenKPs и используйте их как основу при разработке собственных драйверов.

Реализация класса пользовательского интерфейса

Простейший пример реализации класса, унаследованного от KPView:

Обязательное действие при реализации класса – переопределить свойство KPDescr, которое возвращает описание библиотеки КП, отображаемое SCADA-Коммуникатором.

Дополнительные возможности при реализации пользовательского интерфейса библиотеки КП:

  • свойство DefaultCnls, если его переопределить, задаёт описания каналов, которые используется сервисом автоматической генерации каналов SCADA-Администратора;
  • переопределение свойства DefaultReqParams задаёт параметры опроса КП по умолчанию, используемые SCADA-Коммуникатором;
  • переопределение метода ShowProps позволяет отобразить форму для настройки свойств КП в SCADA-Коммуникаторе.

Примеры реализации перечисленных выше возможностей содержатся в проектах KpModbus и KpSms решения OpenKPs в классах KpModbusView и KpSmsView соответственно.

Реализация класса логики работы

Для реализации логики обмена данными с устройствами, необходимо создать класс, который наследуется от KPLogic. Класс KPLogic содержит множество полезных свойств и методов, необходимых разработчику, основные из которых будут рассмотрены далее. Чтобы глубже понять, как устроены библиотеки КП, и использовать все предоставляемые Rapid SCADA возможности, рекомендуется изучить исходный код класса KPLogic, а также код библиотек, входящих в решение OpenKPs.

Конструктор создаваемого класса должен содержать целочисленный параметр number, в который передаётся номер КП из базы конфигурации. В большинстве случаев в конструкторе создаются теги КП, которые являются объектами класса с именем KPTag. Теги могут быть разбиты на группы, относящиеся к классу TagGroup.

Следующий пример демонстрирует реализацию конструктора:

Класс KPLogic содержит ряд виртуальных методов, которые переопределяются в собственном классе при реализации алгоритма работы нового драйвера. Виртуальные методы описаны в следующей таблице:

Имя виртуального метода Описание
Session Выполнить сеанс опроса КП
SendCmd Отправить команду ТУ
ProcIncomingReq Обработать уже считанный входящий запрос
ProcUnreadIncomingReq Обработать не считанный входящий запрос
OnAddedToCommLine Выполнить действия после добавления КП на линию связи
OnCommLineStart Выполнить действия при запуске линии связи
OnCommLineTerminate Выполнить действия при завершении работы линии связи
OnCommLineAbort Выполнить действия при прерывании работы линии связи
OnConnectionSet Выполнить действия после установки соединения
BindTag Привязать тег КП к входному каналу базы конфигурации
CheckBehaviorSupport Проверить поддержку режима работы канала связи
InvalidateCurData Установить текущие данные как недостоверные
GetInfo Получить информацию о работе КП
ConvertTagDataToStr Преобразовать данные тега КП в строку

В большинстве случаев достаточно переопределить только методы Session и SendCmd, реализующие сеанс опроса устройства и отправку команды соответственно. Переопределяя какой-либо метод, можно вызвать метод базового класса, чтобы использовать существующую логику, например:

Библиотека KP.dll содержит класс CommUtils, который содержит вспомогательные методы. Также стоит обратить внимание на полезный класс ScadaUtils из библиотеки ScadaData.dll. Использование данных классов сокращает время разработки и позволяет применить единый подход для множества программных модулей.

Теги: ,