西门子300PLC如何利用OB1的临时变量读取CPU系统时钟_第1页
西门子300PLC如何利用OB1的临时变量读取CPU系统时钟_第2页
西门子300PLC如何利用OB1的临时变量读取CPU系统时钟_第3页
西门子300PLC如何利用OB1的临时变量读取CPU系统时钟_第4页
西门子300PLC如何利用OB1的临时变量读取CPU系统时钟_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

1、如何用SFCO和SFC1来设置和读取时钟,今天就和大家说一说。首先Date_And_Time是一复杂数据类型,包含8个字节,ByteO - Byte7对应年、月、日、时、分、秒、毫秒、星期,对应关系如下表所示:字节1标识范围Byte 年1990- 2089Byte 1月1 - 12Byte 2日I1-31Byte 3时n0-23Byte 4分0-59Byte 5秒0-59Byte 6毫秒00- 99 (BCD)Byte 7(高 4 拉)毫秒0-9 BCD)Byte 7(低 4 位)星期1 -7(1二星期日)Byte6和Byte7的高4位组合成毫秒,格式是 BCD码,Byte6是高位,Byte7

2、是低位我们可以在DB块里定义timel和time2变量,数据类型是 DATE_AND_TIME,如下图:AddressTypeInitial valueCauent0.0STRUCT乜0timelDATE AND TIMEDT#90-l-l-0:0:0,Tempci ary placeholder variable1+8.oitime 2DATE AND TIMEDT#90-l-l-0:0:0,= 16.0END STRITCT在符号表中定义DB1的符号名为system-time,如下图:S S7 Programne (Symbote) - S7_Pro1SIMATIC 300(1 J(1 )

3、CPU 314C-2 DPStatuSymbolAddressData tynC onunent1system-timeDB1DB1Set System Clock2然后调用SFC0和SFC1就可以了,大家可以参考下面的程序(可以将程序拷贝到Step7中,然后可以转成梯形图程序),具体使用时间时可以直接寻址 DB1.DBB0 -年 DB1.DBB7(低4位)-星期,DB1.DBB8 年 DB1.DBB15(彳氐4位)星期OB1: "Main Program Sweep (Cycle)"Network1 :A M 10.0JNB _001CALL SFC 0PDT :=&qu

4、ot;system-time".time1RET_VAL:=MW100_001: NOP 0Network2 :CALL "READ_CLK"RET_VAL:=MW102CDT :="system-time".time2NOP 0如果对时间误差的要求到分就可以,所以推荐一种简单的方法,不知大家之前用过没有,就是使用 OB1 的 临时变量 0B1_DATE_TIME (在 0B1的Interface - TEMP中可以找到),此变量也是 DATE_AND_TIME 的数据类型,对应的临时变量地址是LB12 - LB19,同样对应年-星期,符合上面

5、表格中的结构,我们只需要使用 Move 指令就可以得到 PLC 的系统时间了。例如我们可以将LD12 Move至U MD0、LD16 Move至U MD4中,然后在程序中寻址 MB0 IB7就可以 了。您可以参考下面的程序(可以将程序拷贝到 Step7中,然后可以转成梯形图程序)。需要注意,OB1临 时变量读出的时间会受 OB1扫描周期的影响,例如 OB1扫描周期是15ms左右,那么从 OB1中读出的时 间精度应该就是 15ms 左右。OB1 : "Main Program Sweep (Cycle)"Network1 :A(L LD 12T MD 0SETSAVECLRA

6、 BR)JNB _002L LD 16T MD 4_002: NOP 0如果需要设置系统时钟,还需要使用 SFC0 来实现西门子官网有一 篇如何 用 SFC1 (READ_CLK) 读取时间和日期以及如 何用 SFC0 (SET_CLK) 设定系统时间详细说明了如何利用 SFC1 和 SFC0 读取和设置 PLC 的系统时 间。这个程序是利用系统功能块读出系统的日期和时间信息(Date and time格式,占用8个字节),然后通过将每个字节分解后得到年、月、日、时、分、秒、毫秒、周的具体值。因为毫秒实 际使用了 12 位,周使用了 4位,所以毫秒和周的数据一起使用了两个字节,在程序中用字 与

7、的办法将其分解出来。整个程序如下:CALL "READ_CLK"/调用系统功能块 SFC1RET_V AL:=MW10CDT :=#Date_timeLAR1P#Date_time/ 利用 SFC1 读出的日期时间值LB AR1,P#0.0T#Year/年LB AR1,P#1.0T#Month/月LB AR1,P#2.0T#Day/日LB AR1,P#3.0T#Hour/时LB AR1,P#4.0T#Minutes/分LB AR1,P#5.0T#Second/秒LW#16#FFF0LW AR1,P#6.0AW/毫秒T#MillisecondLB#16#FLB AR1,P#7

8、.0AW/周T#WeekCLR_time 格对于时间设置的程序,是将读取时间的步骤反过来,先将数据整合到一个 Date_ 式的存储器,再用 SFC0 将这个数值设置为当前时间。程序如下:LAR1 P#Date_timeL #YearT B AR1,P#0.0L #MonthT B AR1,P#1.0L #DayT B AR1,P#2.0L #HourT B AR1,P#3.0L #MinutesT B AR1,P#4.0L #SecondB AR1,P#5.0L#WeekTB AR1,P#7.0CALL "SET_CLK" PDT :=#Date_time RET_V AL

9、:=MW20实际上,对于读取时间,我们可以直接用程序库中的FC6、FC7、FC8 分别将日期、周、时间读出来, 这样程序编写只需要指定一些存储区域即可, 而且得到的是年月日的组合、 时分 秒毫秒的组合,程序如下:CALL "DT_DATE"IN :=#Date_timeRET_V AL:=#Date_FCCALL "DT_DAY"IN :=#Date_time RET_V AL:=#Week_FCCALL "DT_TOD"IN :=#Date_timeRET_V AL:=#Time_FC相应的,设置系统时间也可以直接利用 FC3 将指定的日期和时间组合起来,然后调用 SFC0 写入到系统中。程序如下:CALLFC 3IN1:=#Set_dateIN2:=#Set_timeRET_V AL:=#Date_timeCALLSFC 0PDT:=#Date_timeRET_V AL:=MW30本

温馨提示

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

评论

0/150

提交评论