>CPU 的过载特性
发生某个事件时, 系统将触发相应的 OB 执行。根据 OB 的优先级和当前处理器的负载情况,如果发生过载, 则在 OB 执行前可能会产生一段时间延时。因此, 用户程序在处理先前事件的OB 时, 相同的事件可能会发生一次或多次。此时, CPU 将执行以下操作:操作系统将根据发生的顺序, 照事件的优先级对其进行排列。CPU 随后会将最早的事件当作优先级最高的事件并处理关联 OB。OB 处理完毕后, CPU 会处理下一事件的 OB。
如果要控制临时过载, 则可限制源自同一问题的排队事件的数量。当达到一个特定循环中断OB 中未决触发的最大数目时, 下一个事件将丢弃。
如果类似事件的出现速度快于 CPU 处理这些事件的速度, 则会发生过载。类似事件是指单个源中的事件, 如特定循环中断 OB 中的启动事件。
待排队的事件
OB 参数“待排队的事件”(Events to be queued)
用于指定操作系统在相应队列中将稍后处理的类似事件数目。例如, 如果此参数值为 1, 则仅临时存储一个事件。
如果达到队列中的最大类似启动事件数目, 则只对每个额外的启动事件进行计数, 然后将其丢弃。在事件的下一调度处理过程中, CPU 通过“Event_Count”输入参数(以启动信息形式) 提供已丢弃启动事件的数目。然后对过载情况作出适当响应。然后, CPU 将丢失事件的计数器重置为 0。
报告事件溢出到诊断缓冲区中
例如, 如果 CPU 首先丢弃了循环中断 OB 的启动事件, 则之后的操作将取决于该 OB 参数“报
告事件溢出到诊断缓冲区中”(Report event overflow into diagnostic buffer)。如果已选中该复
选框, CPU 将针对此事件源的过载情况在诊断缓冲区中输入事件。如果再次发生过载的情况
(溢出计数器从 0 变为 1), 则会在下一 OB 结束处输入另一诊断缓冲区条目。
启用时间错误
循环中断 OB 参数“启用时间错误”(Enable time error) 用于指定在达到类似事件的特定过载级别时是否调用时间错误 OB。使用 OB 参数“启用时间错误”(Enable time error) 设定达到类似事件
的限值之前对过载的响应。CPU 丢弃类似事件之前的响应。
默认情况下不会设置“启用时间错误”(Enable time error) 参数。
时间错误的事件阈值
选中“启用时间错误”(Enable time error) 复选框可启用“时间错误的事件阈值”(Event thresholdfor time error) OB 参数。使用“时间错误的事件阈值”(Event threshold for time error) OB 参数指定 CPU 调用时间错误 OB 之前队列中允许的类似事件数量。
“时间错误的事件阈值”(Event threshold for time error) 参数的值范围为:
1 ≤ “时间错误的事件阈值”(Event threshold for time error) ≤“待排队的事件”(Events to be queued)
示例 1
下例显示了多个类似事件的出现速度快于 CPU 处理关联 OB 的速度时 CPU 的响应。在示例 1中, 用户选择了以下参数分配:
下图显示了事件调用关联 OB 后的处理序列。
发生的事件调用 OB 后, 事件会占用 OB 的一个时隙。CPU 处理完该事件后, 被占用的时隙会再次可用。如果 CPU 尚未完成对发生事件 OB 的处理, 随后发生的事件在这段时间内会各占用OB 的其它时隙。此数目超过配置的待排队事件数目后, 这些事件会被丢弃, 并会由溢出计数器进行计数。完成长时间运行的 OB 时, CPU 会在诊断缓冲区中创建一个条目, 并会将溢出计数器置零 (①)。CPU 处理完长时间运行的 OB 后, 会接着处理依次排队事件的 OB。下次出现新事件时, CPU 会将之前的复位溢出计数器值写入 OB 的启动信息中。CPU 随后会处理 OB(②)。
示例 2
在示例 2 中, 用户选择了以下参数分配:
与示例 1 不同, 示例 2 中的 CPU 在超出所组态的事件阈值后将请求时间错误。仅当 OB 的所有时隙同时释放时, 才会出现其它时间错误。