Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Вопросы по скриптам в Simple-Scada 2  (Прочитано 521135 раз)

Daniil

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1440 : 10 Марта 2023, 10:31:13 »
С привязкой переменных и их отображением допустим понятно, однако Вы так и не ответили почему не отрабатывает данный конкретный скрипт с переопределением по триггеру инициализация? А то пока ответ в духе, так не задумывалось - делай по -другому. Да и не очень понятно, почему она будет возвращаться - если по инициализации скрипт отработает (а пока нет), а дальше по изменению переменной тоже (уже отрабатывает). Еще какие-то скрытые скрипты будут это значение возвращать? Не поясните? И кстати у Вас же написано в мануале при любой возможности использовать поле вместо текста, не я это придумал...
« Изменён: 10 Марта 2023, 10:50:29 от Daniil »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1441 : 10 Марта 2023, 11:02:34 »
Цитировать
А то пока ответ в духе, так не задумывалось - делай по -другому.
Вы можете делать как угодно, в том числе так, как не задумывалось, результат будет зависеть от того, что Вы напишете. Мы просто отвечаем как нужно решить задачу о которой Вы спрашиваете. Корректное готовое решение, без лишних скриптов, было описано в нашем первом ответе. Компонент поле выводит значение привязанной к нему переменной, в этом его смысл и причина по которой вместо текста Вы видите число. Скрипты к этому отношения не имеют.

Цитировать
Вы так и не ответили почему не отрабатывает данный конкретный скрипт
Как писали в предыдущем ответе, все скрипты отрабатывают и выполнятся как описаны. Скрипт OnInit выполняется также, как и OnShow, только в разное время. OnInit в момент запуска проекта, а OnShow в момент когда Вы открываете окно. Поэтому OnInit назначает текстовое значение в поле, затем переменная инициализируется и поле автоматически берёт числовое значение переменной. А OnShow заменяет значение на текст после инициализации переменной и вы успеваете увидеть в поле текст, который затем всё равно изменится на значение переменной. Не обязательно знать это, чтобы решить описанную Вами задачу.

Цитировать
Еще какие-то скрытые скрипты будут это значение возвращать?
В скаде не используются скрытые скрипты. Если Вы имеете в виду работу компонентов, то они все работают по-разному. Кнопка автоматически меняет своё состояние в зависимости от значения привязанной переменной, заслонка меняет цвет, поле отображает значение привязанной переменной и так далее. Ничего "скрытого" в этом нет.

Цитировать
И кстати у Вас же написано в мануале при любой возможности использовать поле вместо текста, не я это придумал...
Верно, прочтите внимательно в руководстве, для вывода значения переменной нужно использовать поле, без использования скриптов. Для вывода текста нужно использовать компонент Текст, для вывода изображений компонент "Изображение" и т.д.

Рассмотрите использование других SCADA-систем, возможно Вам лучше подойдут системы в которых компоненты работают по-другому.
« Изменён: 10 Марта 2023, 13:51:31 от Simple-Scada »

TamaTama

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1442 : 17 Марта 2023, 10:02:12 »
Здравствуйте, возникла нетривиальная задача и я не могу, ввиду технической неграмотности, ее решить.
Объект парк емкостей с насосами, клапанами и возможностью загрузки/разгрузки с блокировкой соответствующих клапанов, из одной общей трубы в емкости и из емкостей в другую общую трубу. Нарисовал шаблон выбора загрузки/разгрузки емкости. Управление работает. Встал вопрос текстовых статусов. Так как реализовано ФГУ, то мне нужно вытащить статусы "Работа ФГУ" и "Окончание ФГУ" каждая своим BOOL сигналом. И с учетом что у загрузки и у разгрузки свои теги получаем 4 сигнала. Далее у каждой емкости в блокировке ФГУ есть состояния клапанов других емкостей по битам у загрузки 14 битов у разгрузки 12 битов и соответственно у каждой в битах свой набор клапанов. Сообщения из битов скриптом, как я понимаю, в поле "текст" придется сделать под каждую емкость своё. Тогда по идее нужно уходить от шаблонов и под каждую емкость создать окно управления. Если не прав то поправьте, каким функционалом это возможно сделать. и вопрос как в одном тексте писать статусы 4 тегов, и возможно ли это вообще. Или сделать 2 текстовых поля в одном статусы по битам из скрипта с клапанами, а другой на 4 тега. или сделать 4 текста один на одном каждый со своим тегом и как ты выключать остальные, когда висит первый? Надеюсь хоть что нибудь понятно)

pan2000

  • Постоялец
  • ***
  • Сообщений: 216
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1443 : 20 Марта 2023, 06:10:58 »
   Здравствуйте.
... Тогда по идее нужно уходить от шаблонов и под каждую емкость создать окно управления...
Шаблон можно использовать для вывода списка произвольных сообщений. Во вложении на первой странице примеры двух шаблонов вывода списка.
Один шаблон используется для вывода списка активных сообщений, соответствующие биты которых установлены в 1 (например, "Авария насоса").
Второй шаблон по значению бита выводит один из двух вариантов сообщения ("Клапан закрыт" - "Клапан открыт").

