编辑以更正一些拼写错误:大家好,我是opcua-asyncio软件包的新手,所以如果我错过了一些非常明显的东西,请耐心等待,我正在尝试找出如何从Python连接到Siemens S7 1200 CPU 1212 C固件版本14 PLC(3.11)并读取一些变量值。很抱歉,我无法找到一种方法,以支持我的情况与一个可复制的例子,因为它是内在连接到测试PLC I'如果您能提出一种方法使其可重现,我将相应地修改答案。我的测试PLC上的结构在图片中详细说明,我可以通过不同的客户端访问它,t1到t19的变量是我的目标。[PLC Structure][1]我浏览了文档(尤其是client minimal example)和一些stackoverflow答案,并编写了以下代码
# modules
import asyncio
from asyncua import Client
# url and namespace
url = foo bar # the plc location on the network
namespace = "OPC-UA:PLC_1"
t2 =[]
# I can find the objects inside the node
async with Client(url=url) as client:
# Find the namespace index
nsidx = await client.get_namespace_index("urn:OPC-UA:PLC_1")
print(nsidx)
root = client.nodes.root
print("Root node is: ", root)
objects = client.nodes.objects
print("Objects node is: ", objects)
# I can’t find my variables
var = await client.nodes.root.get_child(
["0:Objects", "3:ServerInterfaces", "0:Face"])
print("Var is: ", var)
t2 = await var.get_children_descriptions()
print(t2)
根据我对OPC-UA:PLC_1命名空间中结构的理解,我应该找到一个“Objects”节点对象,其中列出了一个“ServerInterfaces”节点对象,其中列出了一个“Face”节点对象,其中列出了从t1到t19的变量。但是,如果我要求“Objects”通过get_children_descriptions()描述查尔兹,我可以看到ServerInterfaces节点对象,但此Serverinterfaces似乎命名为“Face”。
如果我要求“脸”的孩子,我会收到一个BadNoMatch错误。任何帮助我指出正确的方向将不胜感激。谢谢!
[1]: https://i.stack.imgur.com/QyQCJ.png
1条答案
按热度按时间tv6aics11#
我认为Face的Browsename名称空间索引是错误的。索引0用于基本节点集。您可以使用其他UA客户端(如UAExpert)检查正确的索引(此处您需要查看属性窗口,而不是地址空间窗口(不显示名称空间索引))。
如果在面“OPC-UA:PLC_1”中定义了面,则该行应为: