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

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

pan2000

#1275
   Здравствуйте.
Цитата: KungLao от 13 сентября 2021, 12:41:58В такой реализации аварийное сообщение о потере связи генерируется постоянно (в течении всего времени отсутствия связи).
Подскажите как реализовать однократное появление сообщения при потере связи и подобное сообщение когда связь восстановилась?
В качестве флажка однократного действия можно использовать свойство ping_plc.color
Код: pascal
begin
  if pingdata.Result then begin
    if ping_plc.color <> clgreen then <действия при восстановлении связи>;
    ping_plc.color := clgreen;
  end
  else begin
    if ping_plc.color <> clred then AddMessage (Now, mkAlarm, 'Отсутствие связи с контроллером', true, false);
    ping_plc.color := clred;
  end;
end.

KungLao

Спасибо, все работает именно так как нужно.

strs

Вопрос к разработчикам.
Имеется несколько 16-битных переменных, которые нужно распаковать на булевы через функцию GetBit. Скажите пожалуйста, как будет рациональнее по использованию вычислительных ресурсов - сделать для каждой по отдельному скрипту "изменились переменные", либо сделать один скрипт и проверять, какая изменилась через "if variable.Name = 'xxx' "?

Simple_Scada

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

Компоненты "Кнопка" и "Флажок" могут работать с битами напрямую - см. свойство "Бит". Поэтому, если требуется работа с битами в данных компонентах, то в этом случае можно обойтись без скриптов. Сообщения также могут работать с битами переменной.

Если требуется распаковать переменные на биты, например для изменения цвета объекта, скорости анимации и других целей, то лучше всего использовать однотипные имена переменных/объектов и один скрипт "Изменились переменные" с применением функций поиска, к примеру как описано в этом сообщении. Данный способ будет наиболее производительным.

strs

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

Подскажите, можно ли перебрать несколько однотипных переменных (объявленных в редакторе переменных) по имени в цикле?

Например, есть переменные temp0, temp1, temp2 ... temp23 типа integer, нужно в цикле for сложить их значения.

Массивы ведь на запись использовать нельзя, или я путаю?

Simple Scada

#1280
Например:
Код: pascal
var
  I: integer;
  Sum: Int64;
  aVar: TM_Variable;
begin
  Sum := 0;
  for I := 0 to 23 do
  begin
    aVar := GetVariableByName('temp' + IntToStr(I));
    if aVar <> nil then
      Sum := Sum + aVar.AsInt;
  end;

  tempSum.Value := Sum;
end.
В результате выполнения данного скрипта, в переменную "tempSum", запишется сумма переменных temp0 ... temp23.

Про массивы см. по ссылке.


strs

#1281
Понял, спасибо!

2s19

Товарищи помогите пожалуйста дилетанту, есть шкала от одного до 100 надо чтобы при изменении на 20 нажималось пять кнопоккрутил вертел шаблонные скрипты никак не могу кнопке значение 1 присвоить жалуется при компиляции. Хотел что то типа этого изобразить. Но пальцы кривые, извилины ровные...
begin
  case Level1.AsInt of                   // если значение переменной поля равно:
    1..20  Button1.Value = 1 else Button1.value= 0;         
    21..40   : Button2.Value = 1 else Button2.value= 0; ; 
    41..60  : Button3.Value = 1 else Button3.value= 0; ;   
    61..80   : Button4.Value = 1 else Button4.value= 0; ; 
    81..100 : Button5.Value = 1 else Button5.value= 0; ;
  end;
end.

Victor_P.

2s19, стандартный компилятор своим заменил? Если нет, то в case никаких else нет и небыло никогда.
Присваивай всем кнопкам 0, а потом по кейсу нужным ставь 1.

Botsmall

Добрый день. Возник вопрос.

Имеется шаблон, в котором есть картинка, анимация которой происходит один раз по нажатию на нее.
Написал универсальный скрипт: при нажатии frame = 0; animspeed = 40;
Свойства картинки: циклиность 0, кадр 0.
Все работает, но проблема в том, что если нажал на изображение, после чего перешел на другую страницу и вернулся обратно,
произойдет 1 цикл анимации, что и логично т.к. при первом нажатии я изменил animspeed = 40;

Как красиво решить проблему?

pan2000

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

Цитата: Botsmall от 07 октября 2021, 16:03:00Все работает, но проблема в том, что если нажал на изображение, после чего перешел на другую страницу и вернулся обратно,
произойдет 1 цикл анимации, что и логично т.к. при первом нажатии я изменил animspeed = 40;
Установить свойство animspeed в 0 можно при уходе со страницы. Сообщить экземпляру шаблона об этом можно посредством переменной, изменяющейся (доп.переменная) или вызывая событие по изменению основной при уходе со страницы.
Пример во вложении. 

Botsmall

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

pan2000

Это не проблема. :)  Можно не использовать переменные изображения, но добавить в шаблон объект связанный с переменной сброса animspeed. Правда для версий не младше  2.5.8.0 См. вложение.

Botsmall

#1288
ЦитироватьЭто не проблема. :)  Можно не использовать переменные изображения, но добавить в шаблон объект связанный с переменной сброса animspeed. Правда для версий не младше  2.5.8.0 См. вложение.
Ого, вот оно как. Понял логику. Спасибо большое.

Botsmall

Еще глупый вопрос. Можно ли скрыть целиком шаблон, встроенный в окно?