Ну, т.е.
Но, поскольку это происходит в пределах одного цикла, то ничего не происходит. А как это растянуть во времени - не понимаю...Код:VAR Light : INT; (*яркость в %*) Light_temp : INT; (*яркость в % для запоминания*) OUT : INT; (*это то, что передается в лампочку*) EN : BOOL; (* Включалка *) END_VAR ========================================================== Light_temp := Light; IF EN THEN IF Light < 70 THEN Light := Light + 30; Out := Light; ELSIF Light >= 70 THEN Light := Light - 30; Out := Light; END_IF OUT := Light_temp; ==========================================================![]()
Из «моргать» сделать «тушить» можно одной строчкой. А в простейшем случае — одним оператором (SEL).Эта штука, насколько я понял, именно моргает. А мне надо "притушить" и обратно вернуть...
С выше приведённым BLINK_SEQ можно так:Код:output := power - power * 0.3 * BOOL_TO_REAL(dim); (* -30% когда dim = TRUE *)Код:PROGRAM PLC_PRG VAR blinker: BLINK_SEQ; power, output: REAL; END_VAR VAR CONSTANT (* Два коротких, один длинный *) testSequence: ARRAY[0..15] OF TIME := T#200ms, T#200ms, T#200ms, T#200ms, T#500ms; END_VAR blinker(ENABLED := TIME_TO_DWORD(TIME()) MOD 3000 > 100, SEQ := testSequence); (* Раз в три секунды *) output := power - power * 0.3 * BOOL_TO_REAL(blinker.OUT); (* Мигание в тушение на 30% *)
Последний раз редактировалось Yegor; 21.11.2012 в 08:36.
Я выдержку из стандарта рисунком привёл. Не видно разве? Там формальное описание грамматики языка ST, согласно которому перед именем выхода программист может сказать NOT.а где написано про инверсию выхода?Не нашёл ничего подобного в самом стандарте. Вновь обратимся к разделу с грамматикой:Хм и что с того, я например видел в описалове стандарта и такую записьПробуем TOD#20:12 — работает. Так что в данном случае всё соответствует.Код:B.1.2.3.2 Time of day and datePRODUCTION RULES: time_of_day ::= ('TIME_OF_DAY' | 'TOD') '#' daytime daytime ::= day_hour ':' day_minute ':' day_second
Да что вы возитесь с какими-то библиотеками, таймерами? Для отработки любых задержек - можно и без библиотек обходиться, есть стандартная функция TIME(), возвращает время в миллисекундах (с момента включения ПЛК), и этого достаточно. Если нужно отсчитать какую-то задержку с определённого момента - в требуемый момент присваиваете своей переменной текущее значение TIME(), а в последующих циклах проверяете условие: если разность текущего TIME() и той переменной превысила требуемую величину, то задержка закончилась.
Последний раз редактировалось Boris_K; 29.09.2014 в 18:12.
http://i.imgur.com/jUG7VHv.pngА с чего тогда взяли, что цитируете стандарт?Это не присвоение. Это знак определения в форме Бэкуса-Наура. И процитированный кусок — не ST-код, а выдержка из формального описания синтаксиса языка ST вообще.Где Вам приходилось использовать присвоение ::=Я про то, что по стандарту t#20:12 быть не может в отличие от NOT перед обратным присвоением. Короче, то, что не поддерживается t#20:12 — правильно, а что не поддерживается NOT Q => boolVar — неправильно.я разве про tod#xx:xx выложил код, t# - работает?