客户端和服务器之间的双工通信 open62541(OPC-UA)

Posted

技术标签:

【中文标题】客户端和服务器之间的双工通信 open62541(OPC-UA)【英文标题】:Duplex communication between Client and server open62541(OPC-UA) 【发布时间】:2021-06-17 06:19:20 【问题描述】:

我想在客户端和服务器之间建立双向数据通信。以下示例说明了我想要实现的目标。

例如:客户端每秒发送一个请求以读取两个节点 ID(这些节点 ID 是数字)的值。然后在客户端程序中添加这些数字并将其提供给用户。 然后在 60 秒后,服务器告诉客户端乘以这个数字。所以现在客户端每秒都在乘以节点 ID 的值。然后在 60 秒后,它再次切换回加法。 我可以通过客户端向服务器请求数据,但我想弄清楚如何从客户端向服务器请求数据?

编辑:我想在我原来的问题中添加一些新信息。原因是让帖子更清晰。下图描述了我想要实现的目标。 在上图中,提供者可以可视化为服务器方法,消费者可以可视化为客户端方法。现在如果安全消费者2(客户端2)连接到安全提供者2(服务器2),如何将从安全提供者2接收到的数据传递给安全提供者1。(因为客户端只能连接到单个服务器)。open62541的功能是否允许以下数据流: 安全提供者2-->安全消费者2-->安全提供者1?如果是,你能举个例子吗?谢谢

【问题讨论】:

OPC UA 允许客户端从它所连接的服务器读取或写入数据,仅此而已。在您的图表中,您需要每侧有一个服务器和一个客户端以及两个独立的连接,但是 OPC UA 永远不会解决这两个连接之间的数据交换方式,这必须由您必须编程且与 OPC 无关的其他软件来完成UA OPC UA 只是一个通讯协议,它永远不会解决你系统的运行逻辑,通常是由机器的 PLC 完成,而不是 OPC UA 【参考方案1】:

OPC UA 的工作原理并非如此。

相反,您的客户端可以监视服务器中某个 VariableNode 的 Value 属性,然后根据当前值采取某种方式。

【讨论】:

OPCUA 中是否可以使用点对点网络?例如:两个客户端连接到同一个服务器交换信息? 可能不是您想的那样,但他们可以间接共享信息,例如两个客户端都可以读取/写入同一个变量节点。 是的,知道了。服务器可以将值写入其节点吗?或者我们应该使节点可写,然后在客户端更改值?行业内一般是怎么做的? 是的,当然服务器也可以将值写入节点。这可能是最常见的。您正在以不常见的方式提出有关使用 OPC UA 的问题。 但是一旦我们执行下面的语句“UA_StatusCode retval = UA_Server_run(server, &running)”,我们将无法更新节点值,对吗?我们只能在调用“UA_Server_run”之前写入节点,如本例所示link【参考方案2】:

OPC UA 协议执行其文档指定的操作,而您要求的操作是不可能的。

但是您可以让客户端读取值和乘数,并在客户端执行您想要的操作,除了 OPC UA

【讨论】:

OPCUA 中是否可以使用点对点网络?例如:两个客户端连接到同一个服务器交换信息? 不,服务器是被动的,它只响应客户端请求。这就是在请求-响应模式下工作的所有协议的工作方式。如果您想要一个两个客户端交换信息的协议,请查找 MQTT 嗨,我还有一个问题,需要你的建议。假设,在工业中我们有一个拾放机器人,它下面有一个安全扫描仪。如果有人离机器人太近,扫描仪应该选择信号并且应该关闭机器人的电源。在这里,机器人和扫描仪应该设计成服务器吗?或者我们可以为机器人和扫描仪提供一个服务器吗? 国际 IEC 标准规定,安全系统必须通过有线机电系统工作,而不是通过数字通信。不遵守安全规定使人们入狱。在我看来,在考虑通信协议之前,您应该先咨询电气工程师。 嗨,我已经编辑了这个问题。你能看看吗?

以上是关于客户端和服务器之间的双工通信 open62541(OPC-UA)的主要内容,如果未能解决你的问题,请参考以下文章

open62541 客户端断开连接时的 OPC UA 堆栈服务器端回调

使用 open62541 将值写入 PLC 标签

使用 Visual Studio 2017 构建 open62541 DLL

使用WebSocket进行全双工通信

在 Windows 中使用 open62541 构建一个简单的服务器

使用 open62541 的基本时间序列(ADC)传输架构