使用OPC UA写入变量



最近我试图与西门子S7-1200 plc通信,我使用OPC UA协议,我能够连接和读取所有变量,但当我试图在变量中写入值时遇到问题,这是错误消息:

File "c:UsersUserDocumentsPythonOpcUaClient_PLC.py", line 18, in <module>
Plc.set_values(var_2,val)
File "C:Python310libsite-packagesopcuaclientclient.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(

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

val.set_value(var_2)

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

val.set_value(DataValue(var_2))

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

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

相关内容

  • 没有找到相关文章

最新更新