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

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

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

Victor_P.

  • Пользователь
  • **
  • Сообщений: 69
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #690 : 03 Августа 2018, 13:35:16 »
lipvasko, UTF8Copy
« Изменён: 03 Августа 2018, 14:32:56 от Simple_Scada »

nwb

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #691 : 16 Августа 2018, 11:22:04 »
Добрый день!
Возник вопрос как можно реализовать следующую функционал:
Имеется определённое количество двигателей с каждым из которых связано по 2-3 переменных: ток, частота, температура, например.
Как можно сделать так, что бы была одна универсальная таблица, а параметры отображаемые в ней, зависели от конкретно выбранного насоса?

Олег Печёнов

  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #692 : 16 Августа 2018, 11:59:22 »
Добрый день,

Как при наступлении определенных условий проиграть несколько звуковых файлов подряд?
Код: (delphi)
if temp100.value = 10 then
  begin
    PlayUserSound("brew",'1.ogg',false);
    PlayUserSound("brew",'2.ogg',false);
    PlayUserSound("brew",'3.ogg',false);
  end;
 
при таком написании воспроизводится только файл 3.ogg
« Изменён: 16 Августа 2018, 21:09:19 от Simple-Scada »

Timothy Clement

  • Постоялец
  • ***
  • Сообщений: 149
  • ОАО Борисовский завод "Металлист"
    • Просмотр профиля
    • Полымя
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #693 : 16 Августа 2018, 15:33:19 »
как при наступлении определенных условий проиграть несколько звуковых файлов подряд?
Самый простой вариант - в программе вроде Wave editor соедините все 3 файла в 1, вставьте тишину между звуками нужной длины и сохраните как 1 файл .ogg
« Изменён: 16 Августа 2018, 15:38:55 от Simple-Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1165
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #694 : 16 Августа 2018, 16:59:57 »
Здравствуйте!

Добрый день!
Возник вопрос как можно реализовать следующую функционал:
Имеется определённое количество двигателей с каждым из которых связано по 2-3 переменных: ток, частота, температура, например.
Как можно сделать так, что бы была одна универсальная таблица, а параметры отображаемые в ней, зависели от конкретно выбранного насоса?

Если переменные имеют однотипные имена, то можно, например при клике по насосу подменять переменные в ячейках таблицы на нужные, при помощи функции GetVariableByName. Пример скрипта подмены переменных у объектов можно найти по ссылке. По аналогии можно подменять переменные в ячейках таблицы:

Код: (delphi)
begin
  { берём ячейку на пересечении первого столбца и первой строки и
     привязываем к ней переменную MyVariable }
  Table1.GetCell(0, 0).Variable := MyVariable;
end.
« Изменён: 16 Августа 2018, 17:00:41 от Simple_Scada »

lipvasko

  • Пользователь
  • **
  • Сообщений: 64
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #695 : 20 Августа 2018, 17:30:15 »
Добрый день , опыта по запросам с базы данных нет ,а реализовать надо ,что пробую - особо не выходит, в общем проблема в следующем , необходимо взять 30 последних значений, одного тэга из БД,   со временем  записи  и вставить в таблицу, соответственно значение тега и времени записи. Заранее спасибо.

Victor_P.

  • Пользователь
  • **
  • Сообщений: 69
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #696 : 20 Августа 2018, 20:43:30 »
lipvasko, это вопрос больше по SQL (а конкретно по его реализации в MySQL и документации по нему море), чем по simple-scada.
Думаю, запрос должен выглядеть как-то так:
Код
SELECT date, value FROM table ORDER BY date DESC LIMIT 30
« Изменён: 20 Августа 2018, 20:44:42 от Victor_P. »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2996
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #697 : 21 Августа 2018, 10:07:57 »
Цитировать
необходимо взять 30 последних значений, одного тэга из БД,   со временем  записи  и вставить в таблицу, соответственно значение тега и времени записи.
Здравствуйте. Как было отмечено выше -этот вопрос касается работы с SQL-запросами, а не Simple-Scada. Примеры подобных запросов можно найти в интернете. Быстро проверить выполнение и получить результаты запросов можно через MySQLWorkbench. Когда запрос создан и выполняет свои функции достаточно подставить его в скрипт Simple-Scada. Пример под Вашу задачу:
Код: (delphi)
var
  aQuery: string;
begin
  { формируем SQL-запрос в переменную aQuery }
  aQuery := 'SELECT * FROM (' +
    'SELECT `timestamp`, `value` FROM `trends_data`' +
    'WHERE id=1' +
    'ORDER BY `timestamp` DESC LIMIT 30' +
  ') AS Q ORDER BY `timestamp` ASC;';

  { выполняем запрос aQuery и выводим результат в таблицу Table1 }
  Table1.RunSQL(aQuery, tsSaveFixRow);
end.
В примере производится выборка архивных данных переменной с id=1.

lipvasko

  • Пользователь
  • **
  • Сообщений: 64
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #698 : 27 Августа 2018, 10:54:43 »
Добрый день , начал плотно заниматься скадой  и возникли вопросы
1) Глюк с AND т.е если я использую в условии связку   тэгов  инт=число  анд булл = фалсе ------ ошибка
2) если  я использую связку только по булам    a.value = false and b.value =true  -----ошибка
понимает так   a.value = false and b.AsBool =true
3) и самое не понятное - которое убило у меня пол дня , если два булевых тяга обрабатывать как условия через and , то происходит двойное выполнение условия , а если  их обрабатывать , последовательно , то все нормально
т.е  if  a=true and b= false then    глючит
     if a=true then     работает как надо
       if b =false then


Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2996
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #699 : 27 Августа 2018, 11:02:23 »
Здравствуйте.

