well_known_nodes
well_known_nodes 模块预定义 OPC Foundation 标准节点的 NodeId 字符串常量. 用它代替手写 i=2258 提升代码可读性.
from darra_opcua import well_known_nodes as wkn # 短别名
# 或
from darra_opcua import wkn # 已经预定义的别名
配套
- 命名空间反查见 Namespaces.
- 通过 NodeId 读取数据见 read / write.
常用根节点
| 常量 | NodeId | 含义 |
|---|---|---|
wkn.ROOT_FOLDER | i=84 | Address Space 根 |
wkn.OBJECTS_FOLDER | i=85 | 业务数据根 |
wkn.TYPES_FOLDER | i=86 | 类型定义根 |
wkn.VIEWS_FOLDER | i=87 | 视图根 |
wkn.SERVER | i=2253 | Server 自身对象 |
Server 状态
| 常量 | NodeId | 含义 |
|---|---|---|
wkn.SERVER_SERVER_STATUS | i=2256 | Server 状态结构 |
wkn.SERVER_SERVER_STATUS_STATE | i=2259 | 状态 (Running / Failed / ...) |
wkn.SERVER_SERVER_STATUS_CURRENT_TIME | i=2258 | 服务端当前时间 |
wkn.SERVER_SERVER_STATUS_START_TIME | i=2257 | 服务端启动时间 |
wkn.SERVER_SERVER_STATUS_BUILD_INFO | i=2260 | BuildInfo (产品 / 厂商 / 版本) |
wkn.SERVER_SERVER_ARRAY | i=2254 | ServerArray 字符串数组 |
wkn.SERVER_NAMESPACE_ARRAY | i=2255 | NamespaceArray 字符串数组 |
标准 ReferenceType
| 常量 | NodeId |
|---|---|
wkn.HAS_COMPONENT | i=47 |
wkn.HAS_PROPERTY | i=46 |
wkn.ORGANIZES | i=35 |
wkn.HAS_TYPE_DEFINITION | i=40 |
wkn.REFERENCES | i=31 |
wkn.HIERARCHICAL_REFERENCES | i=33 |
常见 DataType
| 常量 | NodeId |
|---|---|
wkn.BOOLEAN | i=1 |
wkn.INT32 | i=6 |
wkn.UINT32 | i=7 |
wkn.INT64 | i=8 |
wkn.FLOAT | i=10 |
wkn.DOUBLE | i=11 |
wkn.STRING | i=12 |
wkn.DATE_TIME | i=13 |
wkn.BYTE_STRING | i=15 |
WellKnownNamespaces
from darra_opcua import WellKnownNamespaces
WellKnownNamespaces.OPC_FOUNDATION # "http://opcfoundation.org/UA/"
WellKnownNamespaces.DI # "http://opcfoundation.org/UA/DI/"
用法
from darra_opcua import wkn
# 不推荐: 硬编码
with ua.read("i=2258") as dv:
print(dv.value)
# 推荐: 用常量
with ua.read(wkn.SERVER_SERVER_STATUS_CURRENT_TIME) as dv:
print(dv.value)
ServerStatus 完整读取 (批量)
from darra_opcua import wkn, AttributeId
nodes = [
wkn.SERVER_SERVER_STATUS_STATE,
wkn.SERVER_SERVER_STATUS_CURRENT_TIME,
wkn.SERVER_SERVER_STATUS_START_TIME,
wkn.SERVER_NAMESPACE_ARRAY,
]
results = ua.read_many(nodes)
names = ["State", "CurrentTime", "StartTime", "Namespaces"]
for name, dv in zip(names, results):
if dv:
with dv:
print(f"{name:13s} = {dv.value}")
完整列表
源码里查 darra_opcua/well_known_nodes.py 有 30+ 常量, OPC Foundation 标准命名空间下的节点都在.