Изменения настроек канала, модуля и протокола

<< Click to Display Table of Contents >>

Navigation:  Интерфейс редактора проекта > Операции в редакторе проекта > Скрипт C# > Примеры использования скрипта C# >

Изменения настроек канала, модуля и протокола

Из скрипта можно изменять элементы из папки Настройки у протоколов, модулей и каналов. Сделать это можно двумя способами:

1.через дочернюю группу Настройки в дереве - GetChildByName("Настройки") и обход Childs с приведением к SettingItem;

2.через свойство Settings у ChannelItem, ProtocolItem, IOModuleItem и других типов (коллекция уже содержит SettingItem).

Далее рассмотрены примеры.

Изменение настроек канала

В скрипте пропишем код, который будет:

находить нужный аналоговый канал (AIO) по заданному пути и обращаться к его дочерней группе Настройки;

изменять значение настройки Тип данных в устройстве;

изменять тип данных настройки Адрес;

выводить в консоль текущее состояние всех настроек канала.

public sealed class Script : ScriptBase

{

public override void DoAction()

   {

      var protocol = (ChannelItem)RootItemModel.GetChildByNamePath("Система.АРМ 1.Протоколы.Modbus TCP 1.ModbusTCP Device 1.AIO 1");  

      var settings = protocol.GetChildByName("Настройки");

 

      foreach (var child in settings.Childs)

       {

          if (child is not SettingItem settingItem)

              continue;

               

          if (settingItem.Name == "Тип данных в устройстве")

           {

               settingItem.InitialValue = settingItem.InitialValue == "BOOL" ? "LINT" : "BOOL";

              WriteConsole("-----------------------------------------------");

              WriteConsole($"После изменения значения: {settingItem.Name} - {settingItem.InitialValue} - {settingItem.ValueType}");

              WriteConsole("-----------------------------------------------");

           }            

          else if (settingItem.Name == "Адрес")

           {

              WriteConsole("-----------------------------------------------");

              WriteConsole($"До изменения типа: {settingItem.Name} - {settingItem.InitialValue} - {settingItem.ValueType}");

               settingItem.ValueType = settingItem.ValueType == "BOOL" ? "LREAL" : "BOOL";

              WriteConsole($"После изменения типа: {settingItem.Name} - {settingItem.InitialValue} - {settingItem.ValueType}");

              WriteConsole("-----------------------------------------------");

           }

          else

           {

              WriteConsole("-----------------------------------------------");

              WriteConsole($"Другие: {settingItem.Name} - {settingItem.InitialValue} - {settingItem.ValueType}");

              WriteConsole($"Свойства:\n{settingItem.Saving}\n{settingItem.Access}");

              WriteConsole("-----------------------------------------------");

           }

       }

   }

}

Вид скрипта в среде разработки:

Izmenenie_nastroek_channal

Изменение настроек протокола

В скрипте пропишем код, который будет:

находить протокол OPC UA по заданному пути и обращаться к настройкам через свойство ProtocolItem.Settings;

изменять значение настройки Чтение архивов;

управлять привязками настроек протокола Архив данных, Архив сообщений и Ссылка на окно для сообщений с архивом данных, архивом сообщений и окном соответственно;

выводить в консоль текущее состояние этих ссылок и результат изменения настройки протокола.

public sealed class Script : ScriptBase

{

public override void DoAction()

   {

      var protocol = (ProtocolItem)RootItemModel.GetChildByNamePath("Система.АРМ 1.Протоколы.OPC UA");

       

      foreach (var settingItem in protocol.Settings)

       {

          if (settingItem.Name != "Чтение архивов")

              continue;

          bool currentValue = bool.Parse(settingItem.InitialValue?.ToString() ?? "false");

           settingItem.InitialValue = (!currentValue).ToString();

          WriteConsole($"{settingItem.Name} - {settingItem.InitialValue}");

          break;

       }

      var newArchive = (ArchiveItem)RootItemModel.GetChildByNamePath("Система.АРМ 1.Архивы.Архив данных 1");

      var newEventsArchive = (EventsArchiveItem)RootItemModel.GetChildByNamePath("Система.АРМ 1.Архивы.Архив сообщений 1");

      var newWindow = (ViewDeclarationInObjectItem)RootItemModel.GetChildByNamePath("Система.АРМ 1.Графический интерфейс.Окна.Окно 1");

     

       

      bool wasLinked = protocol.DataArchiveRef != null;

      if (wasLinked)

       {

           protocol.DataArchiveRef = null;

           protocol.EventsArchiveRef = null;

           protocol.WindowRef = null;

          WriteConsole("Ссылки отключены.");

       }

      else

       {

           protocol.DataArchiveRef = newArchive;

           protocol.EventsArchiveRef = newEventsArchive;

           protocol.WindowRef = newWindow;

          WriteConsole("Ссылки подключены.");

       }

      WriteConsole("архив данных - " + (protocol.DataArchiveRef?.Name ?? "null"));

      WriteConsole("архив сообщений - " + (protocol.EventsArchiveRef?.Name ?? "null"));

      WriteConsole("ссылка на окно - " + (protocol.WindowRef?.Name ?? "null"));

   }

}

Вид скрипта в среде разработки:

Izmenenie_nastroek_channal_1

Смотрите также:

SettingItem

ChannelItem

ProtocolItem