From 6502cf0713acb68e65b15000659680d3ad366c91 Mon Sep 17 00:00:00 2001 From: Jan David Mol <mol@astron.nl> Date: Tue, 1 Dec 2020 15:52:52 +0100 Subject: [PATCH] Graceful fallback for non-existing OPC-UA nodes, and moved connect logic to dedicated function --- RCUSCC/RCUSCC/RCUSCC.py | 46 +++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/RCUSCC/RCUSCC/RCUSCC.py b/RCUSCC/RCUSCC/RCUSCC.py index 109d8b7ea..ec878508a 100644 --- a/RCUSCC/RCUSCC/RCUSCC.py +++ b/RCUSCC/RCUSCC/RCUSCC.py @@ -160,7 +160,36 @@ class RCUSCC(Device): # --------------- def get_pcc_node(self, node): - return self.pcc_node.get_child(["{}:{}".format(self.name_space_index, node)]) + try: + return self.pcc_node.get_child(["{}:{}".format(self.name_space_index, node)]) + except opcua.ua.uaerrors._auto.BadNoMatch: + self.error_stream("Could not find PCC node %s, using a dummy", node) + + class DummyNode: + def get_value(self): + pass + + def set_value(self, val): + pass + + return DummyNode() + + + def _connect(self): + self.debug_stream("Connecting to OPC-UA server %s:%d...", self.OPC_Server_Name, self.OPC_Server_Port) + + self.client = opcua.Client("opc.tcp://{}:{}/".format(self.OPC_Server_Name, self.OPC_Server_Port), self.OPC_Time_Out * 1000) + self.client.connect() + self.debug_stream("Connecting to OPC-UA server %s:%d done.", self.OPC_Server_Name, self.OPC_Server_Port) + + try: + self.name_space_index = self.client.get_namespace_index("http://lofar.eu") + except Exception as e: + self.warn_stream("Cannot determine the OPC-UA name space index. Will try and use the default = 2.") + self.name_space_index = 2 + + self.obj_node = self.client.get_objects_node() + self.pcc_node = self.obj_node.get_child(["{}:PCC".format(self.name_space_index)]) def init_device(self): @@ -211,20 +240,7 @@ class RCUSCC(Device): # Set defaults to property values. try: - self.debug_stream("Connecting to OPC-UA server %s:%d...", self.OPC_Server_Name, self.OPC_Server_Port) - - self.client = opcua.Client("opc.tcp://{}:{}/".format(self.OPC_Server_Name, self.OPC_Server_Port), self.OPC_Time_Out * 1000) - self.client.connect() - self.debug_stream("Connecting to OPC-UA server %s:%d done.", self.OPC_Server_Name, self.OPC_Server_Port) - - try: - self.name_space_index = self.client.get_namespace_index("http://lofar.eu") - except Exception as e: - self.warn_stream("Cannot determine the OPC-UA name space index. Will try and use the default = 2.") - self.name_space_index = 2 - - self.obj_node = self.client.get_objects_node() - self.pcc_node = self.obj_node.get_child(["{}:PCC".format(self.name_space_index)]) + self._connect() self.debug_stream("Mapping OPC-UA MP/CP to attributes...") -- GitLab