获取 MVApp 结果 (Hilscher)

MERLIC 流程集成 MERLIC 用于集成在制造机器中的机器视觉系统。机器控制器(例如,可编程逻辑控制器 [PLC])必须能够控制集成视觉系统、监控执行情况和查询结果。因此,MERLIC 提供了一个流程集成模式以支持与机器控制器的通讯。 可使用应用程序“MERLIC RTE”在流程集成模式下启动,该应用程序随 MERLIC 安装一起提供。模式不会自动返回结果。您必须查询相应 MERLIC Vision App (MVApp) 迭代的结果。使用“GetResult”命令可触发结果的传输。相应的命令代码为 2。

必须在协议 FromPLCProtocol 中指定该命令。此外,还必须在成员 Selector 中定义要查询的结果的 ID。您可以在协议 FromMerlicProtocol 的成员 LastResultId 中找到 MERLIC 生成的上一个结果的 ID。

限制

如果请求的 MVApp 结果包含元组,则仅第一个元组元素的值会传输到 Hilscher 卡。其他元组元素的值无法访问。因此,在使用 Hilscher card进行流程集成时,建议避免定义可能获取元组值作为 MVApp 结果的工具结果。

获取结果

要查询特定 MVApp 迭代的结果,必须相应地在协议 FromPLCProtocol 中设置以下成员:

成员

描述

CommandCode

2

为命令 “GetResult” 定义代码值 2。

Selector

<结果 ID>

定义应返回值的结果的 ID。如果不存在对应此 ID 的结果,则 MERLIC 将变更为“Error”状态。

可根据如下示例定义从 PLC 发送到 MERLIC 的协议 FromPLCProtocol

复制
TYPE
FromPLCProtocol :
STRUCT
    Preamble : 17;
    CommandCode : 2;
    Selector : 2;
END_STRUCT
END_TYPE

CommandCode”的值设置为 2。因此 MERLIC 识别命令 “GetResult”。从 PLC 请求的结果 ID 在 Selector 成员中指定。我们的示例中请求了 ID 为 2 的结果。MERLIC 查找结果 ID 2 对应的值并通过协议 FromMerlicProtocol 将相应的值发送回 PLC,从而处理命令。

以下示例展示了作为响应从 MERLIC 发送到 PLC 的协议 FromMerlicProtocol。它包含所请求结果的相关信息。

复制
Preamble : 17
VersionMajor : 1
VersionMinor : 0
RecipeId : 1
CommandCode : 0
ActionResponse : 1
CurrentState : 34
LastResultId : 5
LastStartedJobId : 1
Reserved : 0
ResultState : 1
BoolCount : 0
ByteCount : 1
WordCount : 0
DWordCount : 0
LWordCount : 0
SIntCount : 0
USIntCount : 0
IntCount : 0
UIntCount : 0
DIntCount : 0
UDIntCount : 0
LIntCount : 0
ULIntCount : 0
RealCount : 0
LRealCount : 0
TimeCount : 0
TimeOfDayCount : 0
LTimeCount : 0
DateCount : 0
DateAndTimeCount : 0
Str80Count: 0
TotalResultCount : 1
DataIntegrity0 : 3
Result0 : 7

Preamble 的值表示协议以 17 开头。VersionMajorVersionMinor 的值表示使用了数据协议的第一个版本。成员 RecipeId 的信息表示使用了在配方中定义的与 ID 1 对应的输入值来对 MVApp 进行参数设置。

CommandCode 0 用于同步 MERLIC 和 PLC。在此示例中,这代表 MERLIC 识别并处理了 PLC 发出的查询 ID 2 所对应结果的命令。ActionResponse 设置为 1,表示已成功处理该命令。CurrentState 值 (34) 表示 MERLIC 当前处于“Ready”状态,即状态“Ready”和“OperationalAutomaticMode”的位数已设置。这意味着它已准备好启动单次操作,以查询上一次迭代的结果或准备其他配方文件。

在此示例中,MERLIC 计算的最后一次结果的 ID 为 5,即为成员 LastResultId 传输的结果。它们在运行 ID 为 1 的工作(由“LastStartedJobId”表示)时计算,或者它们在上一个工作中计算,以防上次启动的 ID 为 1 的工作尚未产生任何结果。但是,PLC 请求的是 ID 为 2 的结果。因此,在生成 ID 2 对应的结果期间,就已计算传输到 PLC 的所有结果。ResultState 的值 1 表示处理已正确执行。TotalResultCount 值所含的信息表示 LastResultId 请求只返回了一个结果。返回的值是数据类型“Byte”,可通过成员 ByteCount 的值 1 来识别。其他数据类型的所有其他计数器均设置为 0。

此结果值的相关实际信息存储在成员 DataIntegrityResult 中。DataIntegrity 值为 3 由字节 00000011 表示。第一位表示该值有效,第二位表示该值已在生成 ID 2 对应的请求结果的 MVApp 迭代中确定。有关各个位数的含义的更多信息,请参阅数据交换协议。结果值在协议的最后一个条目中返回。在我们的示例中,结果值为 7。