0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

西门子博图:错误处理机制概览

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 2023-11-25 11:35 次阅读

概览

可通过以下几种不同的错误处理机制进行参数跟踪或编程或访问错误:

机制 任务 错误处理
使能输入 EN 或 IF 指令 阻止程序代码的执行 本地
使能输出 ENO 或二进制结果位 指示一个错误
参数输出 RET_VAL、STATUS 和 ERROR
GET_ERROR 和 GET_ERR_ID 指令 响应一个错误
组织块 全局

参数值错误时的本地错误处理

错误发生后,除了通过本地错误处理机制立即进行响应,也可通过程序代码内进行特定响应。此时,可以在程序块(OB、FB 或 FC)中直接编写本地错误处理方式,但系统仅对发生在该程序块中的错误进行处理。

本地错误处理的优势

可根据该错误信息编写程序块中发生相应错误时的响应措施。

所编写的错误评估和错误响应不会中断程序的循环运行。

本地错误处理不会影响系统性能。如果错误未发生,则不会执行所编写的错误分析和响应措施。

下标列出了各种不同的本地错误处理方式:

错误处理方式 适用范围 说明
EN/ENO 机制 1) S7-300 / S7-400 / S7-1200 / S7-1500 通过使能输出 ENO 检测特定的运行时错误并进行相应处理。后续指令的执行取决于该使能输出的信号状态。通过 EN/ENO 机制,可有效避免程序崩溃。块状态将以布尔型变量形式进行传递。
有关 EN/ENO 机制的更多信息,请参见:
EN/ENO 机制的基本知识
输出参数 STATUS 和 ERROR S7-300 / S7-400 / S7-1200 / S7-1500 STATUS 和 ERROR 参数作为系统函数块 (SFB) 的返回值时,可查询块特定的错误信息,并按照预定义的结构进行输出。
有关输出参数的更多信息,请参见信息系统中相应指令的说明。
输出参数 RET_VAL S7-300 / S7-400 / S7-1200 / S7-1500 输出参数 RET_VAL 作为顺序功能图 (SFC) 的返回值时,可显示常规的错误代码或特定的错误代码。所谓常规的错误代码对应于所有指令,而特定的错误代码仅适用于特定指令。最多可以输出一个 INT 或 WORD 数据类型的变量。
有关 RET_VAL 输出参数的更多信息,请参见:
通过输出参数 RET_VAL 评估错误
1) 如果指令的参数未导致任何存储器访问错误,则相关的使能输出 ENO 将返回信号状态“1”,并在输出中返回可查询的有效值。

发生编程错误时的全局和本地错误处理

通过全局和本地错误处理,可立即对发生的错误进行响应而无需将 CPU 切换为“STOP”模式。可通过以下方式处理编程错误和访问错误:

全局错误处理的类型 适用范围 说明
程序执行错误 OB (OB 85) S7-300 / S7-400 如果未使用 OB 85,则在发生程序执行错误时 CPU 将从 RUN 模式切换为 STOP 模式,并在诊断缓冲区内生成一个条目。
有关 OB 85 的更多信息,请参见:
优先等级错误组织块 (OB 85)
发生编程和访问错误时的 CPU 内部错误处理 S7-1200 发生错误时,CPU 将在诊断缓冲区中生成一个条目并保持为 RUN 模式,无需进行额外编程。
编程错误 OB (OB 121) S7-300/ S7-400 / S7-1500 如果未使用 OB 121,则在发生编程错误时 CPU 将从 RUN 模式切换为 STOP 模式,并在诊断缓冲区内生成一个条目。
有关 OB 121 的更多信息,请参见:
S7-300 / S7-400:
编程错误组织块 (OB 121)
S7-1500:
编程错误 OB
I/O 访问错误 OB (OB 122) S7-300/ S7-400 / S7-1500 S7-300 / S7-400:
如果未使用 OB 122,则在发生访问错误时 CPU 将从 RUN 模式切换到 STOP 模式。
I/O 访问错误组织块 (OB 122)
S7-1500:
发生 I/O 访问错误时,CPU 将始终保持为 RUN 模式并在诊断缓冲区中生成一个条目。即使未使用 OB 122,也同样如此。
有关 OB 122 的更多信息,请参见:
I/O 访问错误 OB

通过 GET_ERROR 和 GET_ERR_ID 指令,可直接在程序代码中集成本地错误处理。也可通过接收有关错误的详细信息并在错误附近的程序中对其进行评估。此时,可以在程序块(OB、FB 或 FC)中直接编写本地错误处理方式,但系统仅对发生在该程序块中的错误进行处理。

本地错误处理的类型 适用范围 说明
GET_ERROR 和 GET_ERR_ID 指令 S7-1200/S7-1500 通过该指令,可获得错误 ID 或详细的错误信息,并在程序代码中编写直接响应。
查询第一个错误信息时,将再次启用系统存储器中该错误所在的存储空间。如果随后发生其它错误,则将输出下一个错误的信息。

