Вопросы по скриптам в Simple-Scada 2

Автор Simple-Scada, 29 января 2016, 15:19:20

Виктор К

#1365
ЦитироватьВ скриптах с типом "Изменились переменные" можно использовать функции IsFirstChange, PrevAsBool, PrevAsInt, PrevAsFloat, PrevAsStr.
Используйте функцию PrevAsBool

Avtovazov

#1366
А как это записать правильно в моем скрипте, мне нужно чтоб переменная К2 поменяла состояние и вернула изначальное?
Код: pascal
begin
if (k1.AsBool = true) and (k2.AsBool = true) then
vrC.Value := vrA.AsSingle -  vrB.AsSingle
end.

Виктор К

#1367
Скрипт изменились переменные на переменную к2. Если предыдущее значение к2=истина, а новое ложь и к1=истина, то выполняем действие.
Код: pascal
begin
  if ((k1.AsBool) and (PrevAsBool) and (k2.AsBool=false)) then
     vrC.Value := vrA.AsSingle -  vrB.AsSingle;
end.

Avtovazov

#1368
Огромное спасибо, это потрясающе!

teplocom

Только, наверное, там где (PrevAsBool), должно быть (k2.PrevAsBool) ?
Или и так будет правильно работать?

Виктор К

#1370
Нет, функция применяется к переменной вызвавшей событие.

https://simple-scada.com/help/script/changed-the-variables.html

teplocom

#1371
Спасибо, наконец понял для себя как с этой функцией правильно работать, буду применять. 
А еще уточнение, как это будет работать, если в списке "Изменилась переменная" будет несколько переменных, а не одна?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

Виктор К

#1372
При вызове "Изменилась переменная" в моменте времени меняется только одна переменная, соответственно на неё и будет вызов скрипта. Если в списке скрипта будет 10 переменных, они все "одновременно" поменяются, скрипт будет вызываться для каждой переменной, т.е. 10 раз.

teplocom

#1373
То есть гарантировать правильное выполнение функции PrevAs, если переменных в списке "Изменилась переменная" будет несколько, нельзя, в таком случае лучше создавать такие конструкции в разных скриптах, в которых переменная будет единственной?

Simple-Scada

#1374
Работает как описал выше Виктор К. Скрипт с типом "Изменились переменные" выполняется при изменении любой переменной из списка. Допустим в списке есть две переменные: vrA и vrB и они изменились. Тогда скрипт будет выполнен два раза. Первый раз для vrA и PrevAs вернёт предыдущее значение переменной vrA. Второй раз для переменной vrB и PrevAs вернёт предыдущее значение переменной vrB. Узнать по изменению какой именно переменной сейчас выполнился скрипт, можно через параметр Varaible. В него помещается та переменная которая вызвала выполнение скрипта. Именно её предыдущее значение возвращает PrevAs.
Код: pascal
begin
  if Variable = vrA then  // если изменилась переменная vrA (а не какая-то другая переменная из списка!)
    if PrevAsInt = 1 then // и её предыдущее значение равно 1, то
    begin
      // делаем какие-то действия
    end;
end.

vpimonov

SimpleScada 2.5.7.0
Задача: найти экземпляры шаблонов.
Есть: TM_List для хранения списка объектов и GetObjectByName, но нет списка имен...
Вопрос1: как получить список вообще всех объектов проекта? Что-то типа function EnumerateObjects() : TM_List;
Вопрос2: на что ориентироваться у объекта для определения принадлежгости к шаблону? В редакторе у экземпляров шаблонов тип TM_TemplateObj, но в скрипте этот тип не доступен (Undeclared identifier "TM_TemplateObj")

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

Simple_Scada

Здравствуйте.

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

vpimonov

#1377
Получил в наследство проект. Навожу порядок в шаблонах, ищу неиспользуемые и удаляю. Похожие привожу к одному "знаменателю". Переименовываю.

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

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

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

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

Simple_Scada

Здравствуйте.

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

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

vpimonov

ЦитироватьМожно создать по одному экземпляру шаблона, задать у них нужное значение подстановки "система" и затем копировать эти экземпляры.
Да, так и сделано. Система1 содержит, например, 20 клапанов (шаблоны). Т.е. систему целиком уже шаблоном не сделать. Теперь я копирую мнемосхему системы и вставляю на вторую страницу клапаны на первой назывались система1_к1...система1_к20. После вставки я получаю переменные система1_к21..система1_к40 (по хорошему нужно переименовывать объекты) и подстановки названиеСистемы=система1. Т.е. у всех клапанов второй системы мне вручную нужно поменять подстановку. Можно выделить все и поменть один раз, но если на мнемосхеме несколько различных шаблонов и расположены они вперемежку можно что-то и пропустить. Усугубляется это тем, что для разных шаблонов разный набор подстановок и где-то кроме кода системы нужно название системы. Это я о том, что накосячить есть где, а проверять ручным перебором.

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

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