Никаких глюков нет, Вы забыли про скобки:
Код: (delphi)
var
  I: Integer;
  B: Boolean;
begin
  if (I = 0) and (B = false) then
  begin

  end;

  if (myVar1.Value = false) and (myVar2.Value = true) then
  begin

  end;
end.
Если скобки не указывать, например: "if a=true and b= false then", то сначала вычислится правая часть выражения, т.е. "true and b=false" (он будет true, если b=false, иначе результат будет false), затем результат сравнится с "a".
« Изменён: 30 Апреля 2020, 15:09:21 от Simple-Scada »

Genrosol

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #700 : 28 Августа 2018, 18:52:25 »
Здравствуйте!

1. Вопрос касательно механизма работы окон в Simple-Scada, в частности примера "Подмены переменных у объектов" https://simple-scada.com/help/script/index.html?varsubs.html.
Допустим у нас имеется несколько клиентов. На одном клиенте пользователь нажал на некий объект "Valve1", при этом произошел вызов окна "ValveWindow" с подменой переменных "Valve1_Cmd", "Valve1_Status", "Valve1_Mode". В это же время на другом клиенте пользователь нажал на объект "Valve2" и вызвал то же окно "ValveWindow" с подменной соответствующих переменных. Что будет отображаться в окнах на каждом клиенте: окно с переменными для "Valve2", или для каждого клиента свой экземпляр окна?

2. Не планируется ли добавить возможность привязки к объектам произвольное количество переменных, а не только основную переменную и дополнительную (подмена переменных у объектов - способ интересный, но усложняет процесс наладки в крупных АСУ ТП).

3. На форуме неоднократно поднимался вопрос о возможности группировки объектов или создания шаблонов. Ведутся ли работы по данному направлению?

Заранее спасибо, очень приятно работать с Simple-Scada!

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1165
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #701 : 29 Августа 2018, 15:27:07 »
Здравствуйте!

Цитировать
Вопрос касательно механизма работы окон в Simple-Scada, в частности примера "Подмены переменных у объектов" https://simple-scada.com/help/script/index.html?varsubs.html.
Допустим у нас имеется несколько клиентов. На одном клиенте пользователь нажал на некий объект "Valve1", при этом произошел вызов окна "ValveWindow" с подменой переменных "Valve1_Cmd", "Valve1_Status", "Valve1_Mode". В это же время на другом клиенте пользователь нажал на объект "Valve2" и вызвал то же окно "ValveWindow" с подменной соответствующих переменных. Что будет отображаться в окнах на каждом клиенте: окно с переменными для "Valve2", или для каждого клиента свой экземпляр окна?
Если второй пользователь нажал объект позже, то у обоих будет отображаться окно с переменными для "Valve2". Подмена переменных происходит одновременно на всех клиентах - в примере имеется соответствующее предупреждение об этом. Поэтому, если клиентов несколько, то использовать подмену переменных следует с  осторожностью или не использовать вообще для избежания ситуаций, подобных описанной Вами.

По вопросам 2,3: мы планируем добавить поддержку шаблонных объектов, функции импорта и экспорта объектов между проектами. Какой-то определенный срок появления таких возможностей сейчас назвать сложно. Возможно, данные функции будут добавлять поэтапно.

Genrosol

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #702 : 29 Августа 2018, 16:09:11 »
Цитировать
Подмена переменных происходит одновременно на всех клиентах - в примере имеется соответствующее предупреждение об этом.
Невнимательно прочитал, так вопроса бы не возникло.
Получается подменять переменные в моем случае нельзя, но и для каждого объекта делать отдельное окно считаю очень затратным.
Попробую создать несколько экземпляров одного и того же окна (ValveWindow1, ValveWindow2 ...) и соответствующие переменные состояния каждого окна (активно окно или не активно). По нажатию на объект скриптом открывать свободное (не активное) окно. В случае, если все окна активны, закрывать одно из окон.

Цитировать
По вопросам 2,3: мы планируем добавить поддержку шаблонных объектов, функции импорта и экспорта объектов между проектами. Какой-то определенный срок появления таких возможностей сейчас назвать сложно. Возможно, данные функции будут добавлять поэтапно.
Главное, что это планируется.
Лично я в Simple-Scada (и не только в ней) очень редко использую готовые решения (например, объект "Заслонка" и его параметры "Ручной режим", "Открывается", "Авария", "Обслуживается"), все равно приходится реализовывать динамику через собственные скрипты (даже для такого объекта, как "Поле"). В связи с этим хотелось бы видеть какие-либо инструменты, позволяющие создавать пользовательские объекты.

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

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #703 : 10 Сентября 2018, 22:04:12 »
Здравствуйте!

Подскажите как можно сделать скрипт под задачу типа калькулятора.
Прилагаю схему для понятия задачи.

Simple-Scada

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

Т.е. результат деления двух локальных переменных нужно записать во внешнюю переменную? Допустим локальные переменные называются vrA (целое) и vrB (вещественное). Переменная с OPC-сервера имеет имя vrOPC (целое). Тогда код будет таким:
Код: (delphi)
begin
  { здесь функция Round используется для округления результата деления до целого числа }
  vrOPC.Value := Round(vrA.Value / vrB.Value);
end.