Commit 88d467cc authored by olivier R-D's avatar olivier R-D

helper methods to set and array_dimensiosn and value rank

parent c7ac1666
...@@ -92,6 +92,35 @@ class Node(object): ...@@ -92,6 +92,35 @@ class Node(object):
""" """
return self.get_attribute(ua.AttributeIds.Value) return self.get_attribute(ua.AttributeIds.Value)
def set_array_dimensions(self, value):
"""
Set attribute ArrayDimensions of node
make sure it has the correct data type
"""
v = ua.Variant(value, ua.VariantType.UInt32)
self.set_attribute(ua.AttributeIds.ArrayDimensions, ua.DataValue(v))
def get_array_dimensions(self):
"""
Read and return ArrayDimensions attribute of node
"""
res = self.get_attribute(ua.AttributeIds.ArrayDimensions)
return res.Value.Value
def set_value_rank(self, value):
"""
Set attribute ArrayDimensions of node
"""
v = ua.Variant(value, ua.VariantType.Int32)
self.set_attribute(ua.AttributeIds.ValueRank, ua.DataValue(v))
def get_value_rank(self):
"""
Read and return ArrayDimensions attribute of node
"""
res = self.get_attribute(ua.AttributeIds.ValueRank)
return res.Value.Value
def set_value(self, value, varianttype=None): def set_value(self, value, varianttype=None):
""" """
Set value of a node. Only variables(properties) have values. Set value of a node. Only variables(properties) have values.
...@@ -135,6 +164,8 @@ class Node(object): ...@@ -135,6 +164,8 @@ class Node(object):
def set_attribute(self, attributeid, datavalue): def set_attribute(self, attributeid, datavalue):
""" """
Set an attribute of a node Set an attribute of a node
attributeid is a member of ua.AttributeIds
datavalue is a ua.DataValue object
""" """
attr = ua.WriteValue() attr = ua.WriteValue()
attr.NodeId = self.nodeid attr.NodeId = self.nodeid
......
...@@ -118,6 +118,8 @@ class CommonTests(object): ...@@ -118,6 +118,8 @@ class CommonTests(object):
''' '''
# jyst to avoid editor warnings # jyst to avoid editor warnings
opc = None opc = None
assertEqual = lambda x, y: True
assertIn = lambda x, y: True
def test_find_servers(self): def test_find_servers(self):
servers = self.opc.find_servers() servers = self.opc.find_servers()
...@@ -322,11 +324,19 @@ class CommonTests(object): ...@@ -322,11 +324,19 @@ class CommonTests(object):
tid = v1.get_value() tid = v1.get_value()
self.assertEqual(now, tid) self.assertEqual(now, tid)
def test_variant_array_dim(self): def test_variant_array_dim(self):
objects = self.opc.get_objects_node() objects = self.opc.get_objects_node()
l = [[[1.0, 1.0, 1.0, 1.0], [2.0, 2.0, 2.0, 2.0], [3.0, 3.0, 3.0, 3.0]],[[5.0, 5.0, 5.0, 5.0], [7.0, 8.0, 9.0, 01.0], [1.0, 1.0, 1.0, 1.0]]] l = [[[1.0, 1.0, 1.0, 1.0], [2.0, 2.0, 2.0, 2.0], [3.0, 3.0, 3.0, 3.0]],[[5.0, 5.0, 5.0, 5.0], [7.0, 8.0, 9.0, 01.0], [1.0, 1.0, 1.0, 1.0]]]
v = objects.add_variable(3, 'variableWithDims', l) v = objects.add_variable(3, 'variableWithDims', l)
v.set_array_dimensions([0, 0, 0])
dim = v.get_array_dimensions()
self.assertEqual(dim, [0, 0, 0])
v.set_value_rank(0)
rank = v.get_value_rank()
self.assertEqual(rank, 0)
v2 = v.get_value() v2 = v.get_value()
self.assertEqual(v2, l) self.assertEqual(v2, l)
dv = v.get_data_value() dv = v.get_data_value()
...@@ -340,9 +350,6 @@ class CommonTests(object): ...@@ -340,9 +350,6 @@ class CommonTests(object):
dv = v.get_data_value() dv = v.get_data_value()
self.assertEqual(dv.Value.Dimensions, [2,3,0]) self.assertEqual(dv.Value.Dimensions, [2,3,0])
def test_add_numeric_variable(self): def test_add_numeric_variable(self):
objects = self.opc.get_objects_node() objects = self.opc.get_objects_node()
v = objects.add_variable('ns=3;i=888;', '3:numericnodefromstring', 99) v = objects.add_variable('ns=3;i=888;', '3:numericnodefromstring', 99)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment