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

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

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

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #375 : 13 Июня 2017, 10:40:06 »
Вам база нужна для чего-то еще, или только для вывода в таблицу? Если только для таблицы, то 24 ячейки проще нарисовать отдельными текстовыми полями и привязать к ним 24 переменных. Тем более все равно вы можете вести тренды по этим полям и/или вывести их архивы в отчетах.

А вам, тогда, надо считать счетчик в начале каждого часа и в конце. А разницу записать в соответствующую переменную.
Скрипт один на всех, но зависимо от часа по GetVariableByName собираем название переменной куда писать разницу.
« Изменён: 13 Июня 2017, 11:28:10 от Teodor »

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #376 : 13 Июня 2017, 11:03:39 »
А можете теперь все то-же расписать, но с условием, что ExtVar может измениться "с той стороны"? Например есть еще один сервер работающий с тем-же регистром и нам надо переключить кнопки в актуальное положение? При том что щелкать по ним могут фактически одновременно. :-\
Для этого достаточно написать обратный универсальный скрипт на событие OnDataChangeEx для кнопок:

Код
begin
  if not (Sender is TM_Object) then Exit;

  with Sender as TM_Object do
    if (Variable <> nil) and (VariableEx <> nil) then
      Value := VariableEx.Value;
end.
Тогда виртуальная переменная будет всегда иметь актуальное значение и работа будет корректной.

В общем выходит лажа. Если вцепить Ех к внутренней переменной все бегает отлично в обе стороны, а вот с ОРС происходит нечто странное. Что именно я пока сказать не готов, т.к. еще не ковырялся в программе контроллера (ее не я собирал), но задавая параметр в лоб, без этих скриптов, он устанавливается. Таким образом, нет, при том, что задаваемое значение вычисляется корректно.

В связи с чем контрольный вопрос. Мы меняем Val, срабатывает скрипт на ее изменение и меняет Ех, которая ОРС и меняется не сразу, а только после подтверждения от сервера, посему скрипт на изменение Ех тоже выполнится не сразу, да? Или все-же он выполниться моментально после присвоения измененного значения ОРС?

Отбой тревоги. Переменной было задано ограничение 0..100

А можно все-же попросить... При создании переменной привязывать ее значение не к 0..100, а все-же к ее реальным рамкам? Ну или хоть дать возможность выбора шкалы по умолчанию в настройках?
« Изменён: 13 Июня 2017, 12:01:33 от Teodor »

emoxristov

  • Пользователь
  • **
  • Сообщений: 53
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #377 : 13 Июня 2017, 17:34:10 »
Загрузить проект, пожалуйста, сделайте это.
посмотрите. Я сделал отдельно кнопки, чтобы не поломать ваши и вывел счетчики, чтобы понятно было что происходит в скрипте. Цифры в Case, это секунды задержки включения кнопок после нажатия на АВТО.
вам надо будет поставить для вашей задержки:
0:
30:
60:
90:


Большое спасибо за вашу помощь.
В этой ситуации, когда у них есть выходы Arduino?
Где можно установить паузу между  кнопок ?
« Изменён: 13 Июня 2017, 18:12:32 от emoxristov »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2996
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #378 : 14 Июня 2017, 08:59:11 »
Напомните почему так работает: VariableEx.Value := VariableEx.Value and ((Mask shl Tag) xor 65535) + (Value shl tag);
А так нет: VariableEx.Value := VariableEx.Value and ((Mask shl Tag) xor 65535) or (Value shl tag);
Потому что сложение (1 + 1 = 10 (единица переносится в следующий разряд)) и операция ИЛИ (1 + 1 = 1) это разные операции.

Цитировать
А можно все-же попросить... При создании переменной привязывать ее значение не к 0..100, а все-же к ее реальным рамкам? Ну или хоть дать возможность выбора шкалы по умолчанию в настройках?
Здесь вся проблема в том, что реальные рамки у разных переменных - разные, поэтому и используется система шкал. Иначе можно было бы обойтись без неё. А вот выбор шкалы по-умолчанию вполне можем добавить. Кстати. вчера мы закончили работу над новой системой присвоений. Теперь ситуация с битами описанная в этом сообщении не будет возникать и писать доп. скрипты не придется.

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #379 : 14 Июня 2017, 09:10:25 »
В этой ситуации, когда у них есть выходы Arduino?
Где можно установить паузу между  кнопок ?
Все так-же. Только вместо внутренних переменных подставьте те что вам надо.

Задержки - это "2:", "4:", "6:"... вместо этого ставьте сколько вам надо. Последняя на 1 больше чтобы выйти из режима.

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #380 : 14 Июня 2017, 09:17:50 »
Напомните почему так работает: VariableEx.Value := VariableEx.Value and ((Mask shl Tag) xor 65535) + (Value shl tag);
А так нет: VariableEx.Value := VariableEx.Value and ((Mask shl Tag) xor 65535) or (Value shl tag);
Потому что сложение (1 + 1 = 10 (единица переносится в следующий разряд)) и операция ИЛИ (1 + 1 = 1) это разные операции.
Именно здесь 1 в первой части исключена т.к. она перед тем вычищена на с AND 0. Посему у нас тут 0+0=0or0 или 0+1=0or1 :) А вообще, проблема была со шкалой в которую вписывалось окончательное значение.

