Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 28

Тема: Таймер RTC помогите разобраться

  1. #11
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,869

    По умолчанию

    Цитата Сообщение от energvk Посмотреть сообщение
    Не знаю, по мне всё равно более читабельнее получается
    Так покажите, получавшийся читабельный код

  2. #12

    По умолчанию

    Признаю, был не прав

  3. #13
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,869

    По умолчанию

    Цитата Сообщение от energvk Посмотреть сообщение
    Признаю, был не прав
    А если из OSCATовского кода удалить вход для сброса и удалить начальную инициализацию, то останется всего
    Код:
    FUNCTION_BLOCK ONTIME
    VAR_INPUT
        IN : BOOL;
    END_VAR
    VAR_IN_OUT
        SECONDS : UDINT;
        CYCLES : UDINT;
    END_VAR
    VAR
        tx: DWORD;
        last : DWORD;
        edge : BOOL;
        ms: DWORD;
    END_VAR
    
    
    tx := TIME_TO_DWORD(TIME()); (* read system time *)
    IF IN THEN
     ms := (tx - last) + ms;     (* add the current milliseconds *)
     IF ms >= 1000 THEN
     seconds := seconds + 1;
     ms := ms - 1000;
     END_IF
     cycles := cycles + BOOL_TO_UINT(NOT edge);
    END_IF
    last := tx;
    edge := in;

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

    По умолчанию

    Так разверните в этом варианте еще код двух используемых ФБ R_TRIG
    Что там разворачивать? Ну, плюс одна переменная, да.
    Код:
    VAR    in, _in, ticktock, _ticktock: BOOL;
    END_VAR
    VAR RETAIN
        uptime, start_count: DWORD;
    END_VAR
    ticktock := TIME_TO_DWORD(TIME()) MOD 1000 > 500;
    uptime := uptime + BOOL_TO_DWORD(in AND ticktock > _ticktock);
    start_count := start_count + BOOL_TO_DWORD(in > _in);
    _ticktock := ticktock;
    _in := in;
    В OSCAT'овском варианте есть функция сброса и нет ошибки накопления. Теоретически, мой код в худшем случае показывает наработку в 1000 раз больше/меньше действительной — это когда устройство включается/выключается на 501 миллисекунде и выключается/включается на 502-й ежесекундно. То есть им можно пользоваться только если вас устраивает ошибка ±1 с на каждом цикле включения.
    Последний раз редактировалось Yegor; 15.03.2015 в 21:55.

  5. #15
    Пользователь Аватар для Эдуард_Н
    Регистрация
    22.09.2014
    Адрес
    Курган
    Сообщений
    1,614

    По умолчанию

    Цитата Сообщение от lara197a Посмотреть сообщение
    FUNCTION_BLOCK Ychet_narabotki
    VAR
    RTC1: RTC; (*Время наработки*)
    R_TRIG_Ust: R_TRIG; (*Команда запуска*)
    Tek_schet_p: DWORD; (*Сигнал пуска*)
    M1: BOOL;
    F_TRIG_S: R_TRIG; (*Команда остановки*)
    TOF_S: TOF; (*таймер задержки остановки*)
    RS1: RS; (*Реле пуска -остановки наработки*)
    Tek_schet_p1: DWORD;
    M2: BOOL;
    R_TRIG_Sch: R_TRIG;
    Tim: DT;
    Narabotka_p: TIME;
    Narabotka_Chas_p: DWORD;
    Narabotka_Chas_p1: DWORD;
    Narabotka_Min_p: DWORD;
    Narabotka_min_p1: DWORD;
    Nt: BOOL;
    END_VAR
    VAR_INPUT
    Tek_schet: DWORD; (*счетчик *)
    In_Time: INT; (*астрономическое время(час дня)*)
    END_VAR
    VAR RETAIN
    Narabotka: DT;
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR_OUTPUT RETAIN
    Narabotka_Min: INT;
    Narabotka_Chas: INT; (*наработка часов за смену*)
    END_VAR

    IF Tek_schet<>Tek_schet_p THEN
    M1:=TRUE;
    ELSE
    M1:=FALSE;
    END_IF;
    R_TRIG_Ust(CLK:= TOF_S.Q, Q=> );
    TOF_S(IN:=M1 , PT:=T#30s , Q=> , ET=> );
    F_TRIG_S(CLK:=TOF_S.Q , Q=> );

    RS1(SET:=R_TRIG_Ust.Q , RESET1:=F_TRIG_S.Q , Q1=> );

    IF In_Time=7 OR In_Time=19 THEN (*Сброс часов*)
    M2:=TRUE;
    ELSE
    M2:=FALSE;
    END_IF;

    R_TRIG_Sch(CLK:=M2 , Q=> ); (*Тригер сброса часов*)

    RTC1(EN:=RS1.Q1 AND NOT R_TRIG_Sch.Q ,
    PDT:=Tim , Q=> , CDT=>Narabotka );

    IF R_TRIG_Sch.Q THEN
    Tim:=DT#1970-01-01-00:00:00;
    Narabotka:=DT#1970-01-01-00:00:00;
    END_IF;

    IF RS1.Q1 AND NOT R_TRIG_Sch.Q THEN
    Tim:=Narabotka;
    END_IF;

    Narabotka_p:=DT_TO_TIME(Tim);
    Narabotka_Chas_p:=TIME_TO_DWORD(Narabotka_p);
    Narabotka_Chas_p1:=Narabotka_Chas_p/3600000;
    Narabotka_Chas:=DWORD_TO_WORD(Narabotka_Chas_p1);

    Narabotka_Min_p:=Narabotka_Chas_p-Narabotka_Chas_p1*3600000;
    Narabotka_min_p1:=Narabotka_Min_p/60000;
    Narabotka_Min:=DWORD_TO_WORD(Narabotka_Min_p1);

    Tek_schet_p:=Tek_schet ;
    Я извиняюсь, что должно быть на входах блока, что бы он начал считать? Или он в эмуляции не работает?

  6. #16
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    Tek_schet (*Сигнал пуска*)
    импульсы на вход поступают.

  7. #17
    Пользователь Аватар для Эдуард_Н
    Регистрация
    22.09.2014
    Адрес
    Курган
    Сообщений
    1,614

    По умолчанию

    Подаю на Tek_schet (*Сигнал пуска*) "1" и ничего.

  8. #18
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    после компиляции и запуска эмуляции "старт" нажимаете?
    Изображения Изображения

  9. #19
    Пользователь Аватар для Эдуард_Н
    Регистрация
    22.09.2014
    Адрес
    Курган
    Сообщений
    1,614

    По умолчанию

    Цитата Сообщение от lara197a Посмотреть сообщение
    после компиляции и запуска эмуляции "старт" нажимаете?
    конечно просто не дождался, минимум ведь минута. Так что извините.
    Последний раз редактировалось Эдуард_Н; 16.03.2015 в 20:45.

  10. #20
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    код скиньте, я проверю и исправлю, если ошибка где.
    Пример из рабочей программы выдернут.
    Много лет работает.

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Похожие темы

  1. Помогите разобраться...
    от kosmas в разделе ПЛК1хх
    Ответов: 85
    Последнее сообщение: 30.09.2014, 09:16
  2. помогите разобраться
    от Барон в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 17.11.2010, 08:30
  3. помогите разобраться
    от a_l_e_x в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 02.07.2010, 16:51
  4. Помогите разобраться...
    от xaker_tm в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 08.02.2010, 17:33
  5. Помогите разобраться !!
    от viking в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 21.11.2007, 14:31

Ваши права

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