По поводу кнопки - да, понимаю что так можно. Но не всегда нужно писать в саму переменную. Переменная в данном случае аналоговая, нужна для считывания качества, связи, а также для работы с её настройками (границы сообщений и т.д.) по имени.
Суть такая:
Подвязываю на VariableEX кнопки переменную AI_001.
Загружается проект клиента, после полной загрузки производится считывание структуры в контролере всех связанных с AI сигналом значений - настроек аварийных и предупредительных границ. Связанные переменные - AI_001_HH, AI_001_H .. L LL. - Их имена склеиваются в универсальном скрипте и по GetWariableByName, читаются значения, контролируя качество.
Затем производится передача этих значений в допсвойства переменной AI_001 (LimitType и т.д.).
Если всё хорошо - тушу цвет кнопки на серый, если значения в контроллере и в настройках переменной отличаются - подсвечиваю зелёным, если ошибка (например качество) - подсвечиваю красным.
В переменную AI_001 писать самой кнопкой ничего нельзя. Поэтому и подвязываю на VariableEX AI_001. Однако события по переменной VariableEX срабатывают только по изменении значения в AI_001, а это в реальной системе происходит не всегда. Я решал эту проблему внутренней переменной GlobalEvent_1s, которая инвертировала себя раз в секунду и вызывала срабатывание события. Мне бы хотелось подвязать GlobalEvent_1s и завести скрипт на цвет в событие - но Слот второй переменной занят. На основную - тоже нельзя. Ввести AI_001 в виде текста в тэг - не могу (разве что собирать из цифр имя переменной в скрипте, но это уже перебор). Думал ввести в свойство кнопки - подсказка - но для чтения оно из скрипта не доступно.
В общем тут больше дело в том что не хватает слота под переменную, или тэга текстового. Можно взять вместо кнопки текст конечно - но жаль анимации нажатия тогда не будет.
P.S.: проект пришлю в конце рабочего дня.