采用本地错误处理时,可通过 GET_ERROR 指令进行查询。支持以下几种默认的响应方式:

发生写错误时:将忽略该错误并继续程序运行。

发生读错误时:程序将继续运行,且算术指令的值将替换为“0”。

发生执行错误时:将停止该指令的运行,程序将运行下一条指令。

本地错误处理的优势

错误信息存储在系统存储器中,可对其进行查询和评估(如,通过 GET_ERROR 和 GET_ERR_ID 指令)。

可根据该错误信息编写程序块中发生相应错误时的响应措施。

所编写的错误评估和错误响应不会中断程序的循环运行。

本地错误处理对系统性能的影响要低于全局错误处理。如果错误未发生,则不会执行所编写的错误分析和响应措施。

如果在程序块中设置有本地错误处理,则在发生错误时将不执行全局错误处理。

说明
要防止在发生错误时 CPU 切换为 STOP 模式,无论是全局错误处理还是本地错误处理必须处理所有的编程错误和 I/O 访问错误。

示例:有关处理程序执行错误的示例

简介

本地错误处理可单独编程,也可与其它代码一起编程。为确保可识别程序中的所有错误,建议使用本地错误处理组合方案,如以下示例所示。

为提高错误分析的准确程度的错误分析,除输出参数 RET_VAL 之外,还可使用指令“GET_ERROR”或“GET_ERR_ID”。这些方案提供有错误代码,并在相应指令的描述中对其进行详细说明。

此外,RET_VAL 输出参数也可能不输出有效错误代码。如果在读取输入参数时发生访问错误(如,指令输出无法入),则这是因为指令执行已中断。此时,建议在用户程序中插入两条指令“GET_ERROR”和“GET_ERR_ID”。这是因为,发生此类错误时,这两条指令将返回可靠的错误信息。

错误的第一个指示符可以是状态字的 BR 位,也可以是使能输出 ENO 。如果返回信号状态“0”,则说明指令执行过程中出错。信号状态为“1”表示无错误,因而无需进行进一步错误分析,但存储器访问错误例外。此时,信号状态为“1”表示发生错误。

操作步骤

以下示例说明了如何在读取输入参数时识别访问错误:

按以下方式声明程序块的块接口
af580d44-8ac7-11ee-939d-92fbcf53809c.png
编写以下程序代码:
af6de196-8ac7-11ee-939d-92fbcf53809c.png

在程序段 1 中,调用指令“MOVE_BLK_VARIANT:块移动”。在 SRC 参数中,使用一个变量索引访问“SrcField”源区域。如果指令成功执行无错误,则使能输出 ENO 将返回信号状态“1”,同时程序执行跳转到程序段 4 中继续执行。

如果指令在执行过程中发生访问错误(如,由变量索引而引发),则程序段 2 中的指令“GET_ERR_ID:获取本地错误 ID”将返回错误 ID。程序段 2 中“UNEQUAL”的错误 ID 将与值“0”进行比较并返回结果 #Test2 = TRUE。在程序段 3 中,“EQUAL”的错误 ID 将与值“0”进行比较,并返回结果 #Test3 = TRUE。

此时,输出参数 RET_VAL 处的 #TagRet_Val 操作数将不返回有效错误代码。

例外

但也有一些指令不适用于以上示例中所列的错误处理方式。具体包括以下指令:

通常不支持 EN/ENO 机制的指令

禁用 ENO 的指令

S_COMP

PEEK、PEEK_BOOL、POKE、POKE_BOOL 和 POKE_BLK

即使发生访问错误,这些指令中的 BR 位或使能输出 ENO 也将设置为 TRUE。

以下示例中说明了如何在 STL 编程语言中编程可靠的错误处理方式:

af805574-8ac7-11ee-939d-92fbcf53809c.png

STL 说明
SET // 操作数 #Tag_ErrorID 将初始化为“0”。
L 0
T #Tag_ErrorID
CALL S_COMP // 调用该指令。
src_type := String // 参数 IN1 和 IN2 的数据类型
relation := EQ // 该指令的比较类型
IN1 := #StringArray.THIS[#index] // 对 ARRAY 元素的可变访问。
IN2 := 'STRING' // 将两个值互相比较。
OUT := #TagResult // 如果两个值相等,则操作数 #TagResult 的信号状态为“1”。
A BR // 查询 BR 位。
CALL GET_ERR_ID // 调用该指令。
RET_VAL := #Tag_ErrorID // 发生访问错误时,该指令将输出一个错误代码。

即使 BR 位的信号状态为“1”,也将检测到访问错误。通过评估指令“GET_ERR_ID:获取本地错误 ID”的操作数 #Tag_ErrorID,可查询该错误代码。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    38

    文章

    7484

    浏览量

    163759
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10854

    浏览量

    211568
  • 西门子
    +关注

    关注

    94

    文章

    3034

    浏览量

    115777
  • 状态机
    +关注

    关注

    2

    文章

    492

    浏览量

    27527
  • S7-1500
    +关注

    关注

    3

    文章

    300

    浏览量

    6392

