控制要求:I0.0 上升沿到时,调用硬件中断组织块OB40,在OB40 中启动延时中断,并读取本地时间到全局数据块DT1 中,延时时间为10 s,时间到时读取本地时间到全局数据块DT2 中,比较DT2 和DT1 数据的时间差。
1.硬件组态
生成一个名为“延时中断例子”的新项目。CPU 的型号为CPU 1215C。打开项目视图的文件夹“PLC_1 \ 程序块”,双击其中的“添加新块”,生成名为“硬件中断”的组织块OB40,名为“延时中断”的组织块OB20,以及全局数据块DB1。
选中设备视图中的CPU,再选中巡视窗口的“属性→常规”选项卡左边的“数字量输入”的通道0,用复选框启用上升沿中断功能。单击选择框“硬件中断”右边的按钮,用下拉式列表将OB40 指定给I0.0 的上升沿中断事件,出现该中断事件时调用OB40。
2.硬件中断组织程序设计
在I0.0 的上升沿触发硬件中断,CPU 调用OB40,在OB40 中调用指令SRT_DINT 启动延时中断的延时,延时时间为10 s。延时时间到时,调用参数OB_RN 指定的延时中断组织块OB20。OB40 程序如图6-62所示。参数SIGN 是调用延时中断OB 时,OB 的启动事件信息中出现的标识符。RET_VAL 是指令执行的状态代码。RET1 和RET2 是数据类型为Int 的OB40 的临时局部变量。
图6-62 OB40 程序
为了保存读取的定时开始和定时结束时的日期时间值,在DB1 中生成数据类型为DTL的变量DT1 和DT2。在OB40 中调用“读取本地时间”指令“RD_LOC_T”,读取启动10 s延时的实时时间,用DB1 中的变量DT1 保存。
3.时间延时中断组织块程序设计
在I0.0 上升沿调用的OB40 中启动时间延迟,延时时间到时,调用时间延迟组织块OB20。在OB20 中调用“RD_LOC_T”指令,读取10 s延时结束的实时时间,用DB1 中的变量DT2 保存,同时将Q0.0 置位。OB20 程序如图6-63所示。
图6-63 OB20 程序
4.OB1 的程序设计(www.xing528.com)
在OB1 中调用指令“QRY_DINT”来查询延时中断的状态字STATUS,查询的结果用MW8保存,其低字节为MB9。“QRY_DINT”指令的参数STATUS 中每个位的含义请参考帮助文件。OB_NR 的实参是OB20 的编号。在延时过程中,在I0.1 为1 状态时,调用指令“CAN_DINT”来取消延时中断过程,在I0.2 为1 状态时,复位Q0.0。OB1 程序如图6-64所示。
图6-64 OB1 程序
5.程序的仿真
打开仿真软件S7-PLCSIM,下载所有的块。打开SIM 表格_1,生成IB0、QB0、MB9的SIM 表条目。仿真PLC 切换到RUN 模式,M9.4 马上变为1 状态,表示OB20 已经下载到CPU。打开数据块_1 [DB1],单击工具栏上的按钮,启动监视功能。单击SIM 表中I0.0对应的小方框,在I0.0 的上升沿,CPU 调用OB40,M9.2 变为1 状态,表示正在执行SRT_DINT 启动的时间延时,如图6-65所示。DB1 中的DT1 显示在OB40 中读取的DTL 格式的时间值。
图6-65 SIM 表仿真结果1
定时时间到时,M9.2 变为0 状态,表示定时结束。CPU 调用OB20,DB1 中的DT2 显示在OB20 中读取的DTL 格式的时间值,Q0.0 被置位,仿真结果如图6-66所示,数据块中的日期时间值如图6-67所示。在图中可以看到在指令SRT_DINT 启动定时和定时时间到两次读取的实时时间之差为10 s,多次仿真发现误差很小,定时精度是相当高的。
把IB0 对应的位置打钩,把I0.2 设为1,可以将Q0.0 复位。把I0.0 设为1,CPU 调用硬件中断组织块OB40,再次启动时间延迟中断的定时。在定时期间,把I0.1 设为状态,执行指令CAN_DINT,时间延迟被取消,M9.2 变为0 状态。10 s的延迟时间到时,不会调用OB20。Q0.0 不会变为1 状态,DB1 中的DT2 也不会显示新读取的时间值。
图6-66 SIM 表仿真结果2
图6-67 数据块中的日期时间值
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。