opc ua клиент к серверу - PullRequest
       10

opc ua клиент к серверу

0 голосов
/ 06 марта 2019

Хотелось бы узнать, могу ли я отправлять данные с клиента OPC UA на сервер. У меня есть компьютер с Windows 10 с OPC UA Server и некоторые Raspberry Pi в качестве клиентов.

Я уже запрограммировал код Python для отправки данных с сервера на клиент. Теперь я хочу отправить данные от клиентов на Raspberry Pis на сервер на ПК с Windows 10. Можно ли это сделать? Или мне придется настроить серверы на Raspberry Pis и клиенты на ПК с 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)

1 Ответ

0 голосов
/ 14 марта 2019

Короткий ответ - да!Вы можете писать, читать и подписывать теги, доступные на сервере OPC UA, с клиента OPC UA.Собственно, поэтому нам нужен клиент.

Полагаю, ваше замешательство начинается с неправильного понимания того, как работает архитектура сервера / клиента OPC UA.Учитывая приведенный выше код, ваш сервер OPC UA не отправляет данные вашему клиенту.Ваш клиент запрашивает и читает его с сервера.Таким же образом вам нужно только отправить еще один запрос от того же клиента на сервер для записи / установки значения.Например;

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

В общем, нет необходимости развертывать и настраивать больше серверов или клиентов.Просто обновите свой клиентский код, чтобы поддерживать написание тегов.Надеюсь, это поможет!

...