opc ua客户端到服务器

opc ua client to server

我想知道是否可以将数据从 OPC UA 客户端发送到服务器。 我有一台 Windows 10 PC,设置了 OPC UA 服务器和一些 Raspberry Pi 作为客户端。

我已经编写了 Python 代码来将数据从服务器发送到客户端。现在,我想将数据从 Raspberry Pi 上的客户端发送到 Windows 10 PC 上的服务器。 这可以做到吗?还是我必须在 Raspberry Pi 台上设置服务器,在 Windows 10 台电脑上设置客户端?

这个server.py:

from opcua import Server
from random import randint
import datetime
import time

server = Server()

url = "opc.tcp://131.246.76.240:4840"
server.set_endpoint(url)

name = "OPCUA_SIMULATION_SERVER"
addspace = server.register_namespace(name)

node = server.get_objects_node()

Param = node.add_object(addspace, "Parameters")

Temp=Param.add_variable(addspace, "Temperature", 0)
Press=Param.add_variable(addspace, "Pressure", 0)
Time=Param.add_variable(addspace, "Time", 0)

Temp.set_writable()
Press.set_writable()
Time.set_writable()

server.start()
print("Server started at {}".format(url))

while True:
    Temperature = randint(10, 50)
    Pressure = randint(200, 999)
    TIME = datetime.datetime.now()

    print(Temperature, Pressure, TIME)

    Temp.set_value(Temperature)
    Press.set_value(Pressure)
    Time.set_value(TIME)

    time.sleep(1)

这是client.py:

import time
from opcua import Client

url = "opc.tcp://131.246.76.240:4840"

client= Client(url)

client.connect()
print("Client Connected")

while True:
    Temp = client.get_node("ns=2;i=2")
    Temperature = Temp.get_value()
    print(Temperature)

    Press = client.get_node("ns=2;i=3")
    Pressure = Press.get_value()
    print(Pressure)

    TIME = client.get_node("ns=2;i=4")
    Time = TIME.get_value()
    print(Time)

    time.sleep(1)

简短的回答是肯定的!您可以从 OPC UA 客户端写入、读取和订阅 OPC UA 服务器上可用的标签。实际上,这就是我们需要客户的原因。

我认为您的困惑始于对 OPC UA server/client 架构的工作原理的误解。考虑到上面共享的代码,您的 OPC UA 服务器不会向您的客户端发送任何数据。您的客户端请求并从服务器读取它。同理,只需要从同一个客户端向服务器发送另一个请求到write/set值即可。例如;

# set/write node value (e.g. 26) by using implicit data type  
Temp = client.get_node("ns=2;i=2")
Temp.set_value(26)

总而言之,无需部署和设置更多的服务器或客户端。只需更新您的客户端代码以支持编写标签。希望这对您有所帮助!