Просмотр полной версии : ПЛК100 миллисекунды
leming495
02.12.2015, 18:37
День добрый подскажите пожалуйста новичку.
Есть ПЛК100 Р-М
нужно узнать текущую дату время с точностью до миллисекунд
Если сделать стандартный код(найденный на просторах форума)
TimeAndDate.Day :=0;
TimeAndDate.DayOfWeek :=0;
TimeAndDate.dwHighMsec :=0;
TimeAndDate.dwLowMSecs :=0;
TimeAndDate.Milliseconds:=0;
TimeAndDate.Minute :=0;
TimeAndDate.Second :=0;
TimeAndDate.Hour :=0;
TimeAndDate.Year :=0;
TimeAndDate.Month :=0;
Sys_time.ulHigh :=0;
Sys_time.ulLow :=0;
GetTime (SystemTime:=Sys_Time , TimeDate:= TimeAndDate);
миллисекунды (TimeAndDate.Milliseconds) всегда равны 0
Гарчев Евгений
02.12.2015, 19:10
Миллисекунды необходимо высчитывать из переменной Sys_time.ulLow.
leming495
02.12.2015, 19:46
Спасибо
А значение Sys_time.ulLow начинает отсчет с какого времени ?
Спасибо
А значение Sys_time.ulLow начинает отсчет с какого времени ?
с полуночи (00:00:00 UTC) 1 января 1970 года (четверг)
А подскажите пожалуйста, как лучше эти миллисекунды сконвертировать в число (int,Dint,Lint). Пробовал Dword_to_Dint, получал на выходе совсем не то, что показывает отладчик.
21161
Что-то у меня не получается с 1970г. Получается от момента включения контроллера после долгого выключения(для наглядности в переменные скопировал значения чтоб ровно одно под другим было).
Секунда бежит в 4й позиции слева, то есть прошло всего 1815 секунд.
Причём, вчера выключал и сразу включал контроллер, данные не обнулялись. Сегодня контроллер ночь постоял выключенный и данные о миллисекундах обнулились. И вчера TimeAndDate.dwLowMSecs не были равны Sys_time.ulLow, а сегодня уже равны(за исключением того что Sys_time.ulLow более точно).
Гарчев Евгений
03.12.2015, 13:10
все правильно, я Вас немного обманул )).
Переменные структуры SysTime64 (ulLow и ulHigh) - это время работы ПЛК в мкс от включения. Т.к. после отключения питания программа в ПЛК100 продолжает выполняться до 10мин, эти переменные не обнуляются при кратковременном (менее 10 мин) отключении питания.
Миллисекунды системного времени хранятся в структуре SystemTimeDate, извлечь их можно из переменной dwLowMSec:
mms:=std.dwLowMSecs-(std.dwLowMSecs/1000)*1000;
Спасибо большое за информацию (в том числе и о 10ти минутах) и за пример.
Интересно, сколько мсек выполняется код для получения в строку времени с точностью до мсек
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot