说明
只要在访问模块中的数据时出错,CPU 操作系统就会调用 OB 122。 例如,如果在访问信号模块中的数据时,CPU 检测到读错误,则操作系统将调用 OB 122。
I/O 访问错误 OB 的功能
OB 122 的执行**等级与中断块相同。 如果未对 OB 122 编程,则 CPU 从 RUN 切换为 STOP 模式。
S7 提供有以下指令,用于在程序执行过程中屏蔽/中断屏蔽 OB 122 的启动事件。
指令“MSK_FLT”可屏蔽特定的错误代码。
指令“DMSK_FLT”可取消屏蔽使用指令“MSK_FLT”屏蔽的错误代码。
指令“READ_ERR”可读取事件状态寄存器。
I/O 访问错误 OB 的本地数据
下表列出了 I/O 访问错误 OB 的临时 (TEMP) 变量。已选择 OB 122 的默认名称作为变量名称。
变量 | 数据类型 | 说明 |
---|---|---|
OB122_EV_CLASS | BYTE | 事件类别和标识符: B#16#29 |
OB122_SW_FLT | BYTE | 错误代码: B#16#42: 读取时发生 I/O 访问错误。 B#16#43: 写入时发生 I/O 访问错误。 |
OB122_PRIORITY | BYTE | 出错 OB 的**等级 对于 S7-1500 CPU: **级,默认值: 7 |
OB122_OB_NUMBR | BYTE | OB 编号 (122) |
OB122_BLK_TYPE | BYTE | 出错块的类型(B#16#88: OB,B#16#8C: FC,B#16#8E: FB)(未在此处为 S7-300 输入有效编号) |
OB122_MEM_AREA | BYTE | 存储区和访问类型: 位 7 到 4: 访问类型 - 0: 位访问 - 1: 字节访问 - 2: 字访问 - 3: 双字访问 位 3 到 0: 存储区 - 0: I/O 区域 - 1: 过程映像输入 - 2: 过程映像输出 |
OB122_MEM_ADDR | WORD | 出错的存储器地址 |
OB122_BLK_NUM | WORD | 具有导致错误的 MC7 命令的块编号(未在此处为 S7-300 输入有效的编号) |
OB122_PRG_ADDR | WORD | 导致错误的 MC7 命令的相对地址(未在此处为 S7-300 输入有效值) |
OB122_DATE_TIME | DATE_AND_TIME | 调用 OB 时的日期和时间 |
OB 122 示例程序
下面的示例程序提供了指令“REPL_VAL”中的一个替换值。 若输入模块故障,则指令 L PEB0 的处理会生成一个同步错误,并启动 OB 122。由于故障,装入命令读入值 0。 但是,可以使用指令“REPL_VAL”,*适用的任何替换值。 该指令可以使用*的替换值替换 ACCU 内容。
STL | 说明 |
---|---|
L B#16#42 | //“读取时发生 I/O 访问错误”事件的标识符 |
L #OB122_SW_FLT | //OB 122 中的错误代码 |
==I | //若相同, |
SPB Qfeh | //然后跳转到 Qfeh |
L B#16#43 | //“写入时发生 I/O 访问错误”事件的标识符 |
<>I | //若与 OB 122 中的错误代码不同, |
SPB STOP | //然后跳转到 STOP |
Qfeh: | |
CALL "REPL_VAL" | //调用“REPL_VAL”指令 |
VAL:= DW#16#2912 | //装入 ACCU 1 的替换值 |
RET_VAL:= #error | //将返回值保存到 #error 中 |
L #error | //“REPL_VAL”指令的返回值 |
L 0 | |
==I | //若等于 0(没有错误发生), |
BEC | //则结束块的执行 |
STOP: | |
CALL "STP" | //调用“STP”指令: CPU 切换为 STOP 模式。 |
shtxjd.cn.b2b168.com/m/