opcua.common.node.Node
类classopcua.common.node.Node(server, nodeid
参数:
- server: 添加到的服务器
- nodeid: 比如用ua.NodeId.from_string(‘ns=10;s=asd’)创建NodeId
方法:
- get_browse_name(): 返回QualifiedName对象, 该对象是由NameSpace Index和name组成
- get_display_name(): 返回LocalizedText对象, 该对象为节点的描述属性
- get_data_type(): 返回节点的value值的数据类型对应的NodeId对象. 在Types下可以查看所有的数据类型的NodeId.
- get_data_type_as_variant_type(): 获取节点值对应的数据类型, 返回VariantType
- get_access_level(): 获取节点的访问权限, 返回权限组成的集合(set)
- get_user_access_level: 获取节点的用户访问权限, 返回权限组成的集合(set)
- get_event_notifier()
- set_event_notifier(values)
- get_node_class(): 获取节点类属性
- get_description(): 获取描述, 返回LocalizedText对象
- get_value(): 获取节点value属性的值, 返回值的数据类型取决于值, 比如值为bool, 则返回True/False.
- get_data_value(): 获取节点value属性的值, 返回DataValue对象
- set_array_dimensions(value): 设置节点的属性 ArrayDimensions 确保它具有正确的数据类型。比如排列的长度。
- get_array_dimensions(): 读取并返回节点的 ArrayDimensions 属性组成的列表
- set_value_rank(value): 设置节点的ArrayDimensions属性
- get_value_rank(): 读取并返回节点的 ArrayDimensions 属性
- set_value(
opcua.ua.uatypes.DataValue
, varianttype=None): 设置节点的Value值- set_data_value(
opcua.ua.uatypes.DataValue
, varianttype=None): 同上- set_writable(writable=True): 通过client将节点设置为可写
- set_read_only(): 将节点设置为只读
- set_attr_bit(attr, bit):
- set_attribute(attributeid, datavalue): 设置节点的属性值
- get_attribute(AttributeId): 获取指定AttributeId的属性值,返回opcua.ua.uatypes.DataValue
- get_attributes(AttributeId组成的列表): 获取指定多个AttributeId的属性值,返回多个opcua.ua.uatypes.DataValue组成的列表
- get_children(): 获取节点所有的子节点,返回opcua.common.node.Node类组成的列表
- get_properties():
- get_variables():
- get_methods():
- get_children_descriptions():
- get_encoding_refs():
- get_description_refs():
- get_references():
- get_referenced_nodes():
- get_path(max_length=20, as_string=False): 获取节点的路径,max_length表示路径的最大长度,假如max_length=2,则返回当前节点的父节点和当前节点。as_string=False时,返回opcua.common.node.Node组成的列表。as_string=True时,返回路径节点的QualifiedName.to_string组成的列表(BrowseName转换为String)
- get_parent(): 返回当前节点父节点,返回opcua.common.node.Node
- get_child(path): 根据指定的path获取节点,path为路径节点的BrowseName
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()
# 获取根节点
root = client.get_root_node()
# 获取GlobalVars节点
GlobalVars_node = client.get_node('ns=4;s=NxController.GlobalVars')
# test_node节点是PLC里的一个bool数组,长度为20
test_node = client.get_node('ns=4;s=CIP数据BOOL')
# 获取browse_name
test_node_browse_name = test_node.get_browse_name()
print(1, test_node_browse_name)
# 获取display_name
test_node_display_name = test_node.get_display_name()
print(2, test_node_display_name, test_node_display_name.Text)
# 获取data_type
test_node_data_type = test_node.get_data_type()
print(3, test_node_data_type)
# 获取data_type_as_variant_type, 变量值的数据类型!!!
test_node_value_variant_type = test_node.get_data_type_as_variant_type()
print(4, test_node_value_variant_type, type(test_node_value_variant_type))
# 获取access_level访问权限
test_node_access_level = test_node.get_access_level()
print(5, test_node_access_level, type(test_node_access_level.pop()))
# 获取user__access_level, 用户访问权限
test_node_user_access_level = test_node.get_user_access_level()
print(6, test_node_user_access_level, type(test_node_user_access_level.pop()))
# 获取description
test_node_description = test_node.get_description()
print(7, test_node_description, type(test_node_description))
# 获取具有变量属性节点的value值, 获取的就是具体数值!!!
test_node_value = test_node.get_value()
print(8, test_node_value, type(test_node_value))
# 获取value, 返回opcua.ua.uatypes.DataValue!!!
test_node_data_value = test_node.get_data_value()
print(9, test_node_data_value, type(test_node_data_value))
# 获取array_dimensions
test_node_array_dimensions = test_node.get_array_dimensions()
print(10, test_node_array_dimensions, type(test_node_array_dimensions))
# 设置节点的Value, 首先要创建uatypes.Variant()和uatypes.DataValue()类
# 1. 创建uatypes.Variant(),并设置相关参数
var = uatypes.Variant()
var.Value = [True, True, True, False, 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
# 3. 设置节点的Value
# test_node.set_value(dv)
test_node.set_data_value(value=dv)
print(11, test_node.get_value())
# 获取指定AttributeId的属性值,返回opcua.ua.uatypes.DataValue
test_node_attr = test_node.get_attribute(1)
print(12, test_node_attr)
# 获取指定多个AttributeId的属性值,返回多个opcua.ua.uatypes.DataValue组成的列表
test_node_attrs = test_node.get_attributes([1, 13])
print(13, test_node_attrs)
# 通过set_attribute方法设置节点的value
test_node.set_attribute(13, dv)
# 获取节点所有的子节点,返回opcua.common.node.Node类组成的列表
root_children = root.get_children()
print(14, root_children)
test_node_properties = test_node.get_properties()
print(15, test_node_properties)
test_node_variables = test_node.get_variables()
print(16, test_node_variables)
test_node_method = test_node.get_methods()
print(17, test_node_method)
root_children_descriptions = root.get_children_descriptions()
print(18, root_children_descriptions)
test_node_encoding_ref = test_node.get_encoding_refs()
print(19, test_node_encoding_ref)
test_node_description_refs = test_node.get_description_refs()
print(20, test_node_description_refs)
test_node_references = test_node.get_references()
print(21, test_node_references)
test_node_referenced_nodes = test_node.get_referenced_nodes()
print(22, test_node_referenced_nodes)
test_node_type_definition = test_node.get_type_definition()
print(23, test_node_type_definition)
# 获取节点的路径,max_length表示路径的最大长度,假如max_length=2,则返回当前节点的父节点和当前节点
# as_string=False时,返回opcua.common.node.Node组成的列表
# as_string=True时,返回路径节点的QualifiedName.to_string组成的列表(BrowseName转换为String)
test_node_path = test_node.get_path(max_length=20, as_string=False)
test_node_path_string = test_node.get_path(max_length=20, as_string=True)
print(24, test_node_path, type(test_node_path[1]))
print(25, test_node_path_string)
# 返回当前节点父节点,返回opcua.common.node.Node
test_node_parent = test_node.get_parent()
print(26, test_node_parent, type(test_node_parent))
# 根据指定的path获取节点,path为路径节点的BrowseName
root_child = root.get_child(['0:Objects', '4:new_Controller_0', '3:GlobalVars'])
print(27, root_child)
client.disconnect()
输出:
1 QualifiedName(4:CIP数据BOOL)
2 LocalizedText(Encoding:3, Locale:, Text:CIP数据BOOL) CIP数据BOOL
3 TwoByteNodeId(i=1)
4 VariantType.Boolean <enum 'VariantType'>
5 {<AccessLevel.CurrentWrite: 1>} <enum 'AccessLevel'>
6 {<AccessLevel.CurrentWrite: 1>} <enum 'AccessLevel'>
7 LocalizedText(Encoding:0, Locale:None, Text:None) <class 'opcua.ua.uatypes.LocalizedText'>
8 [True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] <class 'list'>
9 DataValue(Value:Variant(val:[True, True, 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-23 07:40:43.044000) <class 'opcua.ua.uatypes.DataValue'>
10 [20] <class 'list'>
11 [True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
12 DataValue(Value:Variant(val:StringNodeId(ns=4;s=CIP数据BOOL),type:VariantType.NodeId), StatusCode:StatusCode(Good))
13 [DataValue(Value:Variant(val:StringNodeId(ns=4;s=CIP数据BOOL),type:VariantType.NodeId), StatusCode:StatusCode(Good)), DataValue(Value:Variant(val:[True, True, 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-23 07:40:43.094000)]
14 [Node(TwoByteNodeId(i=87)), Node(TwoByteNodeId(i=85)), Node(TwoByteNodeId(i=86))]
15 []
16 []
17 []
18 [ReferenceDescription(ReferenceTypeId:{self.ReferenceTypeId}, IsForward:{self.IsForward}, NodeId:{self.NodeId}, BrowseName:{self.BrowseName}, DisplayName:{self.DisplayName}, NodeClass:{self.NodeClass}, TypeDefinition:{self.TypeDefinition}), ReferenceDescription(ReferenceTypeId:{self.ReferenceTypeId}, IsForward:{self.IsForward}, NodeId:{self.NodeId}, BrowseName:{self.BrowseName}, DisplayName:{self.DisplayName}, NodeClass:{self.NodeClass}, TypeDefinition:{self.TypeDefinition}), ReferenceDescription(ReferenceTypeId:{self.ReferenceTypeId}, IsForward:{self.IsForward}, NodeId:{self.NodeId}, BrowseName:{self.BrowseName}, DisplayName:{self.DisplayName}, NodeClass:{self.NodeClass}, TypeDefinition:{self.TypeDefinition})]
19 []
20 []
21 [ReferenceDescription(ReferenceTypeId:{self.ReferenceTypeId}, IsForward:{self.IsForward}, NodeId:{self.NodeId}, BrowseName:{self.BrowseName}, DisplayName:{self.DisplayName}, NodeClass:{self.NodeClass}, TypeDefinition:{self.TypeDefinition}), ReferenceDescription(ReferenceTypeId:{self.ReferenceTypeId}, IsForward:{self.IsForward}, NodeId:{self.NodeId}, BrowseName:{self.BrowseName}, DisplayName:{self.DisplayName}, NodeClass:{self.NodeClass}, TypeDefinition:{self.TypeDefinition})]
22 [Node(TwoByteNodeId(i=63)), Node(StringNodeId(ns=4;s=NxController.GlobalVars))]
23 TwoByteNodeId(i=63)
24 [Node(TwoByteNodeId(i=84)), Node(TwoByteNodeId(i=85)), Node(StringNodeId(ns=4;s=NxController)), Node(StringNodeId(ns=4;s=NxController.GlobalVars)), Node(StringNodeId(ns=4;s=CIP数据BOOL))] <class 'opcua.common.node.Node'>
25 ['0:Root', '0:Objects', '4:new_Controller_0', '3:GlobalVars', '4:CIP数据BOOL']
26 ns=4;s=NxController.GlobalVars <class 'opcua.common.node.Node'>
27 ns=4;s=NxController.GlobalVars