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

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

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #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

Ваши права

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