时间错误 OB (OB 80)
说明
CPU 操作系统如果在执行 OB 时出错,就会调用 OB 80,此类错误包括:
**过循环时间
OB 执行期间的确认错误
设置时间转发(跳过时间)以启动 OB
例如,如果在完成某个循环中断 OB 的**次执行之前,发生了该 OB 的启动事件,则操作系统调用 OB 80。
如果未对 OB 80 编程,则 CPU 切换为 STOP 模式。
可使用指令 "DIS_IRT" 禁止调用时间错误 OB,使用指令 "EN_IRT" 重新调用,并使用指令 "DIS_AIRT" 和 "EN_AIRT" 对其进行延时。
提示 如果因**出了循环时间而导致在同一循环内调用了两次 OB 80,则 CPU 转为 STOP 模式。通过在适当情况下调用指令 "RE_TRIGR",可防止这种情况。 |
请注意“Report System Errors”的使用
Report System Errors”将延时执过程中的中断处理时间。
如果满足“Report System Errors”的执行时间 > 50% 的循环时间这一条件,这种效果将更加明显(这里,“Report System Errors”的执行时间指的是循环时间内“Report System Errors”所有处理时间的总和)。这会导致调用时间错误 OB 并有可能导致 CPU STOP(如果未装载时间错误 OB)。
可以使用以下措施来防止这种情况:
如果使用等时同步模式中断 OB(OB 61 到 OB 64),必须确保每单位时间的调用频率比之前要低。这可以通过为每个等时同步模式中断 OB 增加相关的“应用循环系数”参数来实现。
增加比率(循环时间 - “Report System Errors”的执行时间)/(“Report System Errors”的执行时间)。可使用以下两个选项进行该操作:
- 如果在循环中断 OB(OB 30 到 OB 38)中调用了“Report System Errors”,那么请增加相关 OB 的循环时钟。
- 在 OB 1 中,增加与“Report System Errors”无关的程序部分的执行时间。这可以通过使用“WAIT”指令来实现。
时间错误 OB 的本地数据
下表列出了时间错误 OB 的临时 (TEMP) 变量。系统选择 OB 80 的默认名称作为变量名称。
变量 | 数据类型 | 说明 |
---|---|---|
OB80_EV_CLASS | BYTE | 事件类别和标识符:B#16#35 |
OB80_FLT_ID | BYTE | 错误代码(可能值:B#16#01、B#16#02、B#16#05、B#16#06、B#16#07、B#16#08、B#16#09、B#16#0A、B#16#0B) |
OB80_PRIORITY | BYTE | **等级:OB 80 以**等级 26 在 RUN 模式下运行,如果发生 OB 请求缓冲区溢出,则以**等级 28 运行 对于 S7-1500 CPU:**级 22 |
OB80_OB_NUMBR | BYTE | OB 编号 (80) |
OB80_RESERVED_1 | BYTE | 预留 |
OB80_RESERVED_2 | BYTE | 预留 |
OB80_ERROR_INFO | WORD | 错误信息:取决于错误代码 |
OB80_ERR_EV_CLASS | BYTE | 引起错误的事件的类别 |
OB80_ERR_EV_NUM | BYTE | 引起错误的事件的编号 |
OB80_OB_PRIORITY | BYTE | 错误信息:取决于错误代码 |
OB80_OB_NUM | BYTE | 错误信息:取决于错误代码 |
OB80_DATE_TIME | DATE_AND_TIME | 调用 OB 时的日期和时间 |
与错误代码相关的变量具有以下含义:
错误代码 | 变量 | 位 | 含义 |
---|---|---|---|
B#16#01 | **出循环时间 | ||
OB80_ERROR_INFO | 上一扫描周期的运行时间 (ms) | ||
OB80_ERR_EV_CLASS | 触发该中断的事件类别 | ||
OB80_ERR_EV_NUM | 触发该中断的事件编号 | ||
OB80_OB_PRIORITY | 出错时正在进行处理的 OB **等级 | ||
OB80_OB_NUM | 出错时处于激活状态的 OB 编号 | ||
B#16#02 | 仍在处理请求的 OB。 | ||
OB80_ERROR_INFO | 所请求 OB 相应的临时变量。该变量的值取决于 OB80_ERR_EV_CLASS 和 OB80_ERR_EV_NUM。 | ||
OB80_ERR_EV_CLASS | 触发该中断的事件类别 | ||
OB80_ERR_EV_NUM | 触发该中断的事件编号 | ||
OB80_OB_PRIORITY | 导致错误的 OB 的**等级(例如:"7" 表示 OB 30 的**等级 7,该 OB 本应该启动,但没能启动) | ||
OB80_OB_NUM | 导致错误的 OB 的编号(例如:"30" 表示 OB 30,该 OB 本应该启动,但没能启动) | ||
B#16#05 | 由于时间跳变而导致时间中断**时 | ||
OB80_ERROR_INFO | 置位位 0: | 对于时间中断 0,起始时间在过去 | |
... | |||
置位位 7: | 对于时间中断 7,起始时间在过去 | ||
位 8 到 15 | 未使用 | ||
OB80_ERR_EV_CLASS | 未使用 | ||
OB80_ERR_EV_NUM | 未使用 | ||
OB80_OB_PRIORITY | 未使用 | ||
OB80_OB_NUM | 未使用 | ||
B#16#06 | 与错误代码 B#16#05 相同 | 在 HOLD 后重新进入 RUN 而**时的时间中断 | |
B#16#07 | 与错误代码 B#16#02 相同 | 当前**等级的 OB 请求缓冲区溢出(一个**等级的每个 OB 启动请求都将输入到相关的 OB 请求缓冲区中;该 OB 结束后,将再次删除该条目。如果一个**等级中包含的 OB 启动请求数量大于相关 OB 请求缓冲区所允许的较大条目数,则调用 OB 80 且错误代码为 B#16#07。) | |
B#16#08 | 与错误代码 B#16#02 相同 | 等时同步模式中断 - 时间错误 | |
B#16#09 | 与错误代码 B#16#02 相同 | 因中断负载过高而导致中断丢失 | |
B#16#0A | 在 CiR 之后恢复 RUN 模式 | ||
OB80_ERROR_INFO | CiR 同步时间(单位为 ms) | ||
B#16#0B | 工艺同步中断 - 时间错误 | ||
OB80_ERR_EV_NUM | 触发该中断的事件编号:W#16#116A | ||
OB80_OB_PRIORITY | 出错时正在进行处理的 OB **等级 | ||
OB80_OB_NUM | 出错时处于激活状态的 OB 的编号:65 | ||
B#16#0C | (仅 S7-1500 R/H CPU)*二次**出循环时间 | ||
OB80_ERROR_INFO | 上一扫描周期的运行时间 (ms) | ||
OB80_ERR_EV_CLASS | 触发该中断的事件类别 | ||
OB80_ERR_EV_NUM | 触发该中断的事件编号 | ||
OB80_OB_PRIORITY | 出错时正在进行处理的 OB **等级 | ||
OB80_OB_NUM | 出错时处于激活状态的 OB 编号 |
shtxjd.cn.b2b168.com/m/