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()
Exemple #2
0
 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()
Exemple #3
0
 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()
Exemple #4
0
 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))