This is topic помогите реализовать управление кнопкой... in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
Здравствуйте! Помогите ПЛЗ красиво реализовать следующий "винт": есть одна кнопка. мне нужно этой кнопкой переключать режимы работы... их всего три: "выключен", "автоматический режим", "ручной режим". для этого я выделил одну переменную типа "int" и соответственно мне нужно при каждом нажатии кнопки менять значения с 0 до 2 и далее, при каждом клике 0, 1, 2, 0, 1,...по циклу... и еще не маловажный момент... таких кнопок будет много... и не хотелось бы для кождой кнопки писать "индивидуальную" программу. Можно ли реализовать этот винт в пределах шаблона экрана?
Posted by Vladimir T. (Участник № / Member № 2659) on :
Здравствуйте! Думаю, другого варианта у Вас нет. Придётся добавлять при каждом нажатии "1" и написать программу, ОДНУ, в которой перечислить все аргументы состояний и обнулять каждый при достижении значения "3".
Posted by kurzaev (Участник № / Member № 2922) on :
дело в том, что я уже написал программку... но она почему то не работает... вот ее код: PROGRAM VAR_INOUT bSelect : INT; END_VAR VAR_INOUT rData : REAL; END_VAR VAR_INPUT rAData : REAL; END_VAR VAR_INPUT rMData : REAL; END_VAR VAR_INOUT ARG_000 : INT; END_VAR
case bSelect of 0: rData = 0; 1: rData = rAData; 2: rData = rMData; else bSelect=0; End_case;
END_PROGRAM в итоге (после привязки переменных) у меня не происходит инкримент переменной iSelect... может где нить закралась ошибка?
Posted by kurzaev (Участник № / Member № 2922) on :
если укажете почтовый ящик, вышлю сам проект...
Posted by Vladimir T. (Участник № / Member № 2659) on :
Может быть я Вас не правильно понял, но не проще ли выполнить этот "винт" следующим образом: 1. При каждом нажатии на кнопку к значению аргумента экрана добаляется "1" (функция "Передать значение", "Добавить"). 2. Тогда, текст программы (аргумент экрана bSelect):
PROGRAM VAR_INOUT bSelect : INT; END_VAR
if bSelect == 3 then bSelect = 0; end_if;
END_PROGRAM
Если же подкорректировать Вашу программу, то:
PROGRAM VAR_INOUT bSelect : INT; END_VAR
case bSelect of 0: bSelect = 0; 1: bSelect = 1; 2: bSelect = 2; else bSelect=0; End_case;
END_PROGRAM
Posted by kurzaev (Участник № / Member № 2922) on :
спасибо, щас попробую...
Posted by kurzaev (Участник № / Member № 2922) on :
нехочет ни в какую... :-( может я что не правильно делаю...? 1 создаю шаблон экрана с кнопкой и аргументом для нее. 2 создаю шаблон программы так же со своими аргументами. 3 переношу все в узел и делаю привязки... думаю в этом то и проблема... в привязках... получается, что привязав аргумент экрана к аргументу программы я лишаю возможности обновлять сам аргумент экрана... очевидно, что программа отрабатывает, как надо... а если делаю обновление экранного аргумента через постредника, то вообще инкремент не проходит, т.к. он затирается еще не сформировавшейся временной переменной... как быть?... "яду мне... яду."
Posted by kurzaev (Участник № / Member № 2922) on :
может если у Вас получилось (то есть очевидно, что я делаю что то не провильно) пришлите мне проект на il1@list.ru ПЛЗ...
Posted by M@V (Участник № / Member № 1800) on :
Отослал на мыло.
Posted by kurzaev (Участник № / Member № 2922) on :
Господа! огромное Вам спасибо! я понял в чем моя ошибка... я делал автоматические привязки аргументов после добавления шаблонов в узел... и уже потом привязывал каналы между собой... Еще раз огромное спасибо... Доброго Вам здоровья!!!