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

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

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

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    всё можно проще
    За алгоритм спасибо, но это малость не то, что мне надо... В общем, оставил пока так...

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

    По умолчанию

    Раз уж пошла такая пьянка, подскажите, есть ли более простой способ узнать длительность нажатия кнопки, кроме как ловить передний и задний фронты?

    Сейчас у меня это так:
    Код:
    VAR
    	Btn : BOOL;
    	Fr: R_TRIG;
    	Bk: F_TRIG;
    	In: TIME;
    	Out:TIME;
    	Long : TIME;
    END_VAR
    
    Btn := DI1;
    Fr(CLK:=Btn); (* Передний фронт *)
    Bk(CLK:=Btn); (* Задний фронт *)
    
    IF Fr.Q THEN
    	In := TIME();
    END_IF
    
    IF Bk.Q THEN
    	Out := TIME();
    END_IF
    
    Long := Out - In;
    Как-то не изящно смотрится..

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

    По умолчанию

    Угумс:
    Код:
    VAR
    	stopwatch: TON;
    	result: TIME;
    	btn: BOOL;
    END_VAR
    
    IF NOT btn AND stopwatch.IN THEN
    	result := stopwatch.ET;
    END_IF
    stopwatch(IN := btn, PT := DWORD_TO_TIME(NOT 0));
    Ну или вариант для тех, кого в детстве пугали таймерами:
    Код:
    VAR
    	timestamp, result: TIME;
    	btn: BOOL;
    END_VAR
    
    IF btn AND timestamp = T#0s THEN
    	timestamp := TIME();
    ELSIF NOT btn AND timestamp <> T#0s THEN
    	result := TIME() - timestamp;
    	timestamp := T#0s;
    END_IF
    Последний раз редактировалось Yegor; 01.10.2012 в 21:17.

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

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Угумс:
    Вот спасибо!

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

    По умолчанию

    Очередной дурацкий вопрос - как "мигнуть" светом? Мигнуть - это не выключить-включить, а притушить на 30% и вернуть обратно... Или при малой яркости прибавить 30% и вернуть.. Проблема - в скорости цикла. Т.е. если в одном цикле я уменьшаю яркость, а в следующем увеличиваю - лампа не успевает отработать. Пропускать некоторое количество циклов счетчиком - не самый удачный вариант, но другие пока не лезут в голову... А как два раза мигнуть?

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

    По умолчанию

    Я себе для «морзянки» лампочками и зумерами вот чо написал:
    Код:
    FUNCTION_BLOCK BLINK_SEQ (* Custom sequence blinker *)
    VAR_INPUT
    	SEQ: ARRAY [0..15] OF TIME; (* The sequence to blink upon (even are ON times, odd are OFF times) *)
    	ENABLED: BOOL; (* Rising edge starts blinking *)
    END_VAR
    VAR_OUTPUT
    	OUT: BOOL;
    END_VAR
    VAR
    	i: INT;
    	starter: R_TRIG;
    	sequencer: TON;
    END_VAR
    
    starter(CLK := ENABLED);
    IF starter.Q THEN
    	i := 0;
    END_IF
    
    IF ENABLED AND i < 15 THEN
    	sequencer(IN := TRUE, PT := SEQ[i]);
    	IF sequencer.Q THEN
    		i := i + 1;
    		WHILE SEQ[i] = T#0s AND i < 15 DO i := i + 1; END_WHILE
    		sequencer(IN := FALSE);
    	END_IF
    	OUT := (i MOD 2 = 0) AND ENABLED AND SEQ[MAX(0, i - 1)] > T#0s;
    ELSE
    	OUT := FALSE;
    END_IF

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

    По умолчанию

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

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

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

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

    По умолчанию

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

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

    По умолчанию

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

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

Похожие темы

  1. помогите разобраться
    от Барон в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 17.11.2010, 08:30
  2. помогите разобраться
    от a_l_e_x в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 02.07.2010, 16: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

Ваши права

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