时间错误 OB (OB 80)

2021-07-26 浏览次数:289
时间错误 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/
top