您现在的位置是:首页 > PLC技术 > PLC技术
日期时间中断组织块
来源:艾特贸易2018-03-26
简介1 .设置和启动日期时间中断 为了启动日期时间中断,用户首先必须设置日期时间中断的参数,然后再激活它。有以下 3 种方法可以启动日期时间中断。 ①在用户程序中用 SFC 28 “ SE
1.设置和启动日期时间中断
为了启动日期时间中断,用户首先必须设置日期时间中断的参数,然后再激活它。有以下3种方法可以启动日期时间中断。
①在用户程序中用SFC 28“SET_TINT”和SFC 30“ACT_TINT”设置和激活日期时间中断,如图4-35所示。
图4-35利用用户程序进行中断
②在STEP 7中打开硬件组态工具,双击机架中CPU模块所在的行,打开设置CPU属性的对话框,如图4-36所示,点击“Time_Of_Day Interrupts”选项卡,设置启动时间日期中断的日期和时间,如图4-37所示,选中“Active”(激活)多选框,在“Execution”列表框中选择执行方式。将硬件组态数据下载到CPU中,可以实现日期时间中断的自动启动。
③用上述方法设置日期时间中断的参数,但是不选择“Active”,而是在用户程序中用SFC 30“ACT_TINT”激活日期时间中断。
图4-36 CPU属性对话框
图4-37“Time_Of_Day Interrupts”选项卡
2.查询日期时间中断
要查询设置了哪些日期时间中断以及这些中断什么时间发生,用户可以调用SFC 31“QRY_TINT”,或查询系统状态表中的“中断状态”表,如表4-10所示。
表4-10 SFC 31输出的状态字节STATUS
3.禁止日期时间中断
用户可以用SFC 29“CAN_TINT”取消(禁止)日期时间中断,当用户又要重新使用这些日期时间中断时,可以用SFC 28“SET_TINT”和SFC 30“ACT_TINT”重新设置和激活这些日期时间中断。
4.日期时间中断的优先级
8个日期时间中断组织块(OB)均具有相同的默认优先级(第2级),它们之间的优先级是按启动事件发生的顺序来进行处理,用户可以通过选择适当的参数来改变优先级。
日期时间中断组织块OB10的局域变量如表4-11所示。
表4-11 日期时间中断组织块0810的局域变量表
在调用SFC 28时,如果参数“OB10_PERIOD_EXE”为十六进制数W#16#0000、W#16#0201、W#16#0401、W#16#1001、W#16#1201、W#16#1401、W#16#1801和W#16#2001,分别表示执行一次、每分钟、每小时、每天、每周、每月、每年和月末执行一次。
【例4-11在IO.O的上升沿时启动日期时间中断0810,在IO.1为1时禁止日期时间中断,每次中断使MW2加1。从2004年7月1日8时开始,每分钟中断一次,每次中断MW2被加1。
图4-38 IB10例程SIMATIC管理器示意图
在STEP 7中生成项目“OB10例程”,为了便于调用,例程中对日期时间中断的操作都放在功能FC 12中,如图4-38所示。在OB1中用指令CALL FC l2调用它。下面是用STL编写的FC 12的程序代码,它有一个临时局域变量“OUT_TIME_DATE”。
IEC功能DTOD_TD (FC3)在程序编辑器左边指令目录与程序库窗口的文件夹\Libraries\Standard Library\IEC Function Blocks中。
Network 1:查询0810的状态
CALL SFC 31 //查询日期时间中断0810的状态
OB_NO :=10 //日期时间中断OB的编号
RET_VAL :=MW208 //保存执行时可能出现的错误代码,为0时无错误
STATUS :=MW16 //保存日期时间中断的状态字,MB17为低字节
Network 2:合并日期时间
CALL FC 3 //调用IEC功能D_TOD_TD
IN1 :=D#2004-7-1 //设置启动中断的日期和时间
IN2 :=TOD#8:0:0,0
RET_VAL :=#OUT_TIME_DATE //合并日期和时间
Network 3:在10.0的上升沿设置和激活日期时间中断
A IO.O
FP Ml.0 //如果在IO.O的上升沿,Ml.0为1
AN M17.2 //如果日期时间中断已被激活时,M17.2的常闭触点闭合
A M17.4 //如果装载了日期时间中断OB时,M17.4的常开触点闭合
JNB m005 //没有同时满足以上3个条件则跳转
CALL SFC28 //同时满足则调用SFC“SET_TINT”,设置日期时间中断参数
OB_NO:=10 //日期时间中断OB编号
SDT :=#OUT_TME_DATE//启动中断事件,秒和毫秒被置为0
PRRIOD:=W#16#201 //设置产生中断的周期为每分钟一次
RET_VAL: =MW200 //保存执行时可能出现的错误代码,为0时无错误
CALL SFC 30 //调用SFC“ACT_TINT”,激活日期时间中断
OB_NO :=10 //日期时间中断OB编号
RET_VAL:=MW204 //保存执行时可能出现的错误代码,为0时无错误
M005:NOP 0
Network 4:在IO.1的上升沿禁止日期时间中断
A IO.1
FP Ml.l //检测IO.1的上升沿
JNB m004 //表示IO.1上升沿则跳转
CALL SFC 29 //调用SFC“CAN_TINT”,禁止日期时间中断
OB_NO:=10 //日期时间中断OB编号
RET__VAL: =MW210 //保存执行时可能出现的错误代码,为0时无错误
M004: NOP 0
下面是用STL编写的0810中断程序,每分钟MW2被加1一次。
Network 1
LMW2
+ 1
TMW2
有时间错误出现时,CPU的操作系统调用OB80。时间错误包括以下几种。
①实际循环时间超过在CPU模块属性中设置的最大循环时间。
②执行OB时的应答错误。
③应为向前修改时间而跳过日期时间中断OB的启动时间。
④CiR(在CPU中组态)之后恢复为RUN方式。
如果0880未编写程序,CPU将转换到STOP模式。下面是用STL编写的0880的程序代码,如果出现了时间错误,Q4.1将被置位,并将OB80的启动事件信息保存到MW110~MW119中。
Network 1:
AN Q4.1
SQ4.1
CALL SFC 20 //数据块传送
SRCBLK :=#OB80_EV_CLASS //指定源地址
RET_VAL:=MW210 //保存可能的错误信息
DSTBLK :=P#Mll0.0 Byte 20 //指定目的地址,复制20个字节
可以在PLCSIM仿真软件中运行上述例程,运行时监视M 17.2、M17.4和MW2。M17.2为1时表示日期时间中断被激活,17.4为l时表示已经装载了日期时间中断组织块OB10。用IO.O激活日期时间中断,M17.2变为1状态,每分钟MW2将被加1。用IO.I禁止日期时间中断,M17.2变为0状态,MW2停止加1。
(作者稿费要求:需要高清无水印文章的读者3元每篇,请联系客服,谢谢!在线客服:)
点击排行
