西门子300PLC如何利用OB1的临时变量读取CPU系统时钟_第1页
西门子300PLC如何利用OB1的临时变量读取CPU系统时钟_第2页
西门子300PLC如何利用OB1的临时变量读取CPU系统时钟_第3页
西门子300PLC如何利用OB1的临时变量读取CPU系统时钟_第4页
西门子300PLC如何利用OB1的临时变量读取CPU系统时钟_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、如何用SFC0和SFC1来设置和读取时钟,今天就和大家说一说。首先Date_And_Time是一复杂数据类型,包含8个字节,Byte0Byte7对应年、月、日、时、分、秒、毫秒、星期,对应关系如下表所示:Byte6和Byte7的高4位组合成毫秒,格式是BCD码,Byte6是高位,Byte7是低位我们可以在DB块里定义time1和time2变量,数据类型是DATE_AND_TIME,如下图:在符号表中定义DB1的符号名为system-time,如下图:然后调用SFC0和SFC1就可以了,大家可以参考下面的程序(可以将程序拷贝到Step7中,然后可以转成梯形图程序),具体使用时间时可以直接寻址DB

2、1.DBB0 年 DB1.DBB7(低4位) 星期,DB1.DBB8 年 DB1.DBB15(低4位) 星期。OB1:Main Program Sweep (Cycle)Network1: A M 10.0 JNB _001 CALL SFC 0 PDT :=system-time.time1 RET_VAL:=MW100 _001: NOP 0Network2: CALL READ_CLK RET_VAL:=MW102 CDT :=system-time.time2 NOP 0如果对时间误差的要求到分就可以,所以推荐一种简单的方法,不知大家之前用过没有,就是使用OB1的临时变量OB1_DAT

3、E_TIME(在OB1的Interface TEMP中可以找到),此变量也是DATE_AND_TIME的数据类型,对应的临时变量地址是LB12 LB19,同样对应年 星期,符合上面表格中的结构,我们只需要使用Move指令就可以得到PLC的系统时间了。例如我们可以将LD12 Move 到MD0、LD16 Move 到MD4中,然后在程序中寻址MB0 MB7就可以了。您可以参考下面的程序(可以将程序拷贝到Step7中,然后可以转成梯形图程序)。需要注意,OB1临时变量读出的时间会受OB1扫描周期的影响,例如OB1扫描周期是15ms左右,那么从OB1中读出的时间精度应该就是15ms左右。OB1:Ma

4、in Program Sweep (Cycle)Network1: A( L LD 12 T MD 0 SET SAVE CLR A BR ) JNB _002 L LD 16 T MD 4 _002: NOP 0如果需要设置系统时钟,还需要使用SFC0来实现。西门子官网有一篇如何用 SFC1 (READ_CLK)读取时间和日期以及如何用 SFC0 (SET_CLK) 设定系统时间详细说明了如何利用SFC1和SFC0读取和设置PLC的系统时间。这个程序是利用系统功能块读出系统的日期和时间信息(Date and time格式,占用8个字节),然后通过将每个字节分解后得到年、月、日、时、分、秒、毫

5、秒、周的具体值。因为毫秒实际使用了12位,周使用了4位,所以毫秒和周的数据一起使用了两个字节,在程序中用字与的办法将其分解出来。整个程序如下: CALL READ_CLK /调用系统功能块SFC1 RET_VAL:=MW10 CDT :=#Date_time LAR1 P#Date_time /利用SFC1读出的日期时间值 L B AR1,P#0.0 T #Year /年 L B AR1,P#1.0 T #Month /月 L B AR1,P#2.0 T #Day /日 L B AR1,P#3.0 T #Hour /时 L B AR1,P#4.0 T #Minutes /分 L B AR1,P

6、#5.0 T #Second /秒 L W#16#FFF0 L W AR1,P#6.0 AW /毫秒 T #Millisecond L B#16#F L B AR1,P#7.0 AW /周 T #Week CLR 对于时间设置的程序,是将读取时间的步骤反过来,先将数据整合到一个Date_and_time格式的存储器,再用SFC0将这个数值设置为当前时间。程序如下: LAR1 P#Date_time L #Year T B AR1,P#0.0 L #Month T B AR1,P#1.0 L #Day T B AR1,P#2.0 L #Hour T B AR1,P#3.0 L #Minutes

7、T B AR1,P#4.0 L #Second T B AR1,P#5.0 L #Week T B AR1,P#7.0 CALL SET_CLK PDT :=#Date_time RET_VAL:=MW20-实际上,对于读取时间,我们可以直接用程序库中的FC6、FC7、FC8分别将日期、周、时间读出来,这样程序编写只需要指定一些存储区域即可,而且得到的是年月日的组合、时分秒毫秒的组合,程序如下: CALL DT_DATE IN :=#Date_time RET_VAL:=#Date_FC CALL DT_DAY IN :=#Date_time RET_VAL:=#Week_FC CALL DT_TOD IN :=#Date_time RET_VAL:=#Time_FC相应的,设置系统时间也可以直接利用FC3将指定的日期和时间组合起来,然后调用SFC0写入到系统中。程序如下: CALL FC 3 IN1 :=#Set_date IN2 :=#Set_time RET_VAL:=#Date_time CALL SFC 0 PDT :=#Date_time RET_VAL:=MW30-本附件中是利用这两个办法写的系统时间读取和设置的程序,实际应用中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论