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

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

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

Виктор К

  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1365 : 30 Мая 2022, 09:58:16 »
Цитировать
В скриптах с типом "Изменились переменные" можно использовать функции IsFirstChange, PrevAsBool, PrevAsInt, PrevAsFloat, PrevAsStr.
Используйте функцию PrevAsBool
« Изменён: 30 Мая 2022, 10:05:24 от Simple_Scada »

Avtovazov

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1366 : 30 Мая 2022, 12:15:56 »
А как это записать правильно в моем скрипте, мне нужно чтоб переменная К2 поменяла состояние и вернула изначальное?
Код: (delphi)
begin
if (k1.AsBool = true) and (k2.AsBool = true) then
vrC.Value := vrA.AsSingle -  vrB.AsSingle
end.
« Изменён: 30 Мая 2022, 12:30:14 от Simple_Scada »

Виктор К

  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1367 : 30 Мая 2022, 13:14:27 »
Скрипт изменились переменные на переменную к2. Если предыдущее значение к2=истина, а новое ложь и к1=истина, то выполняем действие.
Код: (delphi)
begin
  if ((k1.AsBool) and (PrevAsBool) and (k2.AsBool=false)) then
     vrC.Value := vrA.AsSingle -  vrB.AsSingle;
end.
« Изменён: 30 Мая 2022, 15:24:10 от Simple-Scada »

Avtovazov

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1368 : 30 Мая 2022, 13:19:03 »
Огромное спасибо, это потрясающе!
« Изменён: 30 Мая 2022, 13:28:05 от Simple_Scada »

teplocom

  • Новичок
  • *
  • Сообщений: 40
  • с чувством уверенности в завтрашнем дне
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1369 : 30 Мая 2022, 13:32:30 »
Только, наверное, там где (PrevAsBool), должно быть (k2.PrevAsBool) ?
Или и так будет правильно работать?

Виктор К

  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1370 : 30 Мая 2022, 13:42:45 »
Нет, функция применяется к переменной вызвавшей событие.

https://simple-scada.com/help/script/changed-the-variables.html
« Изменён: 30 Мая 2022, 14:41:10 от Simple_Scada »

teplocom

  • Новичок
  • *
  • Сообщений: 40
  • с чувством уверенности в завтрашнем дне
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1371 : 30 Мая 2022, 14:00:50 »
Спасибо, наконец понял для себя как с этой функцией правильно работать, буду применять. 
А еще уточнение, как это будет работать, если в списке "Изменилась переменная" будет несколько переменных, а не одна?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
« Изменён: 30 Мая 2022, 14:40:59 от Simple_Scada »

Виктор К

  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1372 : 30 Мая 2022, 14:17:22 »
При вызове "Изменилась переменная" в моменте времени меняется только одна переменная, соответственно на неё и будет вызов скрипта. Если в списке скрипта будет 10 переменных, они все "одновременно" поменяются, скрипт будет вызываться для каждой переменной, т.е. 10 раз.
« Изменён: 30 Мая 2022, 14:41:16 от Simple_Scada »

teplocom

  • Новичок
  • *
  • Сообщений: 40
  • с чувством уверенности в завтрашнем дне
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1373 : 30 Мая 2022, 14:27:59 »
То есть гарантировать правильное выполнение функции PrevAs, если переменных в списке "Изменилась переменная" будет несколько, нельзя, в таком случае лучше создавать такие конструкции в разных скриптах, в которых переменная будет единственной?
« Изменён: 30 Мая 2022, 14:41:22 от Simple_Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1374 : 30 Мая 2022, 15:12:48 »
Работает как описал выше Виктор К. Скрипт с типом "Изменились переменные" выполняется при изменении любой переменной из списка. Допустим в списке есть две переменные: vrA и vrB и они изменились. Тогда скрипт будет выполнен два раза. Первый раз для vrA и PrevAs вернёт предыдущее значение переменной vrA. Второй раз для переменной vrB и PrevAs вернёт предыдущее значение переменной vrB. Узнать по изменению какой именно переменной сейчас выполнился скрипт, можно через параметр Varaible. В него помещается та переменная которая вызвала выполнение скрипта. Именно её предыдущее значение возвращает PrevAs.
Код: (delphi)
begin
  if Variable = vrA then  // если изменилась переменная vrA (а не какая-то другая переменная из списка!)
    if PrevAsInt = 1 then // и её предыдущее значение равно 1, то
    begin
      // делаем какие-то действия
    end;
end.
« Изменён: 30 Мая 2022, 15:22:11 от Simple-Scada »