Для Вашего примера необходимо определить правила отображения, которые можно сформулировать только по исходной информации:
- структура регистров (существенно например, если состояние клапанов не бинарное, а 2-х и более битовое. Т.е. открыт-промежуточное/открывается/закрывается-закрыт-авария и только одно не блокирует ФГУ);
- логика ФГУ (возможные состояния 4-х битового поля статусов ФГУ, порядок перехода по состояниям по действиям оператора и автоматическим изменениям состояния всего объекта);
- что необходимо отображать (общая мнемосхема, страница для каждой емкости, окна. Минимально-достаточное количество информации для оператора).

На второй странице примера еще один шаблон в предположении что:
- состояние своих клапанов блокировки запрещает возможность пуска своей операции (делает невидимой кнопку пуска операции);
- просмотр списка состояния по требованию оператора (нажатие кнопки) и раздельно для операций Загрузки и Разгрузки;
- состояние клапана - 1 бит;
- отображаются только аварийные состояния клапанов.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1444 : 20 Марта 2023, 10:39:18 »
Здравствуйте.

Цитировать
мне нужно вытащить статусы "Работа ФГУ" и "Окончание ФГУ" каждая своим BOOL сигналом. И с учетом что у загрузки и у разгрузки свои теги получаем 4 сигнала. Далее у каждой емкости в блокировке ФГУ есть состояния клапанов других емкостей по битам у загрузки 14 битов у разгрузки 12 битов и соответственно у каждой в битах свой набор клапанов.
Проще всего будет добавить необходимые проверки на контроллере и свести указанные биты в одну переменную статуса, значения которой будут соответствовать статусам, например: 1 - Статус 1, 2 - Статус 2 и т.д. Далее, полученную переменную можно использовать в скада-системе. Если по каким-то причинам на контроллере это сделать невозможно, то можно попробовать реализовать это через скрипты, проверяя состояния требуемых битов и формируя общую переменную статуса.

pan2000

  • Постоялец
  • ***
  • Сообщений: 216
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1445 : 23 Марта 2023, 18:34:11 »
     Здравствуйте.
... у каждой емкости в блокировке ФГУ есть состояния клапанов других емкостей по битам у загрузки 14 битов у разгрузки 12 битов и соответственно у каждой в битах свой набор клапанов.
  Шаблон позволяет выводить список сообщений по значению поля непосредственно в переменных, без сведения полей в одну переменную. Сообщения собраны в группы. Управление группами предусматривает вывод одной группы или запрет вывода. Пустые сообщения не выводятся.
  Подстановка сообщения включает имя переменной, маску поля (в т.ч. и для несмежных битов поля), номер группы и набор сообщений, разделенных символом /. Шаблон не требует заполнения всех подстановок для сообщений, просмотр ведется в пределах максимального числа сообщений по подставленным переменным.
  Предполагается, что непустое сообщение указывает на блокировку и наличие хотя бы одного такого сообщения в группе устанавливает флаг блокировки группы.
Пример во вложении.

TamaTama

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1446 : 14 Апреля 2023, 10:35:58 »
Всем здравия! Очередной вопрос. Как переделать скрипт для работы от доппеременной Ex. На основной переменной значение давления, а на доп статусы границ. и не работает адекватно.

Код: (delphi)
procedure ChangeField(AFontColor, AColor, aFlashColor: Cardinal);
begin

  (Sender as TM_Field).FontColor := AFontColor;    // цвет текста
  (Sender as TM_Field).Color := AColor;            // цвет фона
  (Sender as TM_Field).FlashColor := aFlashColor;  // цвет мигания
end;

begin
  if not (Sender is TM_Field) then Exit;  // если скрипт вызван не объектом Поле, то прерываем выполнение
  case (Sender as TM_Field).AsInt of      // если значение переменной равно:
    0    : ChangeField(clGreen, ($BAFFFF), clNone);        // активен бит 0 Норма
    1    : ChangeField(clBlack, clDarkSalmon, clNone);         // активен бит 1 Выход за предупредительную. Квитировано
    2    : ChangeField(clBlack, clForestGreen, clDarkSalmon);  // активен бит 2 Выход за предупредительную снизу
    3    : ChangeField(clBlack, clForestGreen, clDarkSalmon);  // активен бит 3 Выход за предупредительную сверху
    4    : ChangeField(clGreen, clFireBrick, clGreen);          // Выход за аварийную. Квитировано
    5    : ChangeField(clBlack, clYellow, clFireBrick);        // Выход за аварийную снизу
    6    : ChangeField(clBlack, clYellow, clFireBrick);        // Выход за аварийную сверху

  else
    ChangeField(clBlack, clGray, clNone);
  end;
end.
« Изменён: 14 Апреля 2023, 10:51:41 от Simple Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1447 : 14 Апреля 2023, 10:54:04 »
Здравствуйте.

Для обращения к доп. переменной используйте свойство "VariableEx", например:
Код: (delphi)
case (Sender as TM_Field).VariableEx.AsInt of

При этом, для работы с доп. переменной скрипт должен быть назначен на событие OnDataChangeEx.

TamaTama

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1448 : 16 Апреля 2023, 16:29:50 »
Я так и делал, только точку забыл, потому и не компилилось. Спасибо.
« Изменён: 16 Апреля 2023, 17:15:44 от Simple-Scada »

lipvasko

  • Пользователь
  • **
  • Сообщений: 65
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1449 : 25 Апреля 2023, 16:04:31 »
 Добрый день, можно с помощью скады  отправлять и получать OLE  запросы по типу таких
Описание методов для OLE-подключения
Имя сервера для программного доступа к методам и свойствам: Controller.ScAuto
В стандартной поставке программа экспортирует следующие методы:
GetWeight(AdrTerm,ChannelN) - получить значение веса БРУТТО;
GetWeightNetto(AdrTerm,ChannelN) - получить значение веса НЕТТО;
SetNull(AdrTerm,ChannelN) - обнулить показания терминала(установка нуля)
GetStatus(AdrTerm,ChannelN) - получить текущий статус (возвращает -5002 когда вес стабилен
В случае возникновения нестандартных ситуаций, методы могут возвращать следующие
значения:
1. -5000 и -5001 - «Терминал не обнаружен» и «С терминалом нет связи» соответственно.
Справедливо для всех методов;
2. -5002 - «Команда выполнена» для всех методов, «Вес стабилен» для метода GetStatus;
3. -5003 - «Выход за границы диапазона» для метода GetCount, «Вес не стабилен» для метода
GetStatus;
4. -5005 - ошибочный вызов метода
и как это будет выглядеть ,пример скрипта , если можно.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1450 : 25 Апреля 2023, 17:21:25 »
Здравствуйте.

Да, это возможно. Вот пример скрипта на событие OnClick кнопки:
Код: (delphi)
var
  aController: Variant;
  aTerminalN: Integer;
  aTerminalAddress: Integer;
  aChannelNumber: Integer;
begin
  aController := CreateOleObject("Controller.ScAuto");  // создаем OLE-объект
  try
    aChannelNumber := 1;    // здесь нужно указать реальный номер канала
    aTerminalN := 1;        // здесь нужно указать реальный номер терминала
    aTerminalAddress := aController.GetTerminalAddress(aChannelNumber, aTerminalN);  // получаем адрес терминала
    Text1.Text := aController.GetStatus(aTerminalAddress, aChannelNumber);  // вызываем метод GetStatus и выводим результат в компонент Text1
  finally 
    aController := Unassigned;  // освобождаем объект
  end;
end.
Но учтите, что для работы с OLE-объектами может потребоваться запуск сервера скады от имени администратора. Также различные сбои в работе OLE-объектов могут отразиться на работе сервера скады и приостановить выполнение других скриптов пока выполняются методы OLE-объекта.
« Изменён: 15 Октября 2024, 09:32:03 от Simple-Scada »

ACHE

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1451 : 17 Мая 2023, 12:35:24 »
Здравствуйте.
С ОРС сервера берем переменную типа IntegerArray. Массив содержит коды нештатных ситуаций прибора в виде "00, 01, 02, 03, 04, ...,29". Каждое число означает какую-то ошибку. Как в массиве найти определенное число в независимости от его положения?
Нужно при наличии в массиве чисел, например, 00, 06, 08, 23 как одновременно так и по отдельности выдать аварийное сообщение.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1452 : 18 Мая 2023, 21:30:31 »
Здравствуйте.

Доступные свойства для работы с внешней переменной-массивом и пример скрипта прохода по элементам массива можно посмотреть в этом сообщении. Можно создать скрипт с типом события "Изменились переменные" и в список скрипта добавить переменную-массив (как это описано в инструкции). После этого скрипт будет вызываться каждый раз, когда переменная-массив изменилась. Далее можно проходить по элементам массива, выполнять проверку на соответствие нужным значениям(00, 06, 08, 23) и при совпадении выводить сообщения с помощью процедур AddMessage или AddMessageToGroup.

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1453 : 23 Июля 2023, 10:50:33 »
Здравствуйте!!! Уважаемые! нежна помощь. Необходимо поворачивать объект по  свойству angle с изменяемой скоростью вращения и углом и с анимацией поворота, то есть от угла 0 до угла 90 объект должен пройти все градусы за определенное время. С углом проблем нет. А вот со скоростью есть,  ни как не пойму как реализовать. Скрипт будет выполнятся по изменению переменной.   
« Изменён: 23 Июля 2023, 11:22:45 от deldemo »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1454 : 25 Июля 2023, 10:03:09 »
Здравствуйте.

Выполнять изменение угла объекта можно по изменению переменной или в скрипте "Прошла секунда". При этом скорость изменения угла будет зависеть от частоты выполнения скрипта. Например, можно при каждом изменении переменной или каждую секунду поворачивать объект на заданное число градусов. Но мы не рекомендуем использовать подобные анимации поворота, лучше по изменению переменной сразу поворачивать объект на требуемый угол, без анимации поворота.