Разработка логических модулей
Логические модули обладают следующими возможностями:
- Получать текущие, исторические данные и события с максимально возможной скоростью для последующей обработки.
- Записывать данные и события в архивы.
- Перехватывать поступающие на Сервер команды.
- Отправлять команды.
Рассмотрим разработку логической части и пользовательского интерфейса простого модуля, который будет иметь кодовое обозначение ModAbc. Для разработки сложных модулей изучите и используйте в качестве примеров исходный код существующих модулей на GitHub.
Реализация логики
Создайте новый проект на основе шаблона Class Library. Введите наименование проекта ModAbc.Logic
, выберите фреймворк .NET 8.0.
Добавьте зависимости на библиотеки ScadaCommon.dll
, ScadaCommon.Log.dll
и ScadaServerCommon.dll
. Актуальные бинарные файлы этих библиотек можно найти в директории установки Rapid SCADA, либо собрать самостоятельно из исходного кода.
По двойному щелчку в Solution Explorer откройте файл проекта ModAbc.Logic.csproj
и отредактируйте его свойства, как показано ниже.
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>disable</Nullable>
<RootNamespace>Scada.Server.Modules.ModAbc.Logic</RootNamespace>
</PropertyGroup>
Создайте класс ModAbcLogic
и скопируйте код, который приведён ниже. Этот класс реализует логику работы модуля. Обратите внимание, что пространство имён и имя класса должны содержать код модуля ModAbc
. Изучите исходный код базового класса ModuleLogic и интерфейс IServerContext, чтобы узнать о возможностях, доступных при реализации логики модуля.
using Scada.Data.Models;
namespace Scada.Server.Modules.ModAbc.Logic
{
public class ModAbcLogic : ModuleLogic
{
private const int InputChannel = 105;
private const int OutputChannel = 104;
private const int UserID = 11;
private const double Threshold = 10.0;
private bool high = false;
private bool low = false;
public ModAbcLogic(IServerContext serverContext)
: base(serverContext)
{
}
public override string Code => "ModAbc";
public override void OnServiceStart()
{
Log.WriteAction("Модуль ModAbc запущен");
}
public override void OnServiceStop()
{
Log.WriteAction("Модуль ModAbc остановлен");
}
public override void OnIteration()
{
CnlData curData = ServerContext.GetCurrentData(InputChannel);
if (curData.IsDefined)
{
if (curData.Val >= Threshold)
{
if (!high)
{
ServerContext.SendCommand(new TeleCommand(OutputChannel, 1, UserID));
high = true;
}
}
else
{
high = false;
}
if (curData.Val < Threshold)
{
if (!low)
{
ServerContext.SendCommand(new TeleCommand(OutputChannel, 0, UserID));
low = true;
}
}
else
{
low = false;
}
}
}
}
}
Выполните сборку проекта и скопируйте ModAbc.Logic.dll
в директорию модулей Сервера ScadaServer\Mod
Реализация интерфейса
Создайте новый проект на основе шаблона Windows Forms Class Library. Введите наименование проекта ModAbc.View
, выберите фреймворк .NET 8.0.
Добавьте зависимости на библиотеки ScadaCommon.dll
, ScadaCommon.Forms.dll
, ScadaCommon.Log.dll
и ScadaServerCommon.dll
.
По двойному щелчку в Solution Explorer откройте файл проекта ModAbc.View.csproj
и отредактируйте его свойства, как показано ниже.
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>disable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>Scada.Server.Modules.ModAbc.View</RootNamespace>
</PropertyGroup>
Создайте класс ModAbcView
и скопируйте код, который приведён ниже. Этот класс реализует пользовательский интерфейс модуля. Обратите внимание, что пространство имён и имя класса должны содержать код модуля ModAbc
. В нашем примере пользовательский интерфейс модуля фактически отсутствует, тем не менее необходима минимальная реализация интерфейса, чтобы модуль можно было использовать в приложении Администратор. Изучите исходный код базового класса ModuleView, чтобы узнать о доступных возможностях.
namespace Scada.Server.Modules.ModAbc.View
{
public class ModAbcView : ModuleView
{
public override string Name => "Модуль ABC";
public override string Descr => "Простой пример модуля";
}
}
Выполните сборку проекта и скопируйте ModAbc.View.dll
в директорию библиотек Администратора ScadaAdmin\Lib
Запуск модуля
Запустите приложение Администратор или перезапустите его, если оно было открыто. Создайте и откройте копию проекта HelloWorld
, затем в разделе Сервер > Модули найдите разработанный модуль. Убедитесь, что при выборе модуля его описание корректно отображается. Если при отображении описания модуля возникла ошибка, скорее всего, допущена неточность в пространстве имён или имени класса интерфейса модуля.
Включите модуль ModAbc и передайте проект на выполнение. В журнал Сервера будет выводиться информация о запуске и остановке модуля. При переходе значения канала 105 через заданный константой порог 10, будут отправляться команды 0 или 1 на канал 104.