西门子博途:处理块内的错误

科技   2024-11-08 21:22   吉林  

处理块内的错误用于指示本地错误处理的指令 GetError

GetErrorID 在此块

块属性“在块内处理错误”(Handle errors within block)

该设置既不会应用于块调用中,也不会传输到所调用的程序块中。如果没有为高级别和低级别的程序块编程专用的本地错误处理方式,则可应用系统设置。


操作步骤

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

  1. 按以下方式声明程序块的块接口:


  1. 编写以下程序代码:


在程序段 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 编程语言中编程可靠的错误处理方式:



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,可查询该错误代码。


机器人及PLC自动化应用
机器人技术讲解,PLC程序分析讲解,PLC机器人自动化培训. 以工业自动化培训为主.也会有些个人喜爱的军事和休闲.
 最新文章