一、有关时间的数据类型
1、S5TIME。长度为16位,包括时基和时间常数两部分,其数据格式如图1.1所示。详细说明可参见《S7-300/400进阶笔记8:深入浅出的认识一下S7的定时器》 。
![04f159512aaaa60fa84062c0d410ba81.png](https://img-blog.csdnimg.cn/img_convert/04f159512aaaa60fa84062c0d410ba81.png)
图1.1 S5TIME数据结构
2、IEC时间(TIME)。长度为32位,时基为固定值1ms,数据类型为双整数,所表示的时间值为整数值乘以时基,其格式为:
T#aaD_bbH_ccM_dds_eeeMS
详见《S7-300/400进阶笔记12:STEP7不止有S5定时器,带你认识IEC定时器》 。
3、IEC日期(DATE)。长度为16位,数据类型为整数,以1日为单位,日期从1900年1月1日开始,其对应为整数0,日期每增加一天,对应的整数值加1。其格式为:
D#aY-bM-cD
由于其为长度16位的整数,因此,其取值范围为:D#1900-1-1 – D#2163-12-31。
4、日计时(TIME_OF_DAY)。长度为32位,用于记录一天中的24小时,数据类型为双整数,以1ms为时基。其格式为:
TOD#aaH:bbM:ccS:dddMS
取值范围为:TOD#0:0:0.000 – TOD#23:59:59.999。
5、DATE_AND_TIME。复杂数据类型之一,由8个字节组成。详见《S7-300/400进阶笔记13:深入了解DATE_AND_TIME以及系统时钟》 。
二、各种类型"时间"之间的相互转换
在标准库的"IEC Function Blocks"目录下,收录了一些功能FC,用来实现以上5种"时间"数据类型之间的相互转换,以实现特定应用。
1、FC1(AD_DT_TM)
该功能为一个DT(即DATE_AND_TIME)加上一段时间(TIME),从而产生一个新的DT时间。
![2d59a1249097a82fe29dbcb111d2a1ff.png](https://img-blog.csdnimg.cn/img_convert/2d59a1249097a82fe29dbcb111d2a1ff.png)
图2.1 FC1(AD_DT_TM)
需要注意的是:
1) 输入端"T"的值必须在其取值范围内,即DT#1990-01-01-00:00:00.000到DT#2089-12-31-23:59:59.999之间。
2) 输入"T"加上时间偏移量"D"后的时间值可能会超出有效值范围内,但功能FC1不会对运算结果校验。运算结果溢出后,状态字的二进制结果(BR)会被设置为"0"。
3) DATE_AND_TIME为复杂数据类型,不能采用立即寻址,需在DB块中定义好之后,通过符号地址来访问。
2、FC3(D_TOD_DT)
该功能将数据格式DATE和TIME_OF_DAY组合在一起,形成DATE_AND_TIME类型的数据。
![82f4c1bf2d318d80a1cde8e3b5b0b524.png](https://img-blog.csdnimg.cn/img_convert/82f4c1bf2d318d80a1cde8e3b5b0b524.png)
图2.2 FC3(D_TOD_DT)
3、FC6(DT_DATE)
该功能从DATE_AND_TIME变量中提取日期,即DATE格式。
![890da74238b4a87db67caafbb96f46a1.png](https://img-blog.csdnimg.cn/img_convert/890da74238b4a87db67caafbb96f46a1.png)
图2.3 FC6(DT_DATE)
4、FC7(DT_DAY)从DATE_AND_TIME变量中提取"周",用法简单,图解略去。
5、FC8(DT_TOD)从DATE_AND_TIME变量中提取"时间",即TIME_OF_DAY,用法简单,图解落去。
6、FC33(S5TI_TIM)将S5TIME格式的时间转换为TIME格式,用法简单,图解略去。
7、FC40(TIM_S5TI)将TIME格式的时间转换为S5TIME格式,用法简单,图解略去。
标准库中,共提供了上述若干个功能,来实现不同"时间"格式之间的相互转换,方便不同的应用场合,汇总如下:
![2e64bac94c0d13cf100b62db0b90cfe3.png](https://img-blog.csdnimg.cn/img_convert/2e64bac94c0d13cf100b62db0b90cfe3.png)
图3 有关“时间转换”的功能汇总