Добрый день, нарисовал трехходовой клапан из TM_Shape, нужно давать ему цвета по биту переменной(инкремент открытия/закрытия клапана).
Есть переменная STA в ней биты:
:12 Y_C Выходной сигнал на закрытие
:13 Y_O Выходной сигнал на открытие
Сделал скрипты:
Для Круга
begin
if Sender is TM_Object then // проверяем, что Sender это объект
with Sender as TM_Object do // приводим Sender к типу "TM_Object"
begin
if GetBit(AsInt, 12) = TRUE then Color := RGB(139,69,19); // Brown/closed
if GetBit(AsInt, 13) = TRUE then Color := RGB(21,162,39); // Green/opened
end;
end.
При открытии и закрытии правильно дает цвета, но в момент остановки клапана(среднее положение), остается крайний цвет, который был дан. Как сделать, чтобы в
промежуточное положение он не имел цвета? Точнее имел стандартный цвет.
PS. "Снимок2" так должен показывать круг во время среднего положения. "Снимок 4" это так показывает во время среднего положения сейчас.
"Среднее положение" - момент остановки клапана, а не момент открытия/закрытия.
С треугольниками такая же история, но я пока спрашиваю про круг, остальное сам доделаю.
Мне кажется не хватает одной строчки в скрипте, подскажите пожалуйста. Уже перепробовал многое.
"Круг" - показывает инкремент открытия/закрытия клапана
"Треугольник" - показывает открыт/закрыт, только положения 0 или 100
Здравствуйте.
Чтобы не писать отдельные скрипты для каждого клапана и его частей, можно использовать следующий способ:
1. Разбейте целочисленные внешние переменные на биты, как это описано по ссылке (https://simple-scada.com/help/manual/extvarbits.html). Тогда с каждым битом переменной можно будет работать как с отдельной переменной.
2. Переменную бита закрытия укажите в свойстве "Переменная (https://clck.ru/3NfK7b)" фигуры.
3. Переменную бита открытия укажите в свойстве "Доп. переменная (https://clck.ru/3NfK9P)" фигуры.
4. Создайте скрипт (https://simple-scada.com/help/script/via-script-editor.html) с типом события "Универсальный скрипт (https://simple-scada.com/help/script/universal-event.html)" и следующим кодом:
begin
if Sender is TM_Object then // проверяем, что Sender это объект
with Sender as TM_Object do // приводим Sender к типу "TM_Object"
begin
if AsBool then // если основная переменная объекта = true, то
Color := RGB(139, 69, 19) // Brown/closed
else // иначе
if VariableEx.AsBool then // если доп. переменная объекта = true, то
Color := RGB(21, 162, 39) // Green/opened
else // иначе
SetInitialColor; // вернуть изначальный цвет
end;
end.
5. Данный скрипт назначьте на два события объекта (https://simple-scada.com/help/script/general-events.html): "OnDataChange" и "OnDataChangeEx" – это нужно для того, чтобы скрипт выполнялся по изменению двух переменных.
6. Готово.
Данный скрипт универсальный (https://simple-scada.com/help/script/script-types.html)и его можно использовать для всех Ваших фигур, у которых необходимо менять цвет по аналогичным условиям. Так как в проекте предполагается использовать однотипные объекты, то рекомендуем применить систему шаблонов (https://simple-scada.com/help/manual/template.html).