TIA Portal 指令

日期和时间
时间逻辑

掌握 PLC 的时钟。从精确的事件时间戳到复杂的时间计算和格式转换,控制每一毫秒。

为什么在 PLC 中管理时间?

时间管理对于工业自动化至关重要。它可以实现生产事件的精确记录、触发预定的维护任务、计算机器循环时间以及通过 NTP 协议同步分布式系统。

现代 Siemens PLC 提供了像 DTL (Date and Time Long) 这样的高级数据类型,它可以直接访问单个组件(年、月、日、小时),而无需进行复杂的位操作,与传统的 DT 格式相比,极大地简化了编程。

读取时间

访问系统和本地时钟

T_CONV — 系统时间提取

T_CONV

功能说明

从日期/时间值中提取特定组件或在格式之间进行转换。这对于从原始时间戳中获取可读的小时/分钟至关重要。

何时使用

当你需要从完整的 Date_And_Time 变量中仅在 HMI 上显示时间时。

专家技巧

使用 T_CONV 将 TOD (Time_Of_Day) 转换为 String 以便于记录。

确保输入和输出类型兼容,以避免溢出错误。

在 SCL 中,此指令通常由简单的赋值隐式处理。

RD_SYS_T — 读取系统时间

RD_SYS_T

功能说明

读取 CPU 的当前系统时间 (UTC)。与 RD_LOC_T 不同,它不包括夏令时或时区偏移。

何时使用

适用于需要连续、非跳变时间参考的内部日志记录(避免夏令时 DST 更改期间的问题)。

专家技巧

始终将 UTC 用于数据库存储,以确保全球一致性。

RET_VAL 输出提供状态信息(例如,时钟是否同步)。

如果你需要同时显示“技术”时间和“人类”时间,请将其与 RD_LOC_T 结合使用。

算术运算

持续时间和时间戳的计算

T_ADD — 时间相加

T_ADD

功能说明

将持续时间 (Time 或 LTime) 添加到特定的日期/时间点。它能正确处理分钟、小时和天数的溢出。

何时使用

计算过期时间或预定的重启点(例如:当前时间 + 24 小时)。

专家技巧

对于实现具有动态持续时间的自定义看门狗非常有用。

在 S7-1500 CPU 上使用 LTime 类型以获得纳秒级精度。

如果结果超过最大日期(2262 年),CPU 将设置错误状态。

T_DIFF — 时间差

T_DIFF

功能说明

计算两个时间戳之间的差异,并将结果作为持续时间 (Time 或 LTime) 返回。

何时使用

测量过程步骤的确切持续时间或计算机器的运行时间。

专家技巧

非常适合 OEE (设备综合效率) 计算。

从较小的日期中减去较大的日期会返回负的 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 文件或与 Web 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 到 20891970 到 2262
S7-1200/1500 支持仅限兼容性原生且推荐
精度10 毫秒1 纳秒

常见问题

系统时间 (System Time) 和本地时间 (Local Time) 有什么区别?

系统时间 (RD_SYS_T) 始终是 UTC,提供稳定的参考。本地时间 (RD_LOC_T) 会根据 CPU 属性中配置的特定时区和夏令时 (DST) 规则进行调整。

如何将 PLC 时钟与服务器同步?

在 CPU 硬件配置中启用 NTP (Network Time Protocol)。提供时间服务器的 IP,PLC 将自动调整其内部时钟。

为什么我的 DATE_AND_TIME 在十六进制中显示奇怪的值?

传统的 DT 使用 BCD 编码。十进制中的 25 存储为 BCD 中的 16#25。始终使用转换指令或 DTL 来正确读取值。

我可以直接计算两个 DTL 变量之间的差异吗?

在 SCL 中,你可以简单地在两个 DTL 变量之间使用 '-' 运算符。TIA Portal 会自动为你调用 T_DIFF 指令。

自动化你的时间管理

需要生成带有精确时间戳的生产报告或同步 50 台 PLC?T-IA Connect 自动生成时间逻辑。