【Software Toolbox教程】如何在OmniServer中设置心跳消息

下载TOP Server OPC Server最新版本

您可能知道,OmniServer用于从使用“非标准”协议进行通信的设备中检索信息,例如体重秤,条形码阅读器和打印机。 在某些情况下,需要将设备协议设计为客户端应用程序(HMI,SCADA或其他)而非OmniServer完全控制轮询的位置。但在您发出下一条消息之前,您如何知道该设备是否仍然连接?

在我们的“OmniServer您知道吗?”后续的第一篇文章中。博客系列,我们将介绍如何创建所谓的心跳消息,以确认您的设备在发送下一条消息之前正在“收听”。 对于许多设备,设备在没有活动的一段时间后“进入睡眠状态”并不罕见。有时在设备的设置中存在可配置的超时,该超时控制该不活动时段的持续时间,但有时不存在。 许多这样的设备可以通过发送特定命令或发送不是命令的任何字符或字符序列来“唤醒”。这通常被称为心跳消息

我为什么要这样做?

设备的一致例程轮询是OmniServer用于确定设备是否可用的机制。如果不允许OmniServer正常控制该轮询,则无法知道仪器是否已停止通信。

心跳消息可以用作设备的基础轮询机制。然后,客户端使用心跳通知项来标记潜在的通信问题。

我怎样才能做到这一点?

在此示例中,我们将设置OmniServer以使用“STATUS”一词自动轮询仪器。注意: 这只是一个示例 - 对于您的设备,您需要确认可以使用哪个序列/消息来保持设备唤醒,但不会导致设备出现任何问题。

然后OmniServer将等待“OK”的值返回。同样,这只是一个示例 - 您将需要一个可以发送到设备的序列/消息,从而产生某种形式的响应或确认。如果没有任何反馈或仪器响应不正确,Heartbeat通知项将设置为False或Zero。

1、创建一个名为Heartbeat的新OmniServer项,如下面的屏幕截图所示。确保所有设置都匹配,尤其是“Item should be automatically activated/项目应自动激活”设置:

ComponentOne

2、使用以下示例在协议内创建新的OmniServer命令/请求消息。

3、在“常规”选项卡上,输入以下值。注意通知项目。 只要此特定消息成功完成,此字段中选定的项目将由OmniServer设置为True或One。确保启用“消息应自动激活”选项以确保即使客户端应用程序未请求项目也执行消息也很重要:

ComponentOne

4、在“Request/请求”选项卡上,输入以下值。请记住,这只是一个示例。请查看仪器的文档,查看是否有可以发送的消息来检索状态信息:

ComponentOne

5、最后,在“响应”选项卡上,输入以下值。同样,您的响应可能会有所不同,但关键项目最后是{Heartbeat:L}(其中{Heartbeat} 可以是您刚刚创建的项目,或者您可以选择任何其他整数字段)。

“L”用于Linkage格式样式,它告诉OmniServer正常读入数据,但不会将任何数据分配给项目,也不会 期望该项目的任何数据。这对于使此命令/请求消息定期执行而不会导致错误至关重要,因为设备未返回该项的值:

ComponentOne

6、最后,保存您的协议。

要测试此协议,请在客户端应用程序中创建一个标记以指向项目Heartbeat。这将激活心跳消息,并持续将项目Heartbeat设置为值1,直到仪器没有响应或发出除“OK”之外的任何内容作为对请求的响应。因此,任何时候Heartbeat都归零,你知道出了什么问题。

Heartbeat消息可以用于其他事情吗?

在上面的实现中,Heartbeat提供了与名为Status的保留OmniServer项类似的功能。但是,使用通知项会增加故障排除功能。

例如, 一旦通信出现问题,Status和Heartbeat都会变为零(或假)。但是,状态是一个全局项目,基本上意味着“未在协议内某处收到预期通信”。如果您有五百条消息,那么排除哪个消息导致错误可能很麻烦。

但是使用上面的通知项(例如Heartbeat),可以说“此消息中未收到预期通信”。因此,您可以使用通知项来准确找出问题所在。

Heartbeat消息是否有任何限制?

如果您的设备不接受任何命令(如某些条形码阅读器和其他设备的情况),那么此方案将无法工作,OmniServer将无法确定设备是否仍然连接,因为这是一个限制协议本身。

我在哪里可以获得更多信息?

你有一个你不太确定的协议吗?与往常一样,我们很乐意帮助您对协议文档进行免费协议审查或回答您可能遇到的问题。



猜你喜欢

转载自blog.51cto.com/13993266/2340959