【问题标题】:Writing variables with OPC UA使用 OPC UA 写入变量
【发布时间】:2022-01-20 14:43:29
【问题描述】:

最近我尝试与 Siemens S7-1200 plc 通信,我使用的是 OPC UA 协议,我能够连接和读取所有变量,但是当我尝试在变量中写入值时出现问题,这是错误信息:

File "c:\Users\User\Documents\Python\OpcUa\Client_PLC.py", line 18, in <module>
Plc.set_values(var_2,val)
File "C:\Python310\lib\site-packages\opcua\client\client.py", line 670, in set_values
nodeids = [node.nodeid for node in nodes]
TypeError: 'Node' object is not iterable

这是我正在尝试的代码。

from opcua import Client
import time
   
url = "tcp.upc://192.168.0.1:4840"

val = 2

Plc = Client(url)

Plc.connect()


while True  :
    var = Plc.get_node("ns=4;i=2")
    print ("The value is : {}".format(var.get_value()))
    var_2 = Plc.get_node("ns=4;i=3")
    print(var_2)
    Plc.set_values(var_2,val)
    time.sleep(2)

更新:

我尝试使用set_value 命令,但我收到此错误代码:

opcua.ua.uaerrors._auto.BadWriteNotSupported:“服务器不支持写入提供的值、状态和时间戳的组合。”(BadWriteNotSupported)

【问题讨论】:

    标签: python python-3.x plc opc-ua siemens


    【解决方案1】:

    我尝试使用 set_value 命令,但收到以下错误代码: opcua.ua.uaerrors._auto.BadWriteNotSupported: "服务器不支持写入提供的值、状态和时间戳的组合。"(BadWriteNotSupported)

    虽然此服务器可能表示它根本不支持写入此节点,但我最常见的发现这意味着服务器不支持在 @987654321 中写入 StatusCode 和/或时间戳以及值@你的客户正在发送。

    【讨论】:

      【解决方案2】:

      您使用需要节点列表的函数 set_values。试试这个:

      val.set_value(var_2)
      

      如果 plc 返回错误,只设置值:

      val.set_value(DataValue(var_2))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-21
        • 1970-01-01
        • 2016-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-23
        • 2021-03-26
        相关资源
        最近更新 更多