SIMATIC S7-1200系列
    更多

    GetErrorGetErrorID 指令

    star star star star star
    0 分
    • 使用操作
    发布时间:2024年08月08日
    • 0
    • 312
    GetErrorGetErrorID 指令

    GetError 与 GetErrorID 指令的使用

    在 STEP7 11 中,可以通过GetError (获取本地错误信息)或者GetErrorID (获取本地错误ID )指令查询块内出现的错误。

    请注意:GetError 和 GetErrorID 均支持块内的错误处理。当在程序块中调用GetError 或GetErrorID 指令后,如果该程序块发生错误,CPU则将忽略任何预定义的系统响应。也就是说CPU 会忽略此错误,而且CPU 的Error 灯(红色)也不会亮,CPU 也不会停机。所以说该指令在某种程度上也起到了抑制程序错误的作用,同时有一定的风险存在。

    建议该指令在程序块中的最后一个网络中调用, 这样可以诊断整个程序块中的错误,如果在程序中间调用该指令,则后面的程序如果有错误,CPU 也会忽略错误,不会停机,也没有相关报错,将不利于问题的诊断

    1. GetError 与 GetErrorID 的调用

    在编程界面下, 点击右侧 “指令-> 基本指令-> 程序控制操作” 中可以找到GetError及GetErrorID 两个指令。(见下图1)

    图1.

    2. GerError 指令的使用

    GetError : 使用“获取本地错误信息”指令,可以查询块内出现的错误。 如果在块执行期间出现错误,则发生的第一个错误的详细信息将保存在输出 ERROR 中。消除第一个错误后,该指令会在Error 处输出下一个错误的信息。仅当使能输入 EN 的信号状态为“1”且显示了错误信息时,才置位“获取本地错误信息”指令的使能输出 ENO。

    GetError 指令的输出参数Error 的数据类型为ErrorStruct(见图2),请注意:常规的变量类型中并未包含此类型。

    图2

    定义Error 变量的步骤:

    1. 需要创建一个全局数据块并定义变量,例如变量名为Error,在DB 块中手动输入" Errorstruct ",该变量类型无法通过下拉列表选择(见图3)。

    图3

    通常输入“ E ” 时就可以看见该变量类型,可以直接点选。(见图4)

    图4.

    2. 定义后的Error 结构如下:(见图5),详细的参数介绍请参考该指令的帮助文件。(选中块, 按键盘上功能键 F1 )

    图5.

    3. 定义完成后可以直接在引脚输入所创建的DB 块的名称,即可在下拉框中找到所定义的Error 变量( 见图6)。

    图6.

    直接选择Error 即可完成输出参数的定义(图7)。

    图7.

    可以通过打开DB 块,监控Error的状态判断程序是否报错。详细报错信息请参考该块的帮助(选中块, 按键盘上功能键 F1 )

    例如: 在FC1 中编程调用一个不存在的地址 DB1.DBX0.0,此时GetError 指令执行, cpu 运行正常, 没有error 灯亮,诊断缓冲区也不会报错( 见图8 )。

    图8.

    注意:在TIA Portal V11 中,如果程序中使用了未定义的变量或未创建的变量,编译将会报警,但程序可以下载, 未定义变量不能通过变量分配,见下图9。

    图9.

    此时监控DB 块中Error 变量的状态, 根据监视值查询帮助可以知道 FC1 中调用的全局数据块 DB1 中,偏移地址0 不存在(图10)。

    图10.

    3. GetErrorID 的使用

    GetErrorID: 使用“获取本地错误 ID”指令(见图11),可以查询块内出现的错误。如果在块执行过程中系统信号出错,会将发生的第一个错误的 ID 保存在输出 ID 的变量中。 ID 输出中只能指定 WORD 数据类型的操作数(见图12)。 消除第一个错误后,该指令才会输出发生的下一个错误的ID。仅当“获取本地错误 ID”指令的输入的信号状态为“1”且显示了错误信息时,才置位该指令的输出。

    图11

    图12

    下表列出了GetRrrorID 指令的输出参数 ID 可以输出的值对应的报错信息。(GetError 指令输出结构变量中的ErrorID适用于下表)

    ID 十六进制ID 十进制说明
    00无错误
    25039475指针无效
    25059477在用户程序中调用“Stop”指令 (SFC46)
    25209504STRING 无效
    25229506读取错误:操作数超出有效范围
    25239507写入错误:操作数超出有效范围
    25249508读取错误:操作数无效
    25259509写入错误:操作数无效
    25289512读取错误:数据对齐
    25299513写入错误:数据对齐
    252C9516指针无效
    25309520写入错误:数据块
    25339523使用了无效指针
    25349524块编号错误 FC
    25359525块编号错误 FB
    25389528访问错误:DB 不存在
    25399529访问错误:使用了错误 DB
    253A9530全局数据块不存在
    253C9532故障信息或函数不存在
    253D9533系统函数不存在
    253E9534故障信息或函数块不存在
    253F9535系统块不存在
    25509552访问错误:DB 不存在
    25519553访问错误:使用了错误 DB
    25759589程序嵌套深度出错
    25769590本地数据分配出错
    294210562读取错误:Input
    294310563写入错误:Output

    常问问题

    GetError 与GetErrorID 的区别?

    :GetError 与GetErrorID 区别在于 GetError 可以得到比较详细的信息,如块编号,偏移地址等, 便于问题的快速诊断及定位。GetErrorID 指令仅输出简单报错信息。

    如果程序比较复杂,建议使用GetError 指令可以更快捷的帮助查找程序错误 。

    是否可以在一个块中(FC 或 FB)中不同的网络段中(Network)多次调用 GetError 或 GetError ID 指令?

    :可以。在一个块中不同的网络段中调用多次GetError 指令或 GetErrorID 指令,可以诊断一个块中不同网络段中的错误(见图13)。

    图13.

    当然也可以在一个块中的最后一个网络只调用一次,如果程序中存在多处错误,发生的第一个错误的详细信息将输出至输出参数 Error 或 ID 处, 当第一个错误消失后,第二个错误的错误信息才被输出至输出参数。

    是否可以在 OB1 中调用 GetError 或 GetError ID 指令?

    答:可以,使用方法与在 FC 或 FB 中调用类似。

    情况一:OB1 程序中出错:

    如果 OB1 中的程序出错,例如调用未组态硬件的 I 地址,但未调用 GetError 指令,CPU Error 灯会红色闪烁,诊断缓冲区报错(见图14),但CPU不会停机(仅限于CPU 固件版本 V2.0 以上版本,固件版本为 V1.0 的 CPU 在此种情况下会停机)

    图14.

    此时如果在 OB1 中最后一条网络调用 GetError 或 GetErrorID 指令,则诊断缓冲区的报错信息消失,CPU 指示灯恢复正常。

    情况二:OB1 本身的网络中没有错误,但在 OB1 中调用的块中存在错误, 例如FC1中存在错误 :

    1) 如果 OB1 中无条件调用的块例如 FC1 出错,OB1的其它网络没有错误,FC1 中有错误但并没有调用 GetError 指令,CPU Error 灯也会红色闪烁,诊断缓冲区报错(见图15),但 CPU 不会停机( 仅限于 CPU 固件版本 V2.0 以上版本,固件版本为 V1.0 的 CPU 在此种情况下会停机), 当在 FC1 调用 GetError 指令后,CPU 报错信息消失,指示灯恢复正常。

    图15.

    2) 如果 OB1 中有条件调用块,例如 FC1,但 FC1 在 OB1 中的执行条件没有满足,则 CPU 不会报错。一旦 FC1 调用条件满足被执行,且 FC1 中的错误一直存在,则 CPU Error 灯也会闪,诊断缓冲区报错(见图15), 但 CPU 不会停机(仅限于CPU 固件版本 V2.0 以上版本,固件版本为 V1.0 的 CPU 在此种情况下会停机)。

    3) 如果 OB1 中调用的块 FC 有错误,在 OB1 中调用了 GetError 指令,但出错的块 FC1 中未调用 GetError 指令,则 CPU 也会出现指示灯 Error 红色闪烁,诊断缓冲器报错。见图16。

    图16.

    总结: 由此可见, GetErrorID 或GetError 指令是基于块的指令,只能诊断调用它的块中的错误,如果出错的程序中未调用该指令,则无法诊断该块中的错误。


    • 评论
    • 分享

      扫码分享

    • 收藏
    • 点赞
    • 纠错
     

    隐私政策更新提示

    欢迎您来到西门子数字化工业支持中心网站!我们使用cookies来确保您能最好地使用我们的网站,进行网站分析并根据您的兴趣定制内容。我们有时会与第三方共享cookie数据。继续浏览本网站,即表示您同意我们使用cookies。您亦可以参考西门子数据隐私政策以了解更多相关信息。

    同意并继续浏览
    信息提示
    很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。