Показано с 1 по 5 из 5

Тема: ПЛК160: часы как с бодуна

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

    По умолчанию ПЛК160: часы как с бодуна

    Во-первых, они идут то быстрее, то медленнее с периодом в пять-шесть секунд, а во-вторых, за сутки могут отстать или убежать на две-три минуты. CurTimeEx, если что. Негодую.

  2. #2

    По умолчанию

    На диске есть описание работы с библиотекой SysLibTime. Попробуйте его открыть и посмотреть.
    Тут есть пример работы с библиотекой. Попробуйте посмотреть его:
    http://www.owen.ru/forum/showthread.php?t=11235
    Пример номер 6.

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

    По умолчанию

    У меня так и сделано:
    Код:
    VAR
    	timedate: SystemTimeDate;
    	systime: SysTime64;
    	GetTime: CurTimeEx;
    END_VAR
    
    SysMemSet(ADR(systime), 0, SIZEOF(systime));
    SysMemSet(ADR(timedate), 0, SIZEOF(timedate));
    GetTime(SystemTime := systime, TimeDate := timedate);
    Пробовал и без выпендрёжа задавая нули напрямую как в примере (timedate.Hour := 0) — то же самое.

    Значения смотрю в собственной проге, которая читает данные по модбасу с периодичностью 50 (пятьдесят) мс. Никакие посредники не мешаются, т.к. передаваемое тем же способом и в тех же ответах значение TIME() идёт равномерно.
    Последний раз редактировалось Yegor; 14.02.2012 в 13:35.

  4. #4
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,259

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    . CurTimeEx, если что. Негодую.
    Вот тут - по делу. И в других тоже. Если что.
    Поэтому клиентам вывожу только до минут.

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

    По умолчанию

    Запоминаем время при запуске, а дальше добавляем к нему разницу в TIME(). Получается не совсем точно, но равномерно. Впрочем, точнее и не будет без внешнего источника времени. Можно было бы ещё среднее посчитать, но овчинка выделки не стоит. Кому надо — берите:
    Код:
    FUNCTION_BLOCK SteadyClock
    VAR_INPUT
    	ReInit: BOOL := TRUE;
    END_VAR
    VAR_OUTPUT
    	OutDT: DT;
    	OutDWORD: DWORD;
    	OutSTD: SystemTimeDate;
    END_VAR
    VAR
    	InitUptime: TIME;
    	InitDateTime: DWORD;
    	InitSTD: SystemTimeDate;
    	DummyTime64: SysTime64;
    	GetTime: CurTimeEx;
    	ExtractDate: ExtractDate;
    END_VAR
    
    IF ReInit THEN
    	SysMemSet(ADR(InitSTD), 0, SIZEOF(InitSTD));
    	SysMemSet(ADR(DummyTime64), 0, SIZEOF(DummyTime64));
    	GetTime(SystemTime := DummyTime64, TimeDate := InitSTD);
    	InitDateTime :=
    		DATE_TO_DWORD(PackDate(InitSTD.Year, InitSTD.Month, InitSTD.Day)) +
    		TIME_TO_DWORD(PackTime(InitSTD.Hour, InitSTD.Minute, InitSTD.Second, InitSTD.Milliseconds)) / 1000;
    	InitUptime := TIME();
    	ReInit := FALSE;
    END_IF
    
    OutDWORD := InitDateTime + TIME_TO_DWORD((TIME() - InitUptime)) / 1000;
    OutDT := DWORD_TO_DT(OutDWORD);
    
    ExtractDate(dat := DT_TO_DATE(OutDT), y => OutSTD.Year, m => OutSTD.Month, d => OutSTD.Day);
    OutSTD.Second := DWORD_TO_UINT(OutDWORD MOD 60);
    OutSTD.Minute := DWORD_TO_UINT((OutDWORD / 60) MOD 60);
    OutSTD.Hour := DWORD_TO_UINT((OutDWORD / 3600) MOD 24);
    Используются функции из библиотек SysLibTime, SysLibMem и TimeExp с сайта codesys.ru.
    Последний раз редактировалось Yegor; 17.02.2012 в 14:31.

Похожие темы

  1. встроенные часы сбой
    от oooema в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 10.02.2012, 18:32
  2. часы в контроллере
    от AKHolod в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 08.12.2010, 23:55
  3. плк150 часы
    от Devix в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 21.09.2010, 16:17
  4. плк 150 - не идут часы.
    от Dropp в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 23.06.2010, 10:38
  5. Часы реального вреиени
    от Алексей Борисов в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 28.03.2008, 22:34

Ваши права

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