首页 理论教育 掌握编程错误的诊断技巧介绍

掌握编程错误的诊断技巧介绍

时间:2023-06-26 理论教育 版权反馈
【摘要】:由于FC1中的编程错误,CPU视图对象上的SF LED亮。图8-35 PLCSIM与诊断缓冲区选中“诊断缓冲区”选项卡的3号事件“读取时发生区域长度错误”,下面的窗口是事件的详细信息:读访问全局数据块的DBW4,错误出现的块为FC1,要求调用处理编程错误的OB121,但是没有找到OB121。事件2显示“因编程错误导致STOP模式”。编程错误引起停机,有利于查找错误。

掌握编程错误的诊断技巧介绍

1.程序结构

出现编程错误时,CPU的操作系统将调用OB121。用新建项目向导生成一个名为“OB121”的项目,可以选任意型号的CPU。生成数据块DB1,DB1中只有自动生成的一个整数(INT)占位符变量,DB1的长度为2B。

生成FC1,在FC1中输入下面的程序,该程序中有一个编程错误,第一条指令访问的地址超出了DB1的地址范围。

978-7-111-53804-2-Chapter08-55.jpg

在OB1中用I0.0调用FC1(见图8-34)。

978-7-111-53804-2-Chapter08-56.jpg

图8-34 OB1的程序

2.仿真实验

打开PLCSIM,将用户程序下载到CPU,将仿真PLC切换到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”→“诊断/设置”→“模块信息”,打开模块信息对话框(见图8-35)。

978-7-111-53804-2-Chapter08-57.jpg

图8-35 PLCSIM与诊断缓冲区

选中“诊断缓冲区”选项卡的3号事件“读取时发生区域长度错误”,下面的窗口是事件的详细信息:读访问全局数据块的DBW4,错误出现的块为FC1,要求调用处理编程错误的OB121,但是没有找到OB121。图8-35左下角的小图是3号事件详细信息的下半部分。事件2显示“因编程错误导致STOP模式(未装载或无法装载OB)”。

单击对话框中的“跳转到”按钮,将会打开出错的FC1,显示出错的程序段,光标在出错的指令上。打开“模块信息”对话框的“堆栈”选项卡(见图8-36),B堆栈(块堆栈)中是与编程错误有关的块OB1和FC1,由此可以看出出错时用户程序的调用路径。

978-7-111-53804-2-Chapter08-58.jpg(www.xing528.com)

图8-36 模块信息中的堆栈

选中OB1,单击该选项卡的“L堆栈”按钮,可以看到事件发生时OB1的局部数据。

单击“堆栈”选项卡的“I堆栈”按钮,打开中断堆栈,可以看到程序执行被中断时累加器、地址寄存器和状态字的内容,当时打开的数据块为DB1,其大小为2B。在“中断点”区可以看到FC1的执行被中断。单击“帮助”按钮,可以得到有关的帮助信息。

返回SIMATIC管理器,生成OB121(可以是一个空的块),下载到CPU后切换到RUN-P模式。令I0.0为1状态,调用FC1时出现编程错误,SF LED亮,但是CPU不会进入STOP模式。

编程错误一般出现在程序的编写和调试阶段。编程错误引起停机,有利于查找错误。建议在程序运行时不要下载OB121,以免程序带病运行。

3.编程错误的仿真练习

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

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

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

978-7-111-53804-2-Chapter08-59.jpg

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

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

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

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

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

我要反馈