async def setup_nodes(self): """ Set up some nodes as defined by spec """ uries = ['http://opcfoundation.org/UA/'] ns_node = Node(self.isession, ua.NodeId(ua.ObjectIds.Server_NamespaceArray)) await ns_node.set_value(uries) params = ua.WriteParameters() for nodeid in (ua.ObjectIds.Server_ServerCapabilities_OperationLimits_MaxNodesPerRead, ua.ObjectIds.Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData, ua.ObjectIds.Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents, ua.ObjectIds.Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite, ua.ObjectIds.Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData, ua.ObjectIds.Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents, ua.ObjectIds.Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall, ua.ObjectIds.Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse, ua.ObjectIds.Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes, ua.ObjectIds.Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds, ua.ObjectIds.Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement, ua.ObjectIds.Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall): attr = ua.WriteValue() attr.NodeId = ua.NodeId(nodeid) attr.AttributeId = ua.AttributeIds.Value attr.Value = ua.DataValue(ua.Variant(10000), ua.StatusCode(ua.StatusCodes.Good)) attr.Value.ServerTimestamp = datetime.utcnow() params.NodesToWrite.append(attr) result = await self.isession.write(params) result[0].check()
async def write_attribute(self, attributeid, datavalue): """ Set an attribute of a node attributeid is a member of ua.AttributeIds datavalue is a ua.DataValue object """ attr = ua.WriteValue() attr.NodeId = self.nodeid attr.AttributeId = attributeid attr.Value = datavalue params = ua.WriteParameters() params.NodesToWrite = [attr] result = await self.server.write(params) result[0].check()
async def write_attribute(self, attributeid, datavalue, indexrange=None): """ Set an attribute of a node attributeid is a member of ua.AttributeIds datavalue is a ua.DataValue object indexrange is a NumericRange (a string; e.g. "1" or "1:3". See https://reference.opcfoundation.org/v104/Core/docs/Part4/7.22/) """ attr = ua.WriteValue() attr.NodeId = self.nodeid attr.AttributeId = attributeid attr.Value = datavalue attr.IndexRange = indexrange params = ua.WriteParameters() params.NodesToWrite = [attr] result = await self.server.write(params) result[0].check()
async def set_attributes(self, nodeids, datavalues, attributeid=ua.AttributeIds.Value): """ Set an attribute of multiple nodes datavalue is a ua.DataValue object """ self.logger.info("set_attributes of several nodes") request = ua.WriteRequest() for idx, nodeid in enumerate(nodeids): attr = ua.WriteValue() attr.NodeId = nodeid attr.AttributeId = attributeid attr.Value = datavalues[idx] request.Parameters.NodesToWrite.append(attr) data = await self.protocol.send_request(request) response = struct_from_binary(ua.WriteResponse, data) response.ResponseHeader.ServiceResult.check() return response.Results
async def main(): url = 'opc.tcp://localhost:4840/freeopcua/server/' async with Client(url=url) as client: uri = 'http://examples.freeopcua.github.io' idx = await client.get_namespace_index(uri) var = await client.nodes.root.get_child( ["0:Objects", f"{idx}:MyObject", f"{idx}:MyVariable"]) nb = 4000 start = time.time() attr = ua.WriteValue() attr.NodeId = var.nodeid attr.AttributeId = ua.AttributeIds.Value attr.Value = ua.DataValue(ua.Variant(1.0, ua.VariantType.Float)) params = ua.WriteParameters() params.NodesToWrite = [attr] for i in range(nb): params.NodesToWrite[0].Value.Value.Value = i result = await client.uaclient.write_value(params) #result[0].check() #await var.write_value(i) print("\n Write frequency: \n", nb / (time.time() - start))