在STEP 7 Basic V10.5中如何使用本地错误处理查询出现的错误?

说明
使用扩展指令 "GetError" 和 "GetErrorID" 可以查询块中出现的错误并评估相关错误数据。这样可以避免 CPU 进入停机模式并继续程序的运行。n

  • "GetErrorID" 指令的输出参数 "ID"是Word数据类型,它包含第一条出现错误的ID.n
  • "GetError" 指令的输出参数"ERROR"是 "ErrorStruct" 系统数据类型,它包含更多关于出现的错误的信息。n
  • 当第一条错误被清除后,上面两条指令给出下一条错误的ID和错误数据。n
  • 可以在OB、FB、FC块中使用本地错误处理。n
  • 为了评估错误,必须将上述指令插入到可能出现错误的块里面。(例如 I/O 访问错误)n
  • 也可以使用上述指令将关于错误状态的信息传给调用它的块。要实现该功能,需要将上述指令放在调用块的最后一句调用。

下面是几个上述的本地错误处理的例子。更多关于上述指令及其输出参数的信息可以在 STEP 7 Basic 在线帮助的以下主题中找到:n

  • 本地错误处理的机制n
  • GetErrorn
  • GetErrorIDn
  • 使能块的本地错误处理

例子 1: I/O访问错误
当模块不存在或模块有缺陷时直接访问 I/O,CPU 会进入停机模式。在程序代码中加入"GetError" 指令,在 I/O 访问错误时可以避免缺省的系统反应(进入停机模式)。当读错误时,程序使用替代值 0 继续处理。 n

  1. 错误数据传输至DB15 ("Diagnostic")的结构体变量 "Error" 中。转换器读取结构体变量中的 "Diagnostic.Error.AREA" ,并将其从 Byte 类型转换为 UInt 类型。n
  2. 第一个操作 "Same" 查询存储区 "AREA" 与 I/O 区是否一致。I/O 区具有识别符 "P" 和16进制代码 "16#80" (对应于无符号整数128)n
  3. 第二个操作 "Same" 检查 I/O 模块的起始地址。结构体里的 "OFFSET" 包含相应地址的操作数。所以此处对于输入地址2,应与其相应的值16比较(OFFSET=2x8=16).n
  4. 如果两个 "Same" 操作都满足,标志位 M40.0 (I/O_Addr_2) 的值为真

在STEP 7 Basic V10.5中如何使用本地错误处理查询出现的错误?
图. 01

例子 2: 参数化的数据块在CPU中不存在
如图02中 MOVE 指令所示,作为参数的 DB22 在CPU中并不存在。T错误数据传送到DB15 ("Diagnostic")的结构体变量中。图 02 表示了 LAD程序和DB15的在线视图。T存储在DB15 "Diagnostic" 中的结构体变量 "Error" (数据类型: ErrorStruct) 可以在不同的 FB, FC 或 OB 中进一步编程处理。

DB15 的变量监视提供了如下信息:

ERROR_ID: 16#253A 全局数据块不存在
REACTION: 16#01 读错吴,程序利用替代值继续处理
BLOCK_TYPE: 3 FB"块的代码.
CODE_BLOCK_NUMBER: 11 出现错误的程充块的块号 11.
AREA: 16#84 DB的存储区.
DB_NUMBER: 22 DB22 不存在

FB11中打开了并不存在于CPU中的 DB22.

在STEP 7 Basic V10.5中如何使用本地错误处理查询出现的错误?
图. 02

例子 3: 数据块的操作数超出有效区
图. 03 演示了对一个读错误的处理。与前两个例子一样,指令 "GetError" 将错误信息传到了 DB15 ("Diagnostic") 的结构体变量 "Error" 中。

  1. 结构体内的 "DB_NUMBER" 包含出错DB块的块号 (例如对于DB20,则该值为20) ,将该值用"MOVE" 指令传送给 MW30.
  2. 结构体内的 "OFFSET" 包含相关的操作数的地址 (例如DB块中的第 40位). 为得到 Byte 地址,使用"DIV"指令,把该值 除以8(8 bits),结果 (DB中的Byte地址) 存储在MD32中。
  3. 本例中,使用"Greater"指令查询DB访问地址是否超过了 2 字节,使用 "Same" 指令查询DB的存储区 (DB: 16#84)是否是相关的。在这之前,结构体中的 "AREA" 必须先从Byte类型转换为 Int 类型。
  4. 如果"Greater" 和 "Same"两个条件都满足,标志位 M10.1 ("Activity") 置1.

在STEP 7 Basic V10.5中如何使用本地错误处理查询出现的错误?
图. 03

说明
只要将指令 "GetError" 和 "GetErrorID" 中的一个插入到网络并编译下载至CPU中,块的本地错误处理就使能,系统响应(例如停机模式)被忽略。这两个指令可以在文件夹"Program Control Instructions" 的 "Extended instructions" 中找到。

实验环境
本 FAQ 中提到的图片由 STEP 7 Basic 版本 V10.5+SP2 生成。

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc332533.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日 下午12:03
下一篇 2021年4月12日 上午12:00

相关推荐

发表回复

登录后才能评论