使用 OPC UA 写入变量
Writing variables with OPC UA
最近我试图与西门子 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: "The server does not support writing the combination of value, status and timestamps provided."(BadWriteNotSupported)
您使用需要节点列表的函数set_values。试试这个:
val.set_value(var_2)
如果plc returns出错,只设置值:
val.set_value(DataValue(var_2))
I've tried to use set_value command but I get this error code:
opcua.ua.uaerrors._auto.BadWriteNotSupported: "The server does not support writing the combination of value, status and timestamps provided."(BadWriteNotSupported)
虽然此服务器可能表示它根本不支持写入此节点,但我发现最常见的是这意味着服务器不支持写入 StatusCode and/or 时间戳和值在 DataValue
您的客户正在发送。
最近我试图与西门子 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: "The server does not support writing the combination of value, status and timestamps provided."(BadWriteNotSupported)
您使用需要节点列表的函数set_values。试试这个:
val.set_value(var_2)
如果plc returns出错,只设置值:
val.set_value(DataValue(var_2))
I've tried to use set_value command but I get this error code: opcua.ua.uaerrors._auto.BadWriteNotSupported: "The server does not support writing the combination of value, status and timestamps provided."(BadWriteNotSupported)
虽然此服务器可能表示它根本不支持写入此节点,但我发现最常见的是这意味着服务器不支持写入 StatusCode and/or 时间戳和值在 DataValue
您的客户正在发送。