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

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

ООО "БЛС инжинеринг"


ООО "БЛС инжинеринг"

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

Как можно написать скрипт для задачи:
При открытии определённой странице включить по переднему фронту БИТ?

George

Добрый день.
Каким образом можно обработать значение, полученное с ОПС-Сервера и отобразить его в поле?
В настоящий момент приходится использовать 2 переменные - одна получает значение из ОПС-Сервера, другая (виртуальная) получает обработанное значение и выводится на экран.
Т.е. создаю скрипт, где выбираю переменную с ОПС-данными и в скрипте указываю виртуальную переменную и какое значение она должна получить...
 Пример моего скрипта:  vvar1(вирт.перем.) := 20/16384 * Tag1(тег с ОПС).  И эту "vvar1" отображаю на экране.

... и так приходится делать с каждой переменной :(

Есть к-либо более грамотное решение такой задачки?

Спасибо.

Simple-Scada

#708
Цитата: ООО "БЛС инжинеринг" от 12 сентября 2018, 18:32:08Как можно написать скрипт для задачи:
При открытии определённой странице включить по переднему фронту БИТ?
У страницы есть событие "OnEnter" которое выполняется каждый раз, когда пользователь переходит на страницу. Для включения бита переменной нужно использовать функцию SetBit, например:
Код: pascal
begin
  VarName.Value := SetBit(VarName.AsInt, 3, True); // записать 1 (true) в 4 бит переменной "VarName"     
end.

Цитата: George от 12 сентября 2018, 19:03:33Пример моего скрипта:  vvar1(вирт.перем.) := 20/16384 * Tag1(тег с ОПС).  И эту "vvar1" отображаю на экране.
Есть к-либо более грамотное решение такой задачки?
Можно обойтись одним универсальным скриптом, но у вас ведь выполняется линейное изменение переменной, т.е. значение тега просто умножается на число 20/16384 = 0,00122. А значит можно обойтись вовсе без скриптов. Допустим Ваш OPC-тег имеет шкалу 0-100 и нужно умножать его на 0,00122. Тогда откройте его для редактирования в Редакторе и на вкладке "Дополнительные" включите режим масштабирования и рассчитайте визуальный минимум и визуальный максимум. Для этого просто берём текущую шкалу 0-100 и умножаем её на 0.00122. Получаем, виз. минимум: 0 * 0.00122 = 0. Виз. максимум: 100 * 0.00122 = 0.122. Теперь скада будет автоматически выполнять пересчет, причем это работает и в обратную сторону - при записи в OPC.

George

Спасибо за ответ...  Вы сказали, что "...Можно обойтись одним универсальным скриптом..."

Если не затруднит, дайте пример универсального скрипта для моего случая...
Спасибо.

 " Для этого просто берём текущую шкалу 0-100 и умножаем её на 0.00122. Получаем, виз. минимум: 0 * 0.00122 = 0. Виз. максимум: 100 * 0.00122 = 0.122. Теперь скада будет автоматически выполнять пересчет, причем это работает и в обратную сторону - при записи в OPC."

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

ООО "БЛС инжинеринг"


Simple-Scada

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

ЦитироватьСделал все в точности, как было сказано... Отображаются не совсем верные данные...
Напишите что именно не так с результатом? Не хватает знаков после запятой? Может быть результат сильно округлён? Вышлите проект (или пример проекта) на support@simple-scada.com в котором расчеты выполняются неверно, мы исправим, если что-то не так.

George

Прошу прощения.., был не прав... (были вбиты разные цифры для расчета...)
Все работает должным образом, как Вы и сказали.
Спасибо.

alan54

Недавно начал осваивать демо-версию Simple-Scada. Перелопатил все руководства, но не нашел ответа на вопрос такого характера. В проекте я создал переменную vrCounter (счетчик) с архивацией, но каждый раз при запуске проекта он начинает считать с нуля, а хотелось бы с последнего заархивированного значения. Есть наверно простое решение, но в Delphi я новичок. Подскажите, плз, чтобы не изобретать велосипед.

Victor_P.

Цитата: alan54 от 25 сентября 2018, 17:53:22...а хотелось бы с последнего заархивированного значения...
При выходе сохраняете значение в файл или БД, при запуске восстанавливаете значение.

alan54

#715
Спасибо, до этого я додумался сам. Но неужели нет более красивого решения, ведь переменная архивируется. Почему она обнуляется, ведь в скрипте она не переобъявляется?
Код: pascal
begin
  if Field1.Variable.AsInt = 1 then   
    vrCounter.Value := vrCounter.Value +1;
    Field7.Text := IntToStr(vrCounter.Value);
end.     
 


Victor_P.

Подозреваю, что при запуске проекта на сервере все переменные инициализируются, а с retentive переменными симплскада работать не умеет.
Кстати, было бы не плохо добавить свойство retentive переменным и хранить все их значения в каком-то зашифровааном файле в папке проекта.

Simple-Scada

Цитироватьведь переменная архивируется. Почему она обнуляется, ведь в скрипте она не переобъявляется?
Архивация используется для отображения трендов по переменным и не влияет на значение переменной после перезапуска.

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

alan54

Еще вопрос - пытаюсь создать свой отчет в демо-версии, но похоже, что это невозможно. Так?

Simple-Scada

#719
Цитата: alan54 от 27 сентября 2018, 18:26:58Еще вопрос - пытаюсь создать свой отчет в демо-версии, но похоже, что это невозможно. Так?
В двух демо-версиях можно протестировать систему отчетов. В версии DEMO-64 можно построить отчет не более 5 раз после каждого перезапуска сервера скады. В версии DEMO-TIME не более 32 раз. Возможно у Вас отчет просто содержит какие-то ошибки и его не удается построить. Если это так, то Вы должны увидеть соответствующие сообщения о неудачном построении в журнале сервера.