OPC客户端恢复丢失连接后,我的OPC服务器需要做什么?

时间:2014-01-17 12:28:48

标签: opc

我在VB6中使用SLIK-DA4 ActiveX控件编写了自己的OPC服务器。它拥有相当多的标签集(大概有2,000个)。

客户使用Siemens OPC客户端进行连接(无私有安全性)。一切顺利,订阅阅读在客户端上显得很好。

一段时间后,客户端和服务器之间的IP链接暂时丢失。但是,客户告诉我,当链接恢复时,他们必须在OPC客户端上“做某事”,让它再次开始订阅,然后事情恢复正常。

...是的,我知道,我试图通过“做某事”来找出他们的意思!!

然而,与此同时,我正在考虑我可能在我的服务器代码中没有正确处理这种情况。我的标签值在附加的现场设备中不会经常更新,因此在重新连接时,客户端是否可能因为没有发生标签更改而没有收到任何回调?

在恢复链接时,如何让服务器将所有标签的最新状态推送到客户端,而不是依靠某人在客户端“做某事”?我是否需要对所有标签使用OnConnect事件然后使用SetVQT(,, sdaSGood),否则这不会有任何影响?

由于

3 个答案:

答案 0 :(得分:1)

当OPC服务器收到新连接时(似乎是这种情况),或者更确切地说,当OPC客户端创建一个活动组并将项目放入其中时,服务器应该发送关于每个连接的初始通知item(值/时间戳/质量或错误) - 即使最近没有改变。

但是,如果使用合理的OPC工具包开发服务器,则应由工具包代码自动处理。尝试仅仅因为OPC客户端连接而改变标签的质量毫无意义。 VQT的质量应反映来自底层系统的任何内容,或与THAT系统通信的通信问题,但 OPC服务器和客户端之间的任何内容。

它也可能是客户端的一个问题 - 根本没有足够的弹性来处理某些情况。告诉发生了什么的权威方式(并将“责备”放到服务器或客户端的方向)将在其间放置OPC分析器(从OPC Foundation到OPC成员),并记录OPC调用并检查哪一方行为不对。

答案 1 :(得分:0)

  

他们的意思"做某事"

我认为这意味着客户需要重新启动客户端,创建组并添加标签。但事情应该如此,因为OPC规范并没有说明处理连接中断的事情。它只有接口的描述,可用于检查连接(服务器)状态(例如IOPCServer::GetStatus)。通常,客户端会自动重新连接(与新组建立新连接并添加标记),但前提是他们已经注意到连接丢失了。

  

a"重新开放"来自其OPC客户端的请求

您可以请西门子的某位人士为您提供OPC规范中的报价,其中"重新打开"描述了机制和/或接口。因为我不记得规范中的这些符号。

但如果"重新开放"意味着重用旧连接(即从旧连接留下的DCOM对象)然后我可能会假设以下情况:

  • 客户端和服务器正常交互
  • 连接中断
  • 服务器向客户端发送OnDataChange回调并收到错误(类似于" RPC服务不可用")
  • 服务器只停止发送OnDataChange回调并且不对与当前连接相关的DCOM对象执行任何操作
  • 连接恢复
  • 客户端仍然可以使用现有的DCOM对象调用服务器,但不会收到OnDataChange回调
  • 客户需要手动重启客户端以修复连接

在这种情况下,您(或工具包)应删除与断开连接相关的所有对象,或者不要停止发送回调。

答案 2 :(得分:0)

当IP更改时,尝试重新连接OPC服务器或将OPC服务器IP地址设置为静态