首页 理论教育 诊断编程错误:7.3实训四十四优化技巧

诊断编程错误:7.3实训四十四优化技巧

时间:2023-06-20 理论教育 版权反馈
【摘要】:由于FC1的编程错误,CPU视图对象上的SF LED亮。图7-22 PLCSIM与诊断缓冲区单击对话框中的“打开块”按钮,将会打开出错的块FC1,显示出错的程序段,光标在出错的第一条指令。打开“模块信息”对话框的“堆栈”选项卡,B堆栈(块堆栈)中是与编程错误有关的块OB1和FC1,表示出错时程序块的调用路径。

诊断编程错误:7.3实训四十四优化技巧

1.程序结构

出现编程错误时,CPU的操作系统将调用OB121。用新建项目向导生成一个名为“OB121”的项目(见随书光盘中的同名例程),可以选任意型号的CPU。

生成FC1,在FC1中输入下面的程序,第一条指令访问了并不存在的DB1中的地址

978-7-111-31641-1-Chapter07-34.jpg

在OB1中,用I0.0调用FC1(见图7-21)。

978-7-111-31641-1-Chapter07-35.jpg

图7-21 OB1的程序

2.仿真实验

打开PLCSIM,选中SIMATIC管理器左边窗口中的“块”文件夹,单击工具栏上的978-7-111-31641-1-Chapter07-36.jpg按钮,下载用户程序。将仿真CPU切换到RUN-P模式。

在PLCSIM中生成IB0的视图对象。单击I0.0对应的小方框,将I0.0置为1状态,OB1调用FC1。由于FC1的编程错误,CPU视图对象上的SF LED亮。CPU要求调用OB121,因为没有生成和下载OB121,CPU自动切换到STOP模式。RUN LED熄灭,STOP LED亮。

在SIMATIC管理器中执行菜单命令“PLC”→“诊断/设置”→“模块信息”,打开模块信息对话框(见图7-22)。

选中“诊断缓冲区”选项卡的第3条事件“没有装载DB”,下面的窗口是事件的详细信息:因为没有下载DB1,程序在FC1中断,请求调用OB121。图7-22左下角的小图是3号事件详细信息的下半部分。

978-7-111-31641-1-Chapter07-37.jpg

图7-22 PLCSIM与诊断缓冲区

单击对话框中的“打开块”按钮,将会打开出错的块FC1,显示出错的程序段,光标在出错的第一条指令。

打开“模块信息”对话框的“堆栈”选项卡(见图7-23),B堆栈(块堆栈)中是与编程错误有关的块OB1和FC1,表示出错时程序块的调用路径。单击该选项卡的“I堆栈”按钮,打开中断堆栈,可以看到程序执行中断时累加器、地址寄存器和状态字的内容,在“中断点”区可以看到FC1的执行被中断。单击“帮助”按钮可以得到有关的帮助信息。

978-7-111-31641-1-Chapter07-38.jpg

图7-23 堆栈信息

返回SIMATIC管理器,生成OB121(可以是一个空的块)和DB121,在DB121中生成20B的数组ARY。在OB121中将MW10加1,调用SFC20,用数组DB121.ARY保存OB121的局部变量。下载用户程序后切换到RUN-P模式。令I0.0为1状态,调用FC1时出现编程错误,SF LED亮,但是CPU不会进入STOP模式。

3.OB121的局部变量

选中SIMATIC管理器中的OB121,按计算机的<F1>键,打开OB121的在线帮助。

局部变量OB121_SW_FLT是错误代码,OB121_FLT_REG是错误来源,例如,产生数据类型转换错误的寄存器,不正确的地址(读/写错误),不正确的定时器/计数器和块的编号,以及不正确的存储区。OB121_RESERVED_1给出了错误的信息(见表7-1)。(www.xing528.com)

7-1 OB121的错误代码OB121_SW_FLT

978-7-111-31641-1-Chapter07-39.jpg

有编程错误时,打开DB121。单击工具栏上的978-7-111-31641-1-Chapter07-40.jpg按钮,启动监控功能。图7-24是OB121的局部变量的前12B。

DBB1(OB121_SW_FLT)是错误代码,由OB121的在线帮助和表7-1可知,16#22表示读取数据时的区域长度错误。

978-7-111-31641-1-Chapter07-41.jpg

图7-24 OB121的局部变量

DBB4(OB121_BLK_TYPE)是错误所在的块的类型,由在线帮助可知8C表示DB。

DBB5(OB121_RESERVED_1)的值为16#24,由表7-1可知,第4~7位的2表示访问类型为字。第0~3位的4表示存储器区为共享数据块。

DBW6(错误源,OB121_FLT_REG)的地址为4,即程序中读操作出错的DBW4的地址。

4.编程错误的仿真练习

执行BCD码转换为整数的指令BTI时,如果BCD码的低3位中某位为无效数据16#A~16#F(对应的十进制数为10~15),转换指令将会出错。

用新建项目向导生成一个项目,可以选任意型号的CPU。

生成OB35,编写下面的语句表程序,被转换的常数W#16#23A的最低位不是BCD码:

978-7-111-31641-1-Chapter07-42.jpg

打开PLCSIM,下载用户程序。将仿真CPU切换到RUN-P模式。由于OB35中的编程错误,不能切换到RUN模式,CPU视图对象上的SF LED亮。

在SIMATIC管理器中执行菜单命令“PLC”→“诊断/设置”→“模块信息”,打开模块信息对话框,用“诊断缓冲区”检查出错的原因。

选中其中的事件“BCD转换错误”,单击“打开块”按钮,打开出错的块。

打开“堆栈”选项卡,观察B堆栈、L堆栈和I堆栈中的内容。

生成OB121和DB121,在DB121中生成20B的数组ARY。在OB121中将MW10加1,调用SFC20,用DB121.ARY保存OB121的局部变量。

下载用户程序后切换到RUN-P模式,观察运行的结果。

打开DB121,单击工具栏上的978-7-111-31641-1-Chapter07-43.jpg按钮,启动监控功能。打开OB121的在线帮助,分析DB121中的OB121的局部变量的意义。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