Всем привет. Столкнулся с проблемой работы универсального скрипта. Имеются 8 кнопок с фиксацией в SCADA, у всех кнопок одна и та же заданная переменная, каждая кнопка управляет своим битом в этой перемененной. Написал скрипт, который по нажатии кнопки, выдает одно из двух сообщений, в зависимости от того, в каком из состояний находится данная кнопка :
begin
if Sender is TM_Button then
with Sender as TM_Button do
case ActiveState of
0: AddMessage(Now, mkMessage, Hint + ' отключено', TRUE, FALSE);
1: AddMessage(Now, mkMessage, Hint + ' включено', TRUE, FALSE);
end;
end.
У каждой кнопки в событии OnClick указал данный скрипт. В итоге данный скрипт нормально срабатывает по событию только у кнопки которая отвечает за 0-ой бит заданной переменной, у остальных 7-ми кнопок, нажимай не нажимай выходит только одно сообщение - "отключено". Возможно ли, что если кнопки которые управляют битами, применение универсальных скриптов ставиться под вопрос?. Возможно проблема в самом скрипте!?. Поправьте, если я не прав. Спасибо.
Здравствуйте.
Проверка ActiveState для проверки срабатывания кнопки - плохой вариант, т.к. событие клика по кнопке выполняется моментально, но присвоение значения выполняется асинхронно и может потребовать времени. И только после выполнения присвоения будет изменено активное состояние кнопки.
Выявить изменение бита переменной со 100% гарантией можно через событие OnDataChange кнопки с таким кодом:
if Sender is TM_Button then
with Sender as TM_Button do
if GetBit(AsInt, BitNumber) then
AddMessage(Now, mkMessage, Hint + ' включено', TRUE, FALSE)
else
AddMessage(Now, mkMessage, Hint + ' отключено', TRUE, FALSE);
end.
, но проблема в том, что событие OnDataChange будет выполняться при каждом изменении переменной для всех кнопок сразу (ведь все эти кнопки связаны с одной переменной) и будет выдано сразу множество сообщений.
Насколько мы понимаем, описанный Вами скрипт нужен чтобы контролировать действия оператора. Но ведь можно использовать стандартный список действий оператора в меню сообщений (https://simple-scada.com/help/manual/client-message-view.html). В этом списке выводится полная информация обо всех действиях оператора, включая нажатия на кнопки.