Разработка драйверов
Преимущества 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