Страница 1 из 1

Как менять один тэг (variable) по нажатию на разные control

Добавлено: 19 дек 2017, 13:15
Simatic
Всем привет!
возник такой затык при освоении LV: как изменять один тэг (local / global variable?) по нажатию на разные LED control, причем сам control должен давать возможность менять цвет в зависимости от переменной?
Идея такая: есть 100 датчиков, которые опрашиваются, и параметры заносятся в таблицу.
Если датчик исправен (есть показания), то индикатор подсвечивается зеленым
Если датчик неисправен (некорректные показания или ноль), то индикатор подсвечивается красным
Если датчик не опрошен (тэг Queried = 0), то индикатор подсвечивается серым

По нажатию на датчик на front panel открывается таблица и из нее делается выборка строки, соответсвующая номеру датчика

В чем затык:
1) Как изменять цвет LED control в одном цикле while для всех 100 индикаторов?
Пока получилось сделать только для одного. В зависимости от значения еще одного control_Mod1_Ch1, вытащив из Led Control Property [Colors4], и подвязав его к массиву (см картинку, не уверен, что этот путь оптимальный). При добавлении второго control_Mod1_Ch2, cо вторым M1_2 ничего не просиходит... Делать 100 отдельных while - явно не вариант

Хотелось бы объединить все control_Modххх_Chххх в массив, но как это сделать? С учтом того, что в дальнейшем это будет не ручной контрол, а выход функции, то есть, вероятно, global variable, по каждому из 100 датчиков?
Если За время WAIT_TIME параметр VAL меньше SET, то OUT = 1 (красный)
Если истекшее время (после нажатия на кнопку "опросить датчики") меньше, чем время WAIT_TIME , то OUT = 2 (серый) и тд

2) как присовоить тегу (или локальной переменной) значение, в зависимости от того, на какой индикатор нажали мышкой?
У каждого контрола есть свойство ControlIndex, он статичный и инкрементируется с добавлением нового контрола на Front panel. Но как сделать выбор межлу этими ControlIndex в зависимости от того, какой LED нажат последним? Плюс еще LED реализован "с залипанием", то есть не сбросится сам, пока не нажмешь его второй раз. А здесь нужно, чтобы нажатие на один LED, автоматически сбрасывало вноль все другие, то есть чтобы одновременно был TRUE только один LED control

Заранее большое спасибо за любые идеи!

Re: Как менять один тэг (variable) по нажатию на разные cont

Добавлено: 19 дек 2017, 15:16
Artem.spb
Зачем насиловать себя и булевские индикаторы?
Вам не нужно 6 цветов, а вы пытаетесь это реализовать.
Есть color box, с его помощью и организуйте цветовую индикацию

и я не понял прикола реками делать сотню индикаторов. Сделайте массив и жизнь станет проще.

Re: Как менять один тэг (variable) по нажатию на разные cont

Добавлено: 19 дек 2017, 16:31
dadreamer
Simatic писал(а):Плюс еще LED реализован "с залипанием", то есть не сбросится сам, пока не нажмешь его второй раз. А здесь нужно, чтобы нажатие на один LED, автоматически сбрасывало вноль все другие, то есть чтобы одновременно был TRUE только один LED control
Может, тогда подойдёт Radio Group? В нём можно заменить переключатели на кнопки или Boolean-индикаторы.