原文标题:西门子博图:错误处理机制概览

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式编程错误处理机制设计

    本文主要总结嵌入式系统C语言编程中,主要的错误处理方式。文中涉及的代码运行环境如下。
    发表于 04-28 09:59 762次阅读
    嵌入式编程<b class='flag-5'>错误处理机制</b>设计

    Rust语言中错误处理机制

    可能的错误,实际运行中仍然可能出现各种各样的错误,比如文件不存在、网络连接失败等等。对于这些不可预测的错误,我们必须使用错误处理机制来进行处理
    的头像 发表于 09-19 14:54 1403次阅读

    嵌入式C编程常用的异常错误处理

    (Exception Handling) 虽然C语言本身不支持异常处理,但可以通过结构化的错误处理机制来模拟异常处理。 6. 日志记录 (Logging) 记录错误日志有
    发表于 08-06 14:32

    西门子无线预处理手册

    电子发烧友网为大家提供了西门子无线预处理手册.
    发表于 02-28 15:28 45次下载

    畅销西门子助听器价格表_西门子助听器价格大全

    畅销西门子助听器价格表_西门子助听器价格大全 1、西门子盒式助听器 AMIGA 176AO Pocket AMIGA 176AO 西门子助听器价格:441元
    发表于 08-23 12:19 1.4w次阅读
    畅销<b class='flag-5'>西门子</b>助听器价格表_<b class='flag-5'>西门子</b>助听器价格大全

    博世和西门子哪个好_博世和西门子的关系

    本文开始阐述了博世和西门子的关系以及分析了西门子和博世哪个更好,其次分析了西门子和博世的冰箱哪个更好,最后介绍了博世和西门子家电集团在中国的发展。
    的头像 发表于 04-04 09:30 15.9w次阅读

    西门子SETP7常见错误分析

    西门子STEP7编程常见错误分析解答。
    发表于 04-30 11:15 56次下载

    如何实现远程调试西门子PLC

    设备现场的PLC程序需要调整工艺流程,或者有小故障需要排除,就需要工程师到现场。随着物联网技术的成熟,通过4G网络远程监控和调试PLC已经常规化。西门子的PLC是市场上占有率最高的,差不多40%的市场占有率。那如何实现软件远
    的头像 发表于 10-13 09:14 4624次阅读
    <b class='flag-5'>博</b><b class='flag-5'>图</b>如何实现远程调试<b class='flag-5'>西门子</b>PLC

    西门子TIA的Modbus主站通讯

    西门子PLC因其市场占有率较高,且被广大用户使用,应用比较广泛,而其TIA平台得到了推广应用,本文将介绍使用CP341进行Modbus 主站通讯
    的头像 发表于 05-19 09:15 1948次阅读
    <b class='flag-5'>西门子</b><b class='flag-5'>博</b><b class='flag-5'>图</b>TIA的Modbus主站通讯

    西门子途: 有关处理程序执行错误的示例

    本地错误处理可单独编程,也可与其它代码一起编程。为确保可识别程序中的所有错误,建议使用本地错误处理组合方案,如以下示例所示。
    的头像 发表于 07-12 17:43 3598次阅读
    <b class='flag-5'>西门子</b><b class='flag-5'>博</b>途: 有关<b class='flag-5'>处理</b>程序执行<b class='flag-5'>错误</b>的示例

    西门子伺服电机维修故障处理技巧

    西门子伺服电机维修故障处理技巧
    的头像 发表于 11-23 10:56 2330次阅读

    西门子途中CPU对错误的反应

    如果CPU的操作系统检测到错误,它会以OB调用的形式搜索适当的错误处理。如果找到了相应的OB,则执行该OB并完成CPU的错误处理。如果适当的错误OB不可用,则CPU没有进一步的反应。
    的头像 发表于 12-11 17:12 954次阅读
    <b class='flag-5'>西门子</b><b class='flag-5'>博</b>途中CPU对<b class='flag-5'>错误</b>的反应

    西门子SCL练习1:使用FC计算平均值

    西门子SCL练习1:使用FC计算平均值
    的头像 发表于 01-02 10:25 2761次阅读
    <b class='flag-5'>西门子</b><b class='flag-5'>博</b><b class='flag-5'>图</b>SCL练习1:使用FC计算平均值

    C语言中的错误处理机制解析

    C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。
    的头像 发表于 02-26 11:19 505次阅读

    西门子PLC中OB块的功能详解

    块)是不可或缺的重要组成部分,它承担着PLC与外部设备通信、内部程序执行以及错误处理等多重任务。本文将对西门子PLC中OB块的功能进行详细的阐述,以期为读者提供全面而深入的了解。
    的头像 发表于 06-15 11:27 4585次阅读