日期和时间是PLC编程经常需要处理的数据,本节我们先来认识下西门子SCL编程语言所支持的日期时间数据类型,以便为后续介绍日期时间指令打下基础。
IEC61131-3定义了8种时间日期数据类型,分别是:
TIME
LTIME(LONG TIME)
DATE
LDATE
TIME_OF_DAY(TOD)
LTIME_OF_DAY(LTOD)
DATE_AND_TIME(DT)
LDATE_AND_TIME(LDT)
数据来源:IEC61131-3:2013 Table 10 -Elementary date types(page 31)
西门子SCL编程语言符合IEC61131-3标准,也支持这些数据类型,下面我们来具体看下:
1、TIME(时间)
TIME类型的长度为4个字节(32bits),它可以表达包括天(day)、小时 (hour)、分钟(minute)、秒(second)、毫秒(millisecond)的信息。
TIME类型的数据用于定时器计时,其常量以"T#"标识,比如:T#9d20h12m20s630ms(9天20小时12分钟20秒630毫秒),其取值范围为:T#-24d20h31m23s648ms ~ T#+24d20h31m23s647ms;
2、LTIME(LONG TIME)
LTIME类型的长度为8个字节(64bits),它可以表达包括天(day)、小时(hour)、分钟(minute)、秒(second)、毫秒(millisecond)、微秒(microsecond)及纳秒(nanosecond)的信息,同样可用于定时器计时。
LTIME的常量以"LT#"标识,
比如:LT#50d20h25m14s830ms652us315ns(50天20小时25分钟14秒830毫秒652微秒315纳秒),其取值范围为:LT#-106751d23h47m16s854ms775us808ns~LT#+106751d23h47m16s854ms775us807ns。
使用LTIME类型时并不需要将所有的时间单位写出,LT#2h10s是个合格的常量。
需要说明的是:只有S7-1500系列CPU支持LTIME类型
3、S5TIME(S5时间类型)
S5TIME是西门子S7-300/400系列CPU支持的时间类型,其长度为2个字节(16bits)。S5TIME以BCD码来存放时间信息,其常量以"S5T#"标识,比如:S5T#1s500ms(1秒500毫秒),可表达的时间范围为:S5T#0ms~S5T#2h_46m_30s_0ms;
4、DATE(日期)
DATE数据类型的长度为2个字节,它将日期的信息存放在无符号整数里。DATE数据类型的常量以"D#"标识,比如D#2019-12-11,其取值范围为:D#1990-01-01 to D#2168-12-31。
5、TOD(TIME_OF_DATE)
TIME_OF_DATE数据类型的长度4个字节,它存放当前时间从午夜0:00算起所走经过的毫秒数(milliseconds)。
TIME_OF_DATE数据类型的常量以"TOD#"标识,其取值范围为:TOD#00:00:00.000 ~ TOD#23:59:59.999;
6、LTOD(LONG_TIME_OF_DATE)
LONG_TIME_OF_DATE数据类型的长度为8个字节,它存放当前时间从午夜0:00开始所走过的纳秒数。
LONG_TIME_OF_DATE的常量以"LTOD#"标识,其取值范围为:LTOD#00:00:00.000000000 ~ LTOD#23:59:59.999999999;
需要说明的是:只有S7-1500系列CPU支持LTOD类型
7、DATE_AND_TIME
DATE_AND_TIME数据类型的长度为8个字节,它以BCD码存放日期及时间数据(精确到毫秒)。
DATE_AND_TIME各字节的定义如下:
字节 | 描述 | 取值范围 |
0 | 年(year) | 1990年~2089年 BCD#90=1990 BCD0#=2000 BCD89#=2089 |
1 | 月(month) | BCD#1~BCD#12 |
2 | 日(day) | BCD#1~BCD#31 |
3 | 小时(hour) | BCD#0~BCD#23 |
4 | 分钟(minute) | BCD#0~BCD#59 |
5 | 秒(second) | BCD#0~BCD#59 |
6 | 微秒的前两个最高权重位 | BCD#0~BCD#99 |
7(4MSB) | 微秒的最低权重位 | BCD#0~BCD#9 |
7(4LSB) | 一周中的第几天 | BCD#1~BCD#7 |
DATE_AND_TIME的常量以“DT#”标识,
比如当前时间为:DT#2019-12-12-20:47:32.621
注:关于最低权重位和最高权重位,请看官网:https://www.founderchip.com/?id=41这篇文章;
8、DATE_AND_LTIME
DATE_AND_LTIME的长度为8个字节,它存放从1970:0:0开始到现在所经过的时间(纳秒数);
DATE_AND_LTIME的常量以”LDT#”标识,其取值范围为:LDT#1970-01-01-0:0:0.000000000~LDT#2263-04-11-23:47:16.854775808
需要说明的是:只有S7-1500系列CPU支持LDT类型
9、DTL
DTL的长度为12个字节,它可以存放日期及时间(精确到纳秒)数据,其格式定义如下:
字节 | 描述 | 数据类型 | 取值范围 |
0 | 年(year) | UNIT | 1970~2262 |
1 | |||
2 | 月(month) | USINT | 1~12 |
3 | 日(day) | USINT | 1~31 |
4 | 一周中第几天 | USINT | 1~7 |
5 | 小时(hour) | USINT | 0~23 |
6 | 分钟(minute) | USINT | 0~59 |
7 | 纳秒(nanosecond) | UDINT | 0~999999999 |
8 | |||
9 | |||
10 | |||
11 |
DTL的常量以”DTL#”标识,其取值范围为:DTL#1970-01-01-00:00:00.0 ~ DTL#2262-04-11-23:47:16.854775807
好了,关于SCL的日期时间数据类型就介绍到这里,欢迎扫描下方的二维码关注我们的微信公众号。
西门子SCL编程入门教程连载(13)-日期时间数据类型.pdf
来源:本站| 大小:566KB| 下载次数:2845次
发表评论