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

Преимущества Rapid SCADA как платформы при создании драйверов:

  • За соединение (Serial, TCP, UDP) отвечает Коммуникатор. Разработчик реализует кодирование и декодирование пакетов данных.
  • Поддерживается сбор текущих, исторических данных и событий, отправка команд.
  • Встроенный OPC UA-сервер позволяет предоставить данные, полученные от разработанного драйвера, сторонним OPC-клиентам.
  • Готовая система логирования.
  • Унифицированный пользовательский интерфейс для настройки.

Далее рассмотрим разработку логической части и пользовательского интерфейса простого драйвера, который будет иметь кодовое обозначение DrvAbc. Чтобы разработать сложный драйвер, реализующий какой-либо промышленный протокол, изучите и используйте в качестве примеров исходный код существующих драйверов на GitHub (ссылка 1, ссылка 2).

Реализация логики

Создайте новый проект на основе шаблона Class Library. Введите наименование проекта DrvAbc.Logic, выберите фреймворк .NET 8.0.

Добавьте зависимости на библиотеки ScadaCommon.dll, ScadaCommon.Log.dll и ScadaCommCommon.dll. Актуальные бинарные файлы этих библиотек можно найти в директории установки Rapid SCADA, либо собрать самостоятельно из исходного кода.

По двойному щелчку в Solution Explorer откройте файл проекта DrvAbc.Logic.csproj и отредактируйте его свойства, как показано ниже.

<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
  <ImplicitUsings>enable</ImplicitUsings>
  <Nullable>disable</Nullable>
  <RootNamespace>Scada.Comm.Drivers.DrvAbc.Logic</RootNamespace>
</PropertyGroup>

Создайте класс DevAbcLogic и скопируйте код, который приведён ниже. Этот класс реализует логику взаимодействия с устройством. Обратите внимание, что пространство имён и имя класса должны содержать код драйвера DrvAbc. Изучите исходный код базового класса DeviceLogic, чтобы узнать о возможностях, доступных при реализации логики взаимодействия с устройством.

using Scada.Comm.Config;
using Scada.Comm.Devices;
using Scada.Data.Models;

namespace Scada.Comm.Drivers.DrvAbc.Logic
{
    internal class DevAbcLogic : DeviceLogic
    {
        public DevAbcLogic(ICommContext commContext, ILineContext lineContext, DeviceConfig deviceConfig)
            : base(commContext, lineContext, deviceConfig)
        {
            CanSendCommands = true;
            ConnectionRequired = false;
        }

        public override void Session()
        {
            base.Session();
            Log.WriteLine("Сеанс опроса драйвера DrvAbc");
            FinishRequest();
            FinishSession();
        }

        public override void SendCommand(TeleCommand cmd)
        {
            base.SendCommand(cmd);
            Log.WriteLine("Значение команды = {0}", cmd.CmdVal);
            FinishCommand();
        }
    }
}

Создайте класс DrvAbcLogic, код которого показан ниже. Этот класс реализует общую логику драйвера, не связанную с конкретным устройством. Изучите исходный код базового класса DriverLogic, чтобы узнать о доступных возможностях.

using Scada.Comm.Config;
using Scada.Comm.Devices;

namespace Scada.Comm.Drivers.DrvAbc.Logic
{
    public class DrvAbcLogic : DriverLogic
    {
        public DrvAbcLogic(ICommContext commContext)
            : base(commContext)
        {
        }

        public override string Code => "DrvAbc";

        public override DeviceLogic CreateDevice(ILineContext lineContext, DeviceConfig deviceConfig)
        {
            return new DevAbcLogic(CommContext, lineContext, deviceConfig);
        }
    }
}

Пример логической части драйвера готов. Выполните сборку проекта и скопируйте DrvAbc.Logic.dll в директорию драйверов Коммуникатора ScadaComm\Drv

Реализация интерфейса

Создайте новый проект на основе шаблона Windows Forms Class Library. Введите наименование проекта DrvAbc.View, выберите фреймворк .NET 8.0.

Добавьте зависимости на библиотеки ScadaCommon.dll, ScadaCommon.Forms.dll, ScadaCommon.Log.dll и ScadaCommCommon.dll.

По двойному щелчку в Solution Explorer откройте файл проекта DrvAbc.View.csproj и отредактируйте его свойства, как показано ниже.

<PropertyGroup>
  <TargetFramework>net8.0-windows</TargetFramework>
  <Nullable>disable</Nullable>
  <UseWindowsForms>true</UseWindowsForms>
  <ImplicitUsings>enable</ImplicitUsings>
  <RootNamespace>Scada.Comm.Drivers.DrvAbc.View</RootNamespace>
</PropertyGroup>

Создайте класс DevAbcView и скопируйте код, который приведён ниже. Этот класс реализует пользовательский интерфейс для настройки параметров взаимодействия с устройством. Обратите внимание, что пространство имён и имя класса должны содержать код драйвера DrvAbc. В нашем примере пользовательский интерфейс драйвера фактически отсутствует, тем не менее необходима минимальная реализация интерфейса, чтобы драйвер можно было использовать в приложении Администратор. Изучите исходный код базового класса DeviceView, чтобы узнать о доступных возможностях.

using Scada.Comm.Config;
using Scada.Comm.Devices;

namespace Scada.Comm.Drivers.DrvAbc.View
{
    internal class DevAbcView : DeviceView
    {
        public DevAbcView(DriverView parentView, LineConfig lineConfig, DeviceConfig deviceConfig)
            : base(parentView, lineConfig, deviceConfig)
        {
        }
    }
}

Создайте класс DrvAbcView, код которого показан ниже. Этот класс реализует общий пользовательский интерфейс драйвера, не связанный с конкретным устройством. Изучите исходный код базового класса DriverView, чтобы узнать о доступных возможностях.

using Scada.Comm.Config;
using Scada.Comm.Devices;

namespace Scada.Comm.Drivers.DrvAbc.View
{
    public class DrvAbcView : DriverView
    {
        public DrvAbcView()
            : base()
        {
            CanCreateDevice = true;
        }

        public override string Name => "Драйвер ABC";

        public override string Descr => "Простой пример драйвера";

        public override DeviceView CreateDeviceView(LineConfig lineConfig, DeviceConfig deviceConfig)
        {
            return new DevAbcView(this, lineConfig, deviceConfig);
        }
    }
}

Пример части драйвера, отвечающей за пользовательский интерфейс, готов. Выполните сборку проекта и скопируйте DrvAbc.View.dll в директорию библиотек Администратора ScadaAdmin\Lib

Запуск драйвера

Запустите приложение Администратор или перезапустите его, если оно было открыто. Создайте новый проект и в разделе Коммуникатор > Драйверы найдите разработанный драйвер. Убедитесь, что при выборе драйвера его описание корректно отображается. Если при отображении описания драйвера возникла ошибка, скорее всего, допущена неточность в пространстве имён или именах классов интерфейса драйвера.

Создайте линию связи и добавьте устройство, использующее драйвер DrvAbc, на линию. Запустите проект. В журнале линии связи можно наблюдать информацию о работе созданного драйвера:

2024-04-18 13:15:41 Сеанс связи с устройством [3] ABC
Сеанс опроса драйвера DrvAbc