vpimonov

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1375 : 10 Июня 2022, 08:06:04 »
SimpleScada 2.5.7.0
Задача: найти экземпляры шаблонов.
Есть: TM_List для хранения списка объектов и GetObjectByName, но нет списка имен...
Вопрос1: как получить список вообще всех объектов проекта? Что-то типа function EnumerateObjects() : TM_List;
Вопрос2: на что ориентироваться у объекта для определения принадлежгости к шаблону? В редакторе у экземпляров шаблонов тип TM_TemplateObj, но в скрипте этот тип не доступен (Undeclared identifier "TM_TemplateObj")

Или вообще есть другое решение задачи?

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1178
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1376 : 10 Июня 2022, 17:34:12 »
Здравствуйте.

Получить список всех объектов проекта нельзя. Опишите максимально подробно, какую именно задачу Вы хотите решить, возможно мы сможем предложить какое-либо решение.

vpimonov

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1377 : 14 Июня 2022, 13:26:22 »
Получил в наследство проект. Навожу порядок в шаблонах, ищу неиспользуемые и удаляю. Похожие привожу к одному "знаменателю". Переименовываю.

Если по недосмотру удалить шаблон с экземплярами, то без вопросов удаляются все его экземпляры...
При переименовании шаблона приходится сохранять и переоткрывать проект, иначе слетают значения подстановкок, но только на текущей странице...

Сейчас вышел из ситуации так: в шаблон вставляю здоровенный желтый прямоугольник и просматриваю все окна и страницы с визуальным поиском этого маркера. И так для каждого шаблона.
Проект не большой пару десятков страниц, дюжина окон, десятка три шаблонов.
Пятьдесят кругов по проекту, пара листов А4 и инвентаризация готова. Обычно я такие вещи делаю скриптами и в данном случае хотельсь чего-то подобного.

Эта задача решена, но если есть способ проще, то хочется его узнать.

Следующая задача такая:
На странице (TM_Page) все экземпляры различных шаблонов должны иметь одно определенное значение подстановки "система". Т.е. у шаблона1, шаблона2 и шаблона 3 есть подстановка "система", все экземпляры этих шаблонов должны иметь одинаковое значение.
Как убедиься, что это условие выполнено? Кроме мануального перебора и визуального контроля?
« Изменён: 14 Июня 2022, 15:57:52 от vpimonov »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1178
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1378 : 15 Июня 2022, 10:15:22 »
Здравствуйте.

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

Цитировать
На странице (TM_Page) все экземпляры различных шаблонов должны иметь одно определенное значение подстановки "система". Т.е. у шаблона1, шаблона2 и шаблона 3 есть подстановка "система", все экземпляры этих шаблонов должны иметь одинаковое значение. Как убедиься, что это условие выполнено? Кроме мануального перебора и визуального контроля?
1. Можно создать по одному экземпляру шаблона, задать у них нужное значение подстановки "система" и затем копировать эти экземпляры. В скопированном экземпляре значение подстановки будет сохраняться.
2. Можно использовать вложенные шаблоны, если такой вариант подойдет. При использовании вложенных шаблонов, подстановки с одинаковым именем объединяются. Например: имеется пустой шаблон "A", а также шаблон "B", "C" и "D" с подстановкой "Система". Если в шаблон "A" добавить шаблоны "B", "C" и "D", то у шаблона "A" будет одна подстановка "Система", значение которой будет передано трём шаблонам "B", "C" и "D". Подробное описание работы "Шаблон + шаблонное окно"(что аналогично работе "шаблон + шаблон") можно посмотреть по ссылке.

vpimonov

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1379 : 16 Июня 2022, 08:36:17 »
Цитировать
Можно создать по одному экземпляру шаблона, задать у них нужное значение подстановки "система" и затем копировать эти экземпляры.
Да, так и сделано. Система1 содержит, например, 20 клапанов (шаблоны). Т.е. систему целиком уже шаблоном не сделать. Теперь я копирую мнемосхему системы и вставляю на вторую страницу клапаны на первой назывались система1_к1...система1_к20. После вставки я получаю переменные система1_к21..система1_к40 (по хорошему нужно переименовывать объекты) и подстановки названиеСистемы=система1. Т.е. у всех клапанов второй системы мне вручную нужно поменять подстановку. Можно выделить все и поменть один раз, но если на мнемосхеме несколько различных шаблонов и расположены они вперемежку можно что-то и пропустить. Усугубляется это тем, что для разных шаблонов разный набор подстановок и где-то кроме кода системы нужно название системы. Это я о том, что накосячить есть где, а проверять ручным перебором.

Мне кажется полезной возможность экспортировать текстовое представление всех объектов в текстовый файл... Собственно это я и пытался сделать.

Вложенными шаблонами и шаблонными окнами пользуюсь, удобно, спасибо.