|
<< 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("-----------------------------------------------"); } } } } |
Вид скрипта в среде разработки:

В скрипте пропишем код, который будет:
•находить протокол 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")); } } |
Вид скрипта в среде разработки:

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