Дата и время
Временная логика
Управляйте часами вашего PLC. От точной фиксации времени событий до сложных расчетов времени и преобразования форматов — контролируйте каждую миллисекунду.
Зачем управлять временем в PLC?
Управление временем критически важно для промышленной автоматизации. Оно позволяет точно протоколировать события производства, запускать запланированные задачи обслуживания, рассчитывать время цикла оборудования и синхронизировать распределенные системы по протоколам NTP.
Современные PLC Siemens предлагают расширенные типы данных, такие как DTL (Date and Time Long), которые обеспечивают прямой доступ к отдельным компонентам (год, месяц, день, час) без сложных битовых манипуляций, что значительно упрощает программирование по сравнению с устаревшими форматами DT.
Чтение времени
Доступ к системным и локальным часам
T_CONV — Извлечение системного времени
T_CONVЧто она делает
Извлекает определенные компоненты из значения даты/времени или конвертирует форматы. Это необходимо для получения читаемых часов/минут из необработанной метки времени.
Когда использовать
Когда вам нужно отобразить на HMI только время из полного тега Date_And_Time.
Советы экспертов
Используйте T_CONV для преобразования TOD (Time_Of_Day) в String для удобного логирования.
Убедитесь, что типы входа и выхода совместимы, чтобы избежать ошибок переполнения.
В SCL эта инструкция часто обрабатывается неявно простым присваиванием.
RD_SYS_T — Чтение системного времени
RD_SYS_TЧто она делает
Считывает текущее системное время CPU (UTC). В отличие от RD_LOC_T, оно не включает переход на летнее время или смещение часовых поясов.
Когда использовать
Идеально подходит для внутреннего логирования, где требуется непрерывный, не скачущий эталон времени (позволяет избежать проблем при переходе на летнее/зимнее время).
Советы экспертов
Всегда используйте UTC для хранения в базе данных, чтобы обеспечить глобальную согласованность.
Выход RET_VAL предоставляет информацию о статусе (например, синхронизированы ли часы).
Комбинируйте с RD_LOC_T, если вам нужно отображать как «техническое», так и «человеческое» время.
Арифметика
Расчеты длительности и меток времени
T_ADD — Добавить время
T_ADDЧто она делает
Добавляет длительность (Time или LTime) к определенной точке даты/времени. Она корректно обрабатывает переполнение минут, часов и дней.
Когда использовать
Расчет времени истечения или запланированной точки перезапуска (например, текущее время + 24 часа).
Советы экспертов
Очень полезно для реализации пользовательских сторожевых таймеров с динамической длительностью.
Используйте типы LTime для наносекундной точности на CPU S7-1500.
Если результат превышает максимальную дату (2262 год), CPU устанавливает статус ошибки.
T_DIFF — Разница во времени
T_DIFFЧто она делает
Вычисляет разницу между двумя метками времени и возвращает результат в виде длительности (Time или LTime).
Когда использовать
Измерение точной продолжительности этапа процесса или расчет времени безотказной работы оборудования.
Советы экспертов
Идеально подходит для расчетов OEE (Overall Equipment Effectiveness).
Вычитание большей даты из меньшей возвращает отрицательное значение Time.
На S7-1200/1500 используйте теги DTL для упрощения доступа к компонентам разницы.
Преобразование
Изменение форматов и работа со String
T_CONV — Преобразование DT в DTL
T_CONVЧто она делает
Преобразует устаревший формат DATE_AND_TIME (8 байт) в современный формат DTL или наоборот.
Когда использовать
При сопряжении устаревшего кода или блоков связи с новой оптимизированной логикой S7-1500.
Советы экспертов
Предпочитайте DTL для всех новых проектов, чтобы избежать сложности BCD (Binary Coded Decimal).
Преобразование в DTL позволяет писать «MyTag.MONTH» прямо в коде.
Будьте осторожны с точностью до миллисекунд, которая может быть обрезана в некоторых форматах.
DT_TO_STRING — Сериализация времени
DT_TO_STRЧто она делает
Преобразует значение даты/времени в читаемый формат String. STRING_TO_DT выполняет обратное действие.
Когда использовать
Отправка меток времени в CSV-файл на карту памяти или связь с веб-API.
Советы экспертов
Выходная строка следует формату ISO 8601 (YYYY-MM-DD-HH:MM:SS.ms).
Используйте STRING_TO_DT для разбора дат, полученных из внешней базы данных SQL.
Обратите внимание, что операции со String более ресурсоемки для CPU; используйте их экономно в быстрых циклах.
DATE_AND_TIME против DTL
Выбор правильной временной структуры
| Функция | DATE_AND_TIME (Устаревший) | DTL (Современный) |
|---|---|---|
| Размер | 8 байт | 12 байт |
| Кодирование | BCD (Сложно читать) | Целые числа (Читаются напрямую) |
| Доступ к компонентам | Требует битовых масок | Структурный (Tag.Month) |
| Диапазон | с 1990 по 2089 | с 1970 по 2262 |
| Поддержка S7-1200/1500 | Только для совместимости | Нативная и рекомендуемая |
| Точность | 10 мс | 1 наносекунда |
Часто задаваемые вопросы
В чем разница между системным и локальным временем?
Системное время (RD_SYS_T) — это всегда UTC, обеспечивающее стабильный эталон. Локальное время (RD_LOC_T) настраивается с учетом вашего часового пояса и правил перехода на летнее время (DST), сконфигурированных в свойствах CPU.
Как синхронизировать часы PLC с сервером?
Включите NTP (Network Time Protocol) в конфигурации оборудования CPU. Укажите IP-адрес вашего сервера времени, и PLC автоматически подстроит свои внутренние часы.
Почему мой DATE_AND_TIME показывает странные значения в Hex?
Устаревший DT использует кодировку BCD. Значение 25 в десятичной системе хранится как 16#25 в BCD. Всегда используйте инструкции преобразования или DTL для правильного чтения значений.
Можно ли вычислить разницу между двумя тегами DTL напрямую?
В SCL вы можете просто использовать оператор «-» между двумя тегами DTL. TIA Portal автоматически вызовет инструкцию T_DIFF за вас.