工业生产的数据统计需要准确的日期时间信息,PLC必须具有处理日期时间的功能。今天这篇文章,我们来认识下西门子的S7系列PLC的日期时间数据类型,及如何调用系统提供的函数来对日期时间进行读写操作。
在S7-300/400中,用来记录日期时间信息的数据类型称为“DT(DATE_AND_TIME)”。该数据类型以BCD码的形式存放日期时间信息,总长度为8个字节;其最小值为:DT#1990-01-01-00:00:00.000;最大值为:DT#2089-12-31-23:59:59.999。
DT(DATE_AND_TIME)数据类型中各字节的含义见下面的表格:
我们来认识下这个表格:首先,BCD码是以四位二进制数来表示一位十进制数,它“逢十进一”,其本质是十进制数。一个八位的BCD码,能表示的十进制数值范围为0~99;
有了这个概念,你应该就能理解Byte0(年)的取值范围;
在DT(DATE_AND_TIME)类型中,还有一个3位数的微秒值。我们知道一个字节(8 bits)最大能表示2位数(0~99)的BCD值,因此要表示3位数(0~999),需要12位(12 bits)。因此在该数据结构中,用字节6(Byte6)来表示微秒值的前两位最高权重位(2 MSB),用字节7(Byte7)的高四位最高权重位(4MSB)来表示微秒值得最低权重位(1LSB)。
关于最高权重位、最低权重位请参考文章:给你讲个来自《格列佛游记》的计算机故事
在S7-1200/1500系列PLC中,日期时间数据类型被称为“DTL(DATE_AND_TIME_LONG)”。DTL类型的长度为12个字节,最小值为:DTL#1970-01-01-00:00:00.0,最大值为:DTL#2262-04-11-23:47:16.854775807。
DTL数据类型具体的定义见下面的表格:
可以看出DTL与之前的DT格式有很大的不同:
1)DTL用一个无符号的整数(UNIT)来表示“年”,其范围为1970~2262;
2)DTL没有采用BCD码来表示数据,其数据类型为无符号整型(UINT)、无符号短整型(USINT)或者无符号双整型(UDINT);
注:无符号整型(UINT)的长度为16位(16 bits);无符号短整型(USINT)的长度为8位(8 bits);无符号双整型(UDINT)的长度为32位(32 bits);
3)DTL可以支持纳秒级的时间值;
到目前为止,我们知道了两种日期时间数据类型,那么怎么对其进行读写操作呢?
1.读操作
可以使用指令(系统函数)“RD_SYS_T”来读取CPU内部的日期时间值。
RD_SYS_T有两个参数:RET_VAL和OUT:
1)RET_VAL:是指令执行的返回值,用来表示指令执行的状态。数据类型为整型(INT);
2)OUT:指令成功执行后所得到的CPU当前的日期时间值。数据类型为DT或者DTL;
2.写操作
可以使用指令(系统函数)“WR_SYS_T”来对CPU的日期时间值进行设置。
WR_SYS_T有两个参数:IN和RET_VAL:
1)IN:新的日期时间值(数据类型:DT或者DTL);
2)RET_VAL:返回值,表示指令执行的状态(数据类型:整型);
注:S7-1200系列PLC仅支持DTL数据类型,S7-1500系列PLC支持DT、DTL和LDT三种数据类型。
好了,本文我们介绍了SIMATIC S7-300/400 及S7-1200/1500系列PLC的日期时间类型及其读写指令。关于操作实例及S7-200 Smart的日期时间类型,我们将在后续的文章中介绍。
欢迎扫描下方的二维码关注我们的微信公众号。
来源:本站| 大小:498 KB| 下载次数:2049次
发表评论