属性是描述节点的数据元素。客户端可以使用 Read、Write、Query 和 Subscription/MonitoredItem 服务访问属性值。
属性是节点类的基本组成部分。属性定义是节点类定义的一部分,因此为客户端所知,在地址空间中不直接可见。
每个属性定义都包含属性 ID、名称、描述、数据类型和强制/可选指示符。为每个节点类定义的属性集不能由客户端或服务器扩展。在地址空间中实例化节点时,必须提供强制节点类属性的值。
pcua.ua.attribute_ids
模块该模块是个枚举体, 包含了节点属性对应的属性ID, 可以通过opcua.common.node.Node.get_attribute(AttributeId)
方法获取属性值
class opcua.ua.attribute_ids.AttributeId(enum.IntEnum)
AccessLevel= 17
AccessLevelEx= 27
AccessRestrictions= 26
ArrayDimensions= 16
BrowseName= 3
ContainsNoLoops= 11
DataType= 14
DataTypeDefinition= 23
Description= 5
DisplayName= 4
EventNotifier= 12
Executable= 21
Historizing= 20
InverseName= 10
IsAbstract= 8
MinimumSamplingInterval= 19
NodeClass= 2
NodeId= 1
RolePermissions= 24
Symmetric= 9
UserAccessLevel= 18
UserExecutable= 22
UserRolePermissions= 25
UserWriteMask= 7
Value= 13
ValueRank= 15
WriteMask= 6
import opcua
from opcua import ua
from opcua.ua import uatypes
url = 'opc.tcp://192.168.1.39:4840'
client = opcua.Client(url)
client.connect()
# test_node节点是PLC里的一个bool数组,长度为20
test_node = client.get_node('ns=4;s=CIP数据BOOL')
test_node_attr = test_node.get_attribute(1)
print(1, test_node_attr)
test_node_attr = test_node.get_attribute(13)
print(2, test_node_attr)
test_node_attr = test_node.get_attribute(4)
print(3, test_node_attr)
test_node_attr = test_node.get_attribute(14)
print(4, test_node_attr)
test_node_attr = test_node.get_attribute(16)
print(5, test_node_attr)
# 通过opcua.common.node.Node.sset_attribute(attributeId, DataValue)设置节点的value
# 1. 创建uatypes.Variant(),并设置相关参数
var = uatypes.Variant()
var.Value = [True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
var.VariantType = uatypes.VariantType.Boolean
var.is_array = True
# 2. 创建uatypes.DataValue()类,并将uatypes.DataValue().Value设置为uatypes.Variant()
dv = uatypes.DataValue()
dv.Value = var
test_node.set_attribute(13, dv)
client.disconnect()
输出:
1 DataValue(Value:Variant(val:StringNodeId(ns=4;s=CIP数据BOOL),type:VariantType.NodeId), StatusCode:StatusCode(Good))
2 DataValue(Value:Variant(val:[True, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False],type:VariantType.Boolean), StatusCode:StatusCode(Good), SourceTimestamp:2023-03-21 03:11:49.095000)
3 DataValue(Value:Variant(val:LocalizedText(Encoding:3, Locale:, Text:CIP数据BOOL),type:VariantType.LocalizedText), StatusCode:StatusCode(Good))
4 DataValue(Value:Variant(val:TwoByteNodeId(i=1),type:VariantType.NodeId), StatusCode:StatusCode(Good))
5 DataValue(Value:Variant(val:[20],type:VariantType.UInt32), StatusCode:StatusCode(Good))