网站首页 > 基础教程 正文
日期、时间和时钟功能
日期和时间指令用于日历和时间计算。
● T_CONV将值在(日期和时间数据类型)以及(字节、字和双字大小数据类型)之间进行转换
● T_ADD 加上 Time 和 DTL 值: (Time + Time = Time) 或 (DTL + Time = DTL)
● T_SUB 减去 Time 和 DTL 值: (Time - Time = Time) 或 (DTL - Time = DTL)
● T_DIFF 提供两个 DTL 值的差值作为 Time 值: DTL - DTL = Time
● T_COMBINE 将 Date 值和 Time_and_Date 值组合在一起生成 DTL 值
指令的位置:
一、时间和日期功能介绍和举例
1、T_CONV (转换时间并提取)指令
使用指令“T_CONV”将 IN 输入参数的数据类型转换为 OUT 输出上输出的数据类型。从输入和输出的指令框中选择进行转换的数据格式。
支持的数据类型有整数、TIME、日期和时间*
下面举个例子:将DTL数据类型转换成time of day数据类型
新建一个数据块如下图所示:
在程序中插入“T_CONV”,如下图所示:
仿真看下程序执行的结果如何
2、时间相加T_ADD和相减指令T_SUB
2.1 T_ADD
使用该指令将 IN1 输入中的时间信息加到 IN2 输入中的时间信息上。可以在 OUT 输出参数中查询结果。
* 将一个时间段加到另一个时间段上。
示例:将一个 TIME 数据类型加到另一个 TIME 数据类型上。
* 将一个时间段加到某个时间上。
示例:将一个 TIME 数据类型加到 DTL 数据类型上。
下面举例看看:为时间“timeValTOD”和时间段“timeValTIME”选择数据类型。
在DB块中建如下变量:
运算结果仿真如下:
2-2 T_SUB
使用该指令将 IN1 输入参数中的时间值减去 IN2 输入参数中的时间值。可通过输出参数 OUT 查询差值。
就上例仿真结果如下:
3、T_DIFF: 时间值相减
使用该指令将 IN1 输入参数中的时间值减去 IN2 输入参数中的时间值。结果将发送到输出参数 OUT 中。
二、时钟功能指令介绍
可以通过相应的时钟功能指令去实现对S7-1200 CPU的系统/本地时钟的操作。
* 读取S7-1200CPU的系统/本地时钟。
* 设置S7-1200CPU的系统/本地时钟。
* 设置S7-1200CPU的时区。
* 设置、启动、停止和读取S7-1200CPU 的 32 位运行小时计数器。
1. 读取S7-1200CPU的系统/本地时钟指令的调用。
RD_SYS_T: 读取时间:可以使用该指令读取 CPU 时钟的当前日期和当前时间(模块时间)。得出的值不包含有关本地时区或夏令时的信息。
RD_LOC_T: 读取本地时间:使用该指令从 CPU 时钟读取当前本地时间,并将此时间在 OUT 输出中输出。在输出本地时间时,会用到夏令时和标准时间的时区和开始时间(已在 CPU 时钟的组态中设置)的相关信息。
看看如下程序的时间差异:
为什么系统时间与本地时间相差了8个小时?
这是因为我们设置的时区与格林威治时间相差8小时。
2、设置S7-1200CPU的系统/本地时钟指令的使用。
WR_SYS_T: 设置时间:使用该指令,可设置 CPU 时钟的日期和时间(模块时间)。在输入参数 IN 中输入日期和时间。
WR_LOC_T: 写入本地时间:指令“WR_LOC_T”用于设置 CPU 时钟的日期和时间。在输入参数 LOCTIME 中,输入日期和时间作为本地时间。
举例来说明:
在DB块中建立如下两个变量:
程序如下:
可以通过修改变量或通过连接HMI设备来修改系统时间和本地时间。
3、运行时间定时器指令的调用。
RTM:运行时间定时器:可使用该指令对 CPU 的 32 位运行小时计数器执行设置、启动、停止和读取操作。
各管脚的介绍:
NR:运行小时数的编号。
MODE:作业 ID:
0:读取(随后将状态写入 CQ,当前值写入 CV)。在运行小时计数器达到 (2^31) - 1 小时后,将停在可显示的最后一个值处并输出一条“上溢”(Overflow) 错误消息。
1:启动(从上一计数值开始)
2:停止
4:设置为参数 PV 中指定的值
5:设置为参数 PV 中指定的值并启动
6:设置为参数 PV 中指定的值并停止
PV:运行小时计数器的新值
RET_VAL:在指令执行过程中如果发生错误,则返回值将包含错误代码。
CQ:运行小时计数器的状态(1:正在运行)
CV:运行小时计数器的当前值
举例来看看:
输入参数 MODE的值设置为“5”,如果EN输入端的信号状态为“TRUE”,则执行“RTM”指令。CPU 的运行小时计数器设置为PV中的数值并启动。在启动运行小时计数器后,将输入参数 MODE的值设置为“0”。因此,“RTM”指令读取运行小时计数器的当前值并写入输出管脚CV。输出参数 CQ指示运行小时计数器正在运行。输出参数 RET_VAL指示处理正在运行,且无错误。
为什么 CPU 系统时钟比实际时间快一小时?
使用 STEP 7 V13 SP1 组态 S7-1200 CPU, 设备组态属性-常规-时间,默认的本地时间时区是UTC+01:00,即使更改时区为UTC+08:00,但仍然默认勾选"激活夏令时"。如下图 所示:虽然国内没有使用夏令时,时区选择UTC+08:00,读取的时钟仍然会比实际时钟快一小时。如要使系统时间与实际时间一致,取消勾选“激活夏令时",重新下载项目即可。
猜你喜欢
- 2024-10-19 Python3 datetime模块指南:日期时间操作、时区管理与实战案例
- 2024-10-19 C++及数据结构复习笔记,类和对象很简单?为啥好多程序员还不会
- 2024-10-19 Linux时间和日期 linux 时间 表示方法
- 2024-10-19 C/C++的8种时间度量方式以及代码片段
- 2024-10-19 Python实战:使用 datetime模块处理时间日期的全方位指南
- 2024-10-19 C++编程的 42 条建议(四) c++编程100例
- 2024-10-19 mount with noatime - 合理关闭atime提高服务器性能
- 2024-10-19 linux下连续三次fork()——深度理解进程创建函数
- 2024-10-19 C函数time和clock的计时区别 c计时器函数
- 2024-10-19 win进程弹出Microsoft Visual C++ Runtime Library的解决办法
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)