北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章545 浏览8635237

基于树莓派的CODESYS编程(5)——ST语言编程的基础:时间日期数据类型

今天这篇文章我们来介绍下CODESYS编程环境下ST语言时间日期数据类型,这是后续编程的基础。

cover.png

1、时间数据类型

1.1、TIME:长度为32位的时间数据类型,符合PLC编程标准IEC61131-3,分辨率为毫秒。TIME类型的常量以"T#"开头,其取值范围为:T#0D0H0M0S0MS~T#49D17H2M47S295MS,其中"D"表示"天","H"表示"小时","M"表示"分钟","S"表示"秒","MS"表示"毫秒";

在实际使用时,没有必要把所有的单位都列出。TIME变量建议使用前缀"t"标识,比如下面的代码定义了一个tHold变量,其初始值为3小时20分钟;

tHold : TIME :=T#3H20M;//保持时间

1.2、LTIME:长度为64位的时间数据类型,分辨率为纳秒。LTIME类型的常量以"LTIME#"开头,其取值范围为:LTIME#0NS~LTIME#213503D23H34M33S709MS551US615NS,其中"US"表示微秒,"NS"表示纳秒,其它D/H/M/S/MS与TIME类型中的定义相同。LTIME类型变量建议前缀为"lt",比如下面的代码定义了一个ltRunning的变量,其初始值为20天31秒;

ltRunning : LTIME :=LTIME#20D31S;

2、日期数据类型

日期数据类型包括六种:DATE、DATE_AND_TIME、TIME_OF_DATE、LDATE、LDATE_AND_TIME和LTIME_OF_DAY。

2.1、DATE(日期)

DATE的数据长度为32位,用来表示日期。DATE常量以"DATE#"或"D#"开头,其取值范围为:D#1970-01-01~D#2106-02-07。建议的命名前缀为"date",比如下面的代码定义了一个名称为"dateStart"的变量,其初始值为2021-10-19:

dateStart: DATE :=DATE#2021-10-19;

2.2、DATE_AND_TIME(日期时间)

DATE_AND_TIME的数据长度为32位,用来表示日期及时间,分辨率为秒。其常量以DT#开头,取值范围为:DT#1970-1-1-0:0:0~DT#2106-02-07-06:28:15。建议的命名前缀为"dt",比如下面的代码定义了一个名称为"dtTimeNow"的变量,其初始值为2021-10-19-13:53:00;

dtTimeNow:DATE_AND_TIME:=DT#2021-10-19-13:53:00;

2.3、TIME_OF_DAY(时钟)

TIME_OF_DAY的数据长度为32位,用来表示一天的时钟时间,分辨率为毫秒。其常量以"TOD#"开头,取值范围为:TOD#0:0:0~TOD#23:59:59.999。建议的命名前缀为"tod",比如下面的代码定义了一个名称为"todTimer"的变量,其初始值为14:08:59.555(14点08分59秒555毫秒)

todTimer : TIME_OF_DAY:=TOD#14:08:59.555;

2.4、LDATE(长日期)

LDATE与DATE类似,不过它的数据长度为64位,可表示的日期范围更长。其常量以"LD#"开头,取值范围为:LD#1970-1-1~LD#2554-7-21;建议的变量命名前缀为"ld",比如下面的代码定义了一个名称为"ldStart"的变量,其初始值为2021-10-19

ldStart :LDATE:=LDATE#2021-10-19;

2.5、LDATE_AND_TIME(长日期时间)

LDATE_AND_TIME与之前介绍的DATE_AND_TIME类似,不过它使用LDATE取代之前的DATE,因而数据长度也是64位。其常量以"LDT#"开头,取值范围为:LDT#1970-1-1-0:0:0~LDT#2554-7-21-23:59:59.99999999。建议的命名前缀为"ldt",比如下面的代码定义了一个名称为"ldtTimeStart"的变量,其初始值为:LDT#2021-10-19-14:32:00

ldtTimeStart:LDATE_AND_TIME :=LDT#2021-10-19-14:32:00;

2.6、LTIME_OF_DAY(长时钟)

LTIME_OF_DAY与TIME_OF_DAY类似,也用来表示时钟。不过它的数据长度为64位,可表示时钟精确到纳秒。其常量以"LTOD#"开头,取值范围为:LTOD#0:0:0~LTOD#23:59:59.999999999。建议的命名前缀为"ltod",比如下面的代码定义了一个名称为"ltodClock"的变量,其初始值为:8:38:00.89998989

ltodClock :LTIME_OF_DAY := LTOD#8:38:00.89998989;

之前在西门子SCL编程基础的文章中也曾介绍过日期时间数据类型,二者有相似之处,也有不同的地方。比如虽然都有TIME类型,但取值范围不同。

西门子SCL语言中TIME类型用作32位符号整数,其取值范围为:

T#-24d_20h_31m_23s_648ms~T#+24d_20h_31m_23s_647ms。

而CODESYS的TIME类型用作32位符号整数,其取值范围为:

T#0d0h0m0s0ms~T#49d17h2m47s295ms。还有一些其它的区别,请看文章《西门子SCL编程入门教程连载(13)-日期时间数据类型》。

我的微信视频号最近在介绍西门子ET 200SP的相关知识,欢迎扫描下面的二维码观看:

founderchip.png

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论