Страница 8 из 9 ПерваяПервая ... 6789 ПоследняяПоследняя
Показано с 71 по 80 из 86

Тема: Помогите разобраться...

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь
    Регистрация
    13.08.2012
    Адрес
    Питер
    Сообщений
    127

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Я себе для «морзянки» лампочками и зумерами вот чо написал:
    Круто, конечно, но малость не то. Эта штука, насколько я понял, именно моргает. А мне надо "притушить" и обратно вернуть...

    Генератор из util.lib вроде как больше подходит, но там не задать начальные значения, и как остановить его не понял...

  2. #2
    Пользователь
    Регистрация
    13.08.2012
    Адрес
    Питер
    Сообщений
    127

    По умолчанию

    Ну, т.е.

    Код:
    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;
    ==========================================================
    Но, поскольку это происходит в пределах одного цикла, то ничего не происходит. А как это растянуть во времени - не понимаю...

  3. #3
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Эта штука, насколько я понял, именно моргает. А мне надо "притушить" и обратно вернуть...
    Из «моргать» сделать «тушить» можно одной строчкой. А в простейшем случае — одним оператором (SEL).

  4. #4
    Пользователь
    Регистрация
    13.08.2012
    Адрес
    Питер
    Сообщений
    127

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Из «моргать» сделать «тушить» можно одной строчкой. А в простейшем случае — одним оператором (SEL).
    Что-то я как тот доцент... Недопонял... Нельзя ли поподробнее???

  5. #5
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Код:
    output := power - power * 0.3 * BOOL_TO_REAL(dim); (* -30% когда dim = TRUE *)
    С выше приведённым BLINK_SEQ можно так:
    Код:
    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.

  6. #6
    Пользователь
    Регистрация
    13.08.2012
    Адрес
    Питер
    Сообщений
    127

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Код:
    output := power - power * 0.3 * BOOL_TO_REAL(dim); (* -30% когда dim = TRUE *)
    С выше приведённым BLINK_SEQ можно так:
    Код:
    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% *)
    Огромное спасибо! Буду пробовать...

  7. #7
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    а где написано про инверсию выхода?
    Я выдержку из стандарта рисунком привёл. Не видно разве? Там формальное описание грамматики языка ST, согласно которому перед именем выхода программист может сказать NOT.
    Хм и что с того, я например видел в описалове стандарта и такую запись
    Не нашёл ничего подобного в самом стандарте. Вновь обратимся к разделу с грамматикой:
    Код:
    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
    Пробуем TOD#20:12 — работает. Так что в данном случае всё соответствует.

  8. #8

    По умолчанию

    Да что вы возитесь с какими-то библиотеками, таймерами? Для отработки любых задержек - можно и без библиотек обходиться, есть стандартная функция TIME(), возвращает время в миллисекундах (с момента включения ПЛК), и этого достаточно. Если нужно отсчитать какую-то задержку с определённого момента - в требуемый момент присваиваете своей переменной текущее значение TIME(), а в последующих циклах проверяете условие: если разность текущего TIME() и той переменной превысила требуемую величину, то задержка закончилась.
    Последний раз редактировалось Boris_K; 29.09.2014 в 18:12.

  9. #9
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    А с чего тогда взяли, что цитируете стандарт?
    http://i.imgur.com/jUG7VHv.png
    Где Вам приходилось использовать присвоение ::=
    Это не присвоение. Это знак определения в форме Бэкуса-Наура. И процитированный кусок — не ST-код, а выдержка из формального описания синтаксиса языка ST вообще.
    я разве про tod#xx:xx выложил код, t# - работает?
    Я про то, что по стандарту t#20:12 быть не может в отличие от NOT перед обратным присвоением. Короче, то, что не поддерживается t#20:12 — правильно, а что не поддерживается NOT Q => boolVar — неправильно.

  10. #10
    Пользователь
    Регистрация
    13.08.2012
    Адрес
    Питер
    Сообщений
    127

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    да легче простого, ВЫ поставили импульсный тригер и выставили условие по его выходу, а если внутрь условия программа не забирается, то и выполнять в теле условия ни чего не будет, так что таймер внутри ИФа стоит без дела
    Дак в том то и суть, что внутрь IF забирается. Проверял тестовой переменной. Просто TOF как бы "подвисает" о включенном состоянии- т.е. CLK и Q остаются в состоянии TRUE. А почему такое происходит - загадка...

Страница 8 из 9 ПерваяПервая ... 6789 ПоследняяПоследняя

Похожие темы

  1. помогите разобраться
    от Барон в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 17.11.2010, 08:30
  2. помогите разобраться
    от a_l_e_x в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 02.07.2010, 15:51
  3. Помогите разобраться...
    от xaker_tm в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 08.02.2010, 17:33
  4. ТРМ 12, помогите разобраться.
    от SEREG@ в разделе Эксплуатация
    Ответов: 3
    Последнее сообщение: 12.01.2009, 14:21
  5. Помогите разобраться !!
    от viking в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 21.11.2007, 14:31

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •