跳到正文
Learn-SCL
SCL 示例库/SCL 指令手册/SCL 日期时间指令

SCL 日期时间指令

西门子 SCL 日期时间指令:时间相加、相减和时间差,含完整 FB 示例、边界场景和常见坑。

SCL 的时间运算围绕 TIME/LTIME(时长)和 TOD/DTL(时间点/日期时间)展开。

T_ADD 加时长,T_SUB 减时长,T_DIFF 求两个时间标签的差;结果类型取决于输入组合。

Time 是 32 位毫秒,约 49 天上限;长时间累计用 LTIME 或 DInt 毫秒/秒。

SCL 日期时间指令 3

怎么选

需求 指令
时间相加 T_ADD
时间相减 T_SUB
两个时间标签的差 T_DIFF
读系统时间 RD_SYS_T
设置时间 WR_SYS_T

累计运行时间

SCL
1#Total := T_ADD(IN1 := #Total, IN2 := #CycleTime);
2IF #Total >= T#1H THEN
3   #MaintenanceDue := TRUE;
4END_IF;

计算节拍

SCL
1#Duration := T_DIFF(IN1 := #EndDTL, IN2 := #StartDTL);

Time 约 49 天上限;跨月/长时间差用 LTIME 或分段累计。

常见问题

T_ADD、T_SUB、T_DIFF 怎么选?

加时长用 T_ADD,减时长用 T_SUB,求两个时间标签的差用 T_DIFF;结果都是时间类型。

Time 最大能表示多久?

TIME 是 32 位毫秒,约 49 天;更长时间用 LTIME 或 DInt 秒/毫秒累计。

DTL 时间差超过 24 天怎么办?

T_DIFF 的 TIME 变体对 DTL-DTL 有 24 天限制;用 T_DIFF_LTIME 或分段累计。

时间差可以为负吗?

可以;IN1 早于 IN2 时为负。下游定时器/延时通常要求正数,使用前检查。

← 返回 SCL 指令手册