Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: tech26 от 28 Сентября 2022, 16:27:04

Название: Программное задание границ шкалы
Отправлено: tech26 от 28 Сентября 2022, 16:27:04
В технологической системе имеется датчик, который может физически меняться на другой, с другим диапазоном измерений.
Поскольку измеряется одно и то же (расход газа), то в проекте simple-scada хотелось бы использовать одну и ту же переменную, но для её отображения в виде Уровня просто менять шкалу (граничные значения).
При попытке изменить свойство HighBound возникает ошибка - cannot assign to read-only property.

Можно каким-то другим способом поменять шкалу?
Заранее неизвестно, какой именно тип датчика будет установлен (экспериментальная установка), поэтому хотелось бы именно настраивать систему, а не менять границы шкалы в редакторе. При этом использовать масштабирование нежелательно, поскольку верхнее значение шкалы должно быть визуально в абсолютных единицах измерения, а не в %.

В принципе можно заранее создать несколько шкал, это менее удобно, но возможно.
Как тогда программно назначать/переназначать их для одной и той же переменной?
Название: Re: Программное задание границ шкалы
Отправлено: pavel.sheva от 29 Сентября 2022, 14:02:12
1.Можете что-то глянуть в разделе с проектами, мб что-то похожее найдете для себя там...
2.Для жоских, можете отрисовать свой барграф, с кнопкой ввиде ползунка, и исходя из координат и вх значений написать алгоритм.)
3.А вообще вам в помощь (https://simple-scada.com/help/manual/managing-bounds-var.html).
Название: Re: Программное задание границ шкалы
Отправлено: Simple_Scada от 29 Сентября 2022, 22:52:16
Здравствуйте.

Изменить шкалу переменной (https://simple-scada.com/help/manual/edit-scale.html) из скриптов нельзя. Если диапазоны шкал известны заранее, то можно создать несколько переменных с нужными шкалами и при смене датчика, из скрипта подменять переменную (https://simple-scada.com/help/script/varsubs.html) у компонента "Уровень" на требуемую, например:
Код: (delphi)
begin
  Level1.Variable := MyVariable; // связываем уровень "Level1" с переменной "MyVariable"
end.
Если переменная выводится в тренды, то также можно подменить нужный тренд используя процедуру SetTrendAll (https://simple-scada.com/help/script/settrendall.html?q=settrend). Но на web клиенте подменить тренд не получится.

Цитировать
При попытке изменить свойство HighBound возникает ошибка - cannot assign to read-only property.
Свойство HighBound возвращает конечный индекс массива и никак не связано со шкалой переменной.
Название: Re: Программное задание границ шкалы
Отправлено: teplocom от 14 Октября 2022, 09:03:14
Если значения измерения расхода газа начинаются с нуля (и значения не сильно разные - хотя это больше для трендов условное неудобство/ограничение и Вам Simple_Scada ответили как это обойти в Simple-Scada  8) ), я бы на Вашем месте сделал так:
Есть внешнее приходящее значение: Расход_газа (вероятнее всего преобразованное в цифру значение 4_20мА или 0-10В и т.д.)
Создать внутреннюю переменную и вывести на экран для чтения: РасходSCADA
Создать внутреннюю переменную и вывести на экран для редактирования: k
РасходSCADA=Расход_газа/k
k - зависит от шкалы датчика, а также от max аналого-цифрового значения, приходящего с ПЛК или модуля ввода вывода
k="max аналого-цифрового значения"/шкалу датчика
То есть, условно, если мы знаем "max аналого-цифрового значения", допустим равно 20000:
-для датчика со шкалой 100м3/ч 4_20мА, при расходе 50м3/ч приходит значение с МВВ 10000. k=20000/100=200. РасходSCADA=10000/200=50.00 м3/ч
-для датчика со шкалой 200м3/ч 4_20мА, при расходе 50м3/ч приходит значение с МВВ 5000. k=20000/200=100. РасходSCADA=5000/100=50.00 м3/ч
-для датчика со шкалой 500м3/ч 4_20мА, при расходе 50м3/ч приходит значение с МВВ 2000. k=20000/500=40. РасходSCADA=2000/40=50.00 м3/ч