Стартовая страница › Форумы › Вопросы без категории › Свойства кнопки (транспаранта). Variable и variableEx
- В этой теме 2 ответа, 3 участника, последнее обновление 1 месяц назад сделано
Mikhail.
-
АвторСообщения
-
30.01.2026 в 10:08 #41789
Ivan_Vit
УчастникЗдравствуйте, подскажите, буду очень признателен!
Из руководства:Если необходимо изменять цвет по биту одной переменной, а скорость анимации по биту другой переменной, то нужно указать в свойстве изображения «Переменная» первую переменную, а в свойстве «Доп. переменная» вторую переменную. Далее, нужно написать универсальный скрипт приведенный ниже и установить его на событие OnDataChange и OnDataChangeEx требуемых изображений:
begin
if Sender is TM_Image then // сначала убедимся, что скрипт вызван объектом «Изображение»
with Sender as TM_Image do // далее будем работать с объектом Sender, как с изображением
begin
// меняем цвет изображения по основной переменной
if GetBit(AsInt, 3) = TRUE then
Color := clGreen
else
Color := clRed;
// меняем скорость анимации изображения по доп. переменной «VariableEx»
if GetBit(VariableEx.AsInt, 1) = TRUE then
AnimSpeed := 10
else
AnimSpeed := 0;
end;
end.Мой случай:
У меня есть две переменные status_36 и status_37, по status_36 по биту 5 сигнал аварии, транспарант( кнопка ) должна гореть красным.
По status_37 по биту 0 приходит сигнал работы, кнопка должна при работе гореть зеленым.
Далее, свойствах кнопки я могу указать основную и доп. переменную, а также могу указать бит и тег, в событиях кнопки есть ondatachange и ondatachangeEx.
Нужно ли в свойствах кнопки вписывать биты, по которым приходит сигнал, если да то как , так как есть одна строка куда указывается бит и одна строка, где указывается тег. А у меня же два бита используются 5 и 0.
Проблема в том , что в свойствах кнопки есть только одно поле «Бит», но у меня два бита в разных переменных. Невозможно указать оба бита в одном поле.Далее, если я правильно понял ( прошу, дайте знать правильно/неправильно понял)
кнопкой(транспарантом) можно управлять полностью через скрипт, при этом настройка будет следующей:
Основная переменная (Variable): status_36
Доп. переменная (VariableEx): status_37
Бит: 0 или оставить пустым (так так как управление полностью через скрипт). Отмечу, что оставить пустым не получается, есть вариант сделать «-1″(что означает не работать с битами). Остается только ставить нуль, но это сомнительно.
Tag: не использую.
Тогда скрипт такой:begin
if Sender is TM_Button then
with Sender as TM_Button do
begin
// Проверяем бит 5 в status_36 (авария)
var alarmBit := 5; // бит для аварии
var workBit := 0; // бит для работы// Получаем значения переменных
var alarmStatus := GetBit(AsInt, alarmBit); // Основная переменная (status_36)
var workStatus := GetBit(VariableEx.AsInt, workBit); // Доп. переменная (status_37)// Определяем цвет
if alarmStatus = TRUE then
States[0].Color := clRed // Авария — красный
else if workStatus = TRUE then
States[0].Color := clGreen // Работа — зеленый
else
States[0].Color := clGray; // Ни аварии, ни работы — серый
end;
end.В целом, мне кажется, работать должно. Основной вопрос заключается в том, а если этих кнопок будет много, то будет ли возможность сделать универсальный скрипт для такого случая ? Чтобы к каждой кнопки не привязывать скрипт, где просто нужно поменять нумера для битов.
30.01.2026 в 11:45 #41793
a80808УчастникКак то сложно…
1. Выбираем нужный бит в канал GetBit()
2. На канал привязываем коллекцию =1 — картинка с зеленой кнопкой, =0 — картинка с красной кнопкой.
3. Если на эту же кнопку нужно нажимать то в в5 ставим на этот же канал выходной с командой, в в6 канал сразу делаем входной/выходнойХотя если у вас Mimic….
02.02.2026 в 10:55 #41806
MikhailМодераторДобрый день!
Упростите, пожалуйста, Ваш вопрос применительно к Rapid SCADA, при необходимости разбив его на отдельные вопросы. -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.