Открываешь журнал событий ПЛК или экран панели — а там 1 января 1970 года. Завод ещё не построили, контроллер не выпустили, а авария уже зарегистрирована 😄
Откуда взялась эта дата?
Для программы дата может быть обычным числом: количеством секунд, прошедших с выбранного момента.
В Unix точкой отсчёта стало 1 января 1970 года, 00:00:00 UTC:
• 0 — начало 1970 года. • 3600 — прошёл один час. • 86400 — наступило 2 января.
Так удобнее сравнивать временные метки и вычислять интервалы.
Но сначала было ещё интереснее.
В раннем Unix время отсчитывали с 1 января 1971 года, причём в долях секунды — по 1/60.
Хранили счётчик в 32 битах. Его диапазона хватало примерно на… 2,5 года.
Разработчикам приходилось переносить начало отсчёта. В 1973 году перешли на целые секунды и закрепили начало эпохи в 1970 году. Это решение пережило поколения компьютеров.
Как эта дата добралась до ПЛК?
Такой формат используют и в промышленной автоматизации. Например, в CODESYS тип DATE_AND_TIME хранит число секунд с начала 1970 года.
Поэтому ноль в переменной времени отображается вполне конкретной датой — 01.01.1970.
Панель может ждать актуальное время, но получить сброшенное или ещё не обновлённое значение. Она честно преобразует ноль в дату — и отправляет журнал событий на полвека назад.
Увидели 1970 год? Не спешите менять батарейку.
Сначала разберитесь:
• Сбились ли часы самого контроллера? • Успешно ли выполнено чтение времени? • Не сбрасывается ли переменная программой? • Получает ли панель актуальную временную метку?
У разных платформ и форматов даты точки отсчёта отличаются. Но если используется отсчёт от 1970 года, такая дата — хороший повод поискать, откуда пришёл ноль.
И небольшой сюжетный поворот: классический счётчик секунд в 32-битном целом со знаком достигает предела в 2038 году. Поэтому важен не только правильный часовой пояс, но и формат хранения времени.
Иногда путешествие в прошлое начинается с одной обнулённой переменной.
#кип #асутп #плк #автоматизация #программирование #пнр #завод
Фриланс инженер ТГ @Freelanceforengineer