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

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

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

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 166
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1500 : 18 Апреля 2024, 17:46:19 »
Здравствуйте.

В данном случае использовать локальную переменную скрипта нельзя – подробнее см. по ссылке (Изменение 1). В Вашем случае, для хранения значения количества продукции за предыдущую минуту нужно использовать внутреннюю переменную. Также, чтобы избежать ошибок, в правой части скрипта, при выполнении математических операций с переменными нужно использовать значение переменной приведенное к нужному типу. Пример исправленного скрипта для события "Начало минуты" или "Таймер" с интервалом в 60 секунд:

Код: (delphi)
begin
  if Dicount2.AsInt  = 0 then
    Speedbotle_min.Value := 0
  else
    Speedbotle_min.Value := Dicount2.AsInt - Speedbotle_temp.AsInt;
  Speedbotle_temp.Value := Dicount2.AsInt;
end.
« Изменён: 18 Апреля 2024, 17:49:47 от Simple_Scada »

Lisov_R

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1501 : 24 Апреля 2024, 04:08:28 »
Добрый день!
Начал только знакомиться с данной SCADA системой. У меня задача вроди бы простая, но прочитав мануал (не исключено что нужное упустил) тривиального решения не нашел. Есть большое количество однотипных агрегатов у которых 8 переменных по которым определяется аварийное и рабочее состояние. Задача заключается в создании шаблона который менял цвет в зависимости от 5 переменных, в шаблонном окне по нажатию кнопки сбрасывались 4 булевские переменные, остальное (пуск/стоп, отображение отдельных параметров) интуитивно понятно. Переменные берутся с OPC-UA на ПЛК.  Я так понимаю что в скриптах нельзя использовать подстановку? Использовать скрипт по изменению переменной из списка тоже не имеет смысл, это уже не будет шаблоном. Создавать класс для агрегата и инициализировать туда все переменные из сервера тоже не вижу смысла когда их более 600. И как создать скрипт чтобы он постоянно выполнялся, не каждую секунду, минуту, час, а постоянно в цикле программы.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1178
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1502 : 24 Апреля 2024, 16:35:43 »
Здравствуйте.

Работа с шаблонами описана по ссылке. Работа с шаблонами из скриптов по ссылке

Если требуется менять цвет объекта по значениям пяти переменных, то проще всего будет создать на контроллере переменную общей аварии и использовать в скада-системе одну переменную вместо пяти. Если из этих переменных формируется состояние агрегата (например: работа, разгон, торможение, авария, предупреждение), то на контроллере следует использовать одну целочисленную переменную, каждое значение которой будет соответствовать требуемому состоянию. Тогда можно будет применить универсальный скрипт. Примеры универсальных скриптов можно найти по ссылке.

Если на ПЛК возможности свести множество переменных в общую аварию (или состояние) нет, то нужно будет свести требуемые переменные в одну в скада-системе. Для этого нужно использовать скрипт с типом события "Изменились переменные". При однотипном наименовании переменных можно создать универсальный скрипт. Вы можете написать нам на почту support@simple-scada.com, вышлем пример такого скрипта.

Цитировать
И как создать скрипт чтобы он постоянно выполнялся, не каждую секунду, минуту, час, а постоянно в цикле программы.
Такой скрипт создать нельзя. Скрипт можно создать только по одному из доступных событий.

pan2000

  • Постоялец
  • ***
  • Сообщений: 171
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1503 : 24 Апреля 2024, 22:36:33 »
  Здравствуйте.

...Есть большое количество однотипных агрегатов у которых 8 переменных по которым определяется аварийное и рабочее состояние. Задача заключается в создании шаблона который менял цвет в зависимости от 5 переменных, в шаблонном окне по нажатию кнопки сбрасывались 4 булевские переменные, ...
Как правильно заметили разработчики Simple-Scada, то что можно следует загонять в ПЛК. Однако, если такой возможности нет, а количество агрегатов большое, то можно использовать шаблоны.
При проектировании шаблона следует стремиться к минимуму подстановок, количеству и объёму скриптов. Собственно подстановки шаблона сводятся к подстановкам в объекты этого шаблона.
Минимальный набор подстановок объекта включает основную и дополнительную переменную (имена переменных), свойства Tag (целое число) и Hint (строка). По изменению переменных возможен вызов соответствующих скриптов.
Для минимизации подстановок переменных следует использовать для каждого агрегата однотипные наборы имен, включающие поле номера агрегата, тогда единственной подстановкой будет только номер агрегата.
Пример построения шаблона с тремя отображаемыми отдельными параметрами и некоторой групповой логикой от 5-ти булевых переменных (упрощенная модель координатного стола: пуск/стоп, выход за границы, координаты):
- для отображения параметров используются три объекта "Поле" с подстановкой основной переменной, скрипт не требуется;
- три из 5-ти булевых переменных используют подстановку в дополнительные переменные объектов "Поле", а две оставшиеся подстановку в переменные объекта "Текст". Т.е. шаблон содержит четыре объекта с однотипными именами TempObj_<i=1..4>.
Булевы переменные по изменению (основной и дополнительной) собираются в вектор скриптом:
Код: (delphi)
var i, j: integer;
begin
  j := SetBit(0, 0, GetTemplateObject('TempObj_1').AsBool);   // младший бит вкл./выкл.
  for i := 1 to 4 do
    with GetTemplateObject('TempObj_' + IntToStr(i)) do
      j := SetBit(j, i, VariableEx.AsBool);              // собрать весь вектор
// интерпретация вектора - по таблице, case - оператором или набором условных операторов
end.
 
Во вложении пример для 4-х моделей агрегатов, которые связаны через встроенный OPC UA сервер собственно с шаблонами.