在本文中,我们将继续讨论西门子 PLC 中不同类型的组织块。这次我们将讨论 OB121 或 Tia Portal 中的编程错误中断。
内容:
- 什么是编程错误中断 OB121?
- 编程错误的示例。
- 如果检测到编程错误会发生什么?
- 在 TIA Portal 中模拟编程错误。
- OB121 如何有助于防止编程错误?
- 结论。
什么是编程错误中断 (OB121)?
OB121 是一个组织块,如果运行逻辑时发生编程错误,PLC 操作系统将调用该块。请注意,我们并不是在讨论在尝试将逻辑下载到 PLC 时编译器会捕获的编程错误。见图1。
图 1 – 一些编程错误会被编译器捕获
从最后一张图可以看出,我的 PLC 逻辑中有一个编程错误;网络 1 的输入和输出中缺少一些操作数。但是,编译器甚至在将逻辑下载到 PLC 之前就捕获了该错误。图1中的错误不是可以触发需要调用 OB121 的编程错误类型。
PLC 程序中编译器无法发现的错误,但在 PLC 运行时仍然会导致逻辑出现问题,这就是我们所说的编程错误。这些错误将触发操作系统对 OB121 的调用。
编程错误示例
以下是 PLC 逻辑中可能导致编程错误的一些错误示例:
- 超出了块调用的最大嵌套深度。
- 您使用了 NULL 指针来寻址操作数。
- 未知指令。
- 寻址字符串的长度信息不正确。
- 读取时面积长度错误。
- 写入时区域长度错误。
- 计时器编号错误
- 访问未加载的数据库;DB 编号位于允许的区域内。
- 数据库不存在。
这些错误以及更多错误可能会导致 PLC 中的编程错误。您可以查看 TIA Portal 的帮助部分,了解可能导致 PLC 编程错误的其他原因。
如果检测到编程错误会发生什么?
当您的 PLC 检测到编程错误时,可能会发生以下三个事件之一。
- 您的 PLC 将显示错误并进入停止模式。
- 您的 PLC 将显示错误,但继续运行您的逻辑。
- 您的 PLC 将显示错误,然后尝试解决该错误。
这三个事件基本上取决于您的 PLC 编程。这意味着您的代码将决定操作系统在检测到编程错误时的行为方式。
在 TIA Portal 中模拟编程错误
为了更好地理解 PLC 的行为方式,我们将创建一个简单的程序,在其中引发编程错误,然后我们将看看会发生什么。见图2。
图 2 – 简单的程序逻辑
我们创建的逻辑非常简单,当 InitiateProgError 已启用时,值 126 将被移至 DB52.DBW16 区域。请注意,我们还没有创建 DB52。所以,这将是我们的编程错误。请注意,在编译或下载到 PLC 期间不会捕获此错误。见图 3 和 4。
图 3 – 编译器未捕获的错误
查看该块如何成功编译,同时包含编程错误。
图 4 – 下载到 PLC 的块
该块再次下载到 PLC 时出现编程错误。
现在,让我们模拟一下 PLC 程序,看看会发生什么。PLC 代码的模拟参见动画1。
动画1
正如您从上面的动画中看到的,PLC 错误 LED 将呈红色闪烁几秒钟,然后 PLC 将进入停止模式。
进入 PLC 在线诊断看看发生了什么。见图5。
图 5 – PLC 在线和诊断
您在动画中看到的内容与您在上一张图片中看到的内容完全相同。它们可以分为 3 个步骤:
- PLC 检测到编程错误,即 OB52 未加载。
- 操作系统将触发对 OB121 的调用,但在我们的逻辑中并没有创建 OB121。
- 当 PLC 发现我们的逻辑中没有创建 OB121时,操作系统就会发起 STOP 请求。PLC 将进入 STOP 模式。
OB121 如何有效防止编程错误?
让我们将 OB121 添加到 PLC 代码中,看看情况会如何变化。见图6。
图 6 – 添加 OB121
创建 OB121 并将其添加到 PLC 逻辑中后,让我们看看模拟中会发生什么。
请记住,我们尚未在 OB121 内编写任何 PLC 逻辑。参见动画2。
动画2
从动画2 中可以看到,当 InitiateProgError 被触发时,PLC ERROR LED 将呈红色闪烁,但 PLC 将继续运行。
这意味着 PLC 不会进入 STOP 模式。 让我们检查一下在线诊断,看看到底发生了什么。见图7。
图 7 – 错误并未导致 PLC 停止
从图中可以看出,PLC 检测到错误,但没有进入 STOP 模式。它将跳过此错误,继续循环并从头开始。
当再次出现错误时,它将再次检测到错误,并在诊断中发出警报。跳过错误并继续。这意味着 PLC 在每个扫描周期都会发出相同的警报。这就是为什么在图片中您看到事件不断触发并且警报在每个扫描周期重复。
因此,只要有一个空的 OB121 就可以让您保持 PLC 运行和扩展,从而保持过程运行。
但是,我们还可以做更多的事情,我们可以尝试捕获这个错误并消除它。另外,我们可以尝试显示检测到的编程错误的类型。
确定错误类型
OB121 有一个内部故障 ID 标识符,我们可以用它来显示故障类型,也可以作为 HMI 上的警报。在 OB121 内部,我们将创建一个简单的 MOVE 指令,在该指令中,我们将 OB121 的 Fault_ID 输入推送到全局 DB 内定义的存储区域。见图8。
图 8 – 识别错误类型
从上图可以看出,当发生编程错误时,Fault_ID 将被推送到 Data.ProgErrorID 中。见图9。
图 9 – 编程错误 Fault_ID
可以看到故障 ID 为 3A。如果您查看 TIA Portal 帮助您可以找到该故障的含义。
3A:访问未加载的 DB;DB 编号位于允许的区域内。
捕获错误
这只是意味着,在找出原因后尝试解决 PLC 编程错误。这主要取决于错误是什么以及您希望如何处理它。我们将模拟错误的解决方案,看看 PLC 将如何表现。
针对我们创建的错误的实际解决方案是仅创建 DB52 或使用已创建的数据块。
但为了模拟,我们将只添加一个简单的触点,当编程错误发生时,该触点将打开以捕获该错误。见图 10 和 11。
图 10 – 捕获错误
每当调用 OB121 时,都会设置 CatchError。
图 11 – 消除错误
每当调用 OB121 时,都会设置 CatchError,用于捕获网络 1 中的编程错误。PLC 模拟请参见动画 3。
动画3
从上面的动画可以看出,当 InitiateProgError 被触发时,PLC 会暂时出错,然后错误会被清除,PLC 始终处于 RUN 模式。
结论
如果代码中存在编程错误,只需在逻辑中包含一个空 OB121,即可确保 PLC 不会进入 STOP 模式。您稍后还可以使用 OB121 来识别错误并解决它。