错误处理
在使用 MELSEC Communication 插件时,基本上 PLC 内存中有两个字段用于指示存在错误:“gMV_ErrorCode”和“gMV_ErrorCause”。默认情况下,这些字段设置为 0,表示没有出现错误。
当插件启动时,“gMV_ErrorCode”字段设置为 1,表示不存在错误。如果出现错误,“gMV_ErrorCode”和“gMV_ErrorCause”字段都会更新以反映错误情况。PLC 需要通过请求“AcknowledgeError”命令,即通过将“gMV_ReqCommandCode”设置为相应的命令代码来确认错误。有关可用命令代码的更多信息,请参阅插件与 PLC 之间的通讯。
插件会将“gMV_AckCommandCode”设置为相同的命令代码以作响应。在 PLC 重置“gMV_ReqCommandCode”、“gMV_ErrorCode”和“gMV_ErrorCause”后,插件也会将“gMV_AckCommandCode”重置为 0。通过这种握手机制,PLC 知道错误字段已更新。
如果在“gMV_ErrorCode”和“gMV_ErrorCause”中仍显示前一个错误时出现新错误,不会用新的错误信息覆盖这些字段。而是先处理前一个错误,在“gMV_AckCommandCode”重置为 0 后再将第二个错误写入错误字段。如果“gMV_ErrorCode”中的值在“gMV_AckCommandCode”重置后保持不变,表示再次出现相同的错误。这时,必须再次执行“AcknowledgeError”命令才能确认第二个错误。如果在此期间没有出现其他错误,“gMV_ErrorCode”字段的值将重置为 1。这表示所有错误都已得到确认。
MELSEC Communication 插件还支持心跳模式,该模式允许 PLC 监控与 MERLIC 的连接并处理任何意外的连接丢失。有关更多信息,请参阅gMV_Heartbeat部分。
gMV_ErrorCode
如果出现错误,此字段包含一个表示错误代码的数字无符号 32 位整数。根据插件开发 API 提供的错误定义,错误代码提供有关严重程度、受影响组件和错误性质的信息。
错误的严重程度由错误代码中最高有效的 4 位表示。我们区分以下严重程度:
|
值 |
严重程度 |
|---|---|
|
1 |
关键 |
|
2 |
错误 |
|
4 |
警告 |
发生错误的受影响组件由较低有效的后四位表示。下表显示可能的组件:
|
值 |
受影响组件 |
|---|---|
|
1 |
视觉系统 (MERLIC) |
|
2 |
MVApp/配方 |
|
4 |
插件主机 |
|
8 |
MELSEC Communication 插件 |
根据插件开发 API 提供的 MV_CODE_* 定义,最低有效的 8 位指示错误的性质。您可以在《通讯插件开发手册》中的 API 头文件 mv_error_def.h 文档中找到定义。
例如,如果“gMV_ErrorCode”字段包含十六进制错误代码 0x2139,则相应的位表示由于图像采集错误 (0x39),视觉系统 (0x0100) 中出现错误 (0x2000)。
gMV_ErrorCause
此字段指示导致错误的命令。因此,它具有与“gMV_ReqCommandCode”和“gMV_AckCommandCode”字段中给定的数值相同的数值。有关可用命令及其代码的更多信息,请参阅插件与 PLC 之间的通讯。
有时,错误可能自发地出现而并非由任何命令引起,例如,当与相机的连接丢失时。在此类情况下,“gMV_ErrorCause”具有表示“NoCommand”的值 0。只有由相同 MELSEC Communication 插件实例触发的命令引起的错误以及自发错误会被处理。因此,由另一个插件实例发出的命令引起的错误会被忽略。
gMV_Heartbeat
该字段包含一个用于心跳模式的变量。它可以指示 MERLIC 和 PLC 间的连接是否处于活动状态。PLC 可以对该字段进行不断监视,以检查连接情况,并可通过配置对任何意外的连接丢失做出反应。
该变量以一个无符号 16 位整数的计数器表示。当 MERLIC 已连接时,计数器由插件进行更新。如果 MERLIC RTE 和插件正在运行,则会出现这种情况。最初,计数器的值为 0,表示 MERLIC 未连接。例如,可能是因为插件尚未启动或已经停止。当 MERLIC 已连接时,则按特定心跳间隔开始计数。如果计数器值达到 WORD 值的限制,该值将在恢复计数前重置为 1。
如果 MERLIC 的连接丢失(例如,由于网络问题),计数器将不再更新。为确保 PLC 能够检测并处理任何意外的连接丢失,应对“gMV_Heartbeat”字段进行监视。