st-legal

  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #381 : 14 Июня 2017, 13:29:53 »

Для решения этого вопроса можно сделать синхронизацию через внутреннюю переменную. Т.е., дано: наша внешняя переменная в которой нужно менять биты. Она называется vrMy. Мы создаем ещё одну внутреннюю переменную с именем vrSync. Связываем обе кнопки с переменной vrSync. Также у этих кнопок в качестве доп. переменной выбираем vrMy. Пишем следующий универсальный скрипт:

Код
begin
  if not (Sender is TM_Object) then Exit;
  with Sender as TM_Object do
    if (Variable <> nil) and (VariableEx <> nil) then
      VariableEx.Value := Value;
end.

Теперь ставим данный скрипт на событие OnDataChange у наших кнопок (причем этот скрипт подойдет для всех подобных кнопок в проекте). Готово. Теперь кнопки работают с внутренней переменной и присвоения выполняются моментально, поэтому проблемы с битами нет. При этом все изменения отправляются во внешнюю переменную.
Добрый всем день. В продолжении темы. Столкнулся с очередной задачей. Вопрос практически такой же только с одной поправкой . Имеется не один модуль а например 10. и нужно нажатием кнопки активировать 1 выход каждого модуля (выхода вытаскиваю из ОРС сервера в виде word, где каждый бит отвечает за свой выход). Как решить такую задачу? Да выхода каждого модуля имеют свой тег соответственно : bout, bout_1, bout_2 и т.д.
« Изменён: 14 Июня 2017, 13:35:11 от st-legal »

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #382 : 14 Июня 2017, 14:26:47 »

st-legal

  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #383 : 14 Июня 2017, 14:47:57 »
Посмотри здесь: http://simple-scada.com/forum/index.php?topic=404.msg3739#new
Если я все правильно понял, то в данном примере каждый элемент управления меняет бит своего тега. А мне нужно 1 кнопкой поменять 1 бит у каждой идентичной переменной

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2996
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #384 : 14 Июня 2017, 14:50:32 »
st-legal, а простое присвоение по событию OnClick в Вашем случае не подходит? Например:

Код
begin
  myVar1.Value := SetBit(MyVar1.Value, 0, TRUE);  // меняем нулевой бит в переменной myVar1
  myVar2.Value := SetBit(MyVar2.Value, 0, TRUE);  // меняем нулевой бит в переменной myVar2
end.

st-legal

  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #385 : 14 Июня 2017, 15:07:47 »
st-legal, а простое присвоение по событию OnClick в Вашем случае не подходит? Например:

Код
begin
  myVar1.Value := SetBit(MyVar1.Value, 0, TRUE);  // меняем нулевой бит в переменной myVar1
  myVar2.Value := SetBit(MyVar2.Value, 0, TRUE);  // меняем нулевой бит в переменной myVar2
end.
Ув. разработчики, в очередной раз огромное человеческое спасибо. Ответы всегда на поверхности

Andrey1883

  • Пользователь
  • **
  • Сообщений: 68
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #386 : 14 Июня 2017, 15:11:29 »
Уважаемые специалисты! со скриптами туго  совсем, только начал разбираться, натолкните на мысль, как организовать архив, где имеется :
 Фактически мультиплексор из клапанов ( производится отбор проб газа из 9 точек на один газоанализатор ), управляет которым контроллер в ручном и автоматическом режиме,Соответственно имеются все переменные с этим связанные...нужно сохранять данные с каждого канала в БД, а затем, выбрав определенный промежуток времени, читать их.. Логично предположить, что сработал клапан 1 - записали значение на выходе в базу данных с меткой времени, сработал клапан 2 - записали значение и тд, а вот как выборку сделать не понятно...отсюда и тренды не подходят, т.к.,к примеру, клапан 3 в ручном режиме открыт может быть дольше, чем в автомате и на графике разрывы будут, что не наглядно и не очень удобно при просмотре..лучше как-то таблицей

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #387 : 14 Июня 2017, 15:41:27 »
Все проще... На всех нужных переменных ставите галку "Архивировать/по изменению" и читаете как работать с системой отчетов :)

emoxristov

  • Пользователь
  • **
  • Сообщений: 53
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #388 : 14 Июня 2017, 18:56:31 »
Teodor все работает спасибо.
Как изменить скрипт, чтобы остановить кнопки ?
Я добавил кнопку, чтобы остановить, но не работает ?
Пожалуйста, помогите мне.
« Изменён: 14 Июня 2017, 21:24:42 от emoxristov »

Andrey1883

  • Пользователь
  • **
  • Сообщений: 68
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #389 : 15 Июня 2017, 09:22:23 »
Все проще... На всех нужных переменных ставите галку "Архивировать/по изменению" и читаете как работать с системой отчетов :)
спасибо) а я тут что-то выдумываю