From 486fbe3c2f33c469f0c7cc02df5b0dc075a5f888 Mon Sep 17 00:00:00 2001
From: kruger <kruger@astron.nl>
Date: Tue, 13 Apr 2021 13:44:57 +0200
Subject: [PATCH] Added debug OPC-UA object

---
 config/CLK.yaml         |  2 ++
 config/RCU.yaml         |  9 +++++++--
 opcuaserv/opcuaserv.py  | 18 +++++++++++-------
 opcuaserv/yamlreader.py |  6 +++---
 pypcc2.py               |  7 ++++---
 5 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/config/CLK.yaml b/config/CLK.yaml
index 9edd498..5d70297 100644
--- a/config/CLK.yaml
+++ b/config/CLK.yaml
@@ -56,3 +56,5 @@ variables:
      rw:  variable #server RW variable, not linked to IO
      dtype: boolean
 
+methods:
+  - name: CLK_on
\ No newline at end of file
diff --git a/config/RCU.yaml b/config/RCU.yaml
index 50a6f8f..c63bd70 100644
--- a/config/RCU.yaml
+++ b/config/RCU.yaml
@@ -236,6 +236,7 @@ variables:
      dtype: uint8
      dim: 96
      mask: Ant_mask
+     debug: True
 
    - name: RCU_GPIO2
      driver: I2C_RFCHAIN
@@ -245,6 +246,7 @@ variables:
      dtype: uint8
      dim: 96
      mask: Ant_mask
+     debug: True
 
    - name: RCU_LED0
      driver: I2C_RCU
@@ -342,6 +344,7 @@ variables:
 methods:
   - name: RCU_update
     mask: RCU_mask
+    debug: True
     instructions:
      - RCU_ADC_lock: Update
 
@@ -368,14 +371,16 @@ methods:
      - WAIT: 500         #ms to wait
      - RCU_ADC_lock: Update
   - name: ADC1_on
-    rw: hidden
+    debug: True
+#    rw: hidden
     instructions:
      - ADC1.JESD_control1 : 0x14
 #     - ADC1.SYNC_control: 1  #Setup ADCs
 #     - ADC1.CML_level: 0x7
      - ADC1.Update: 1       #Needed to update ADC registers
   - name: ADC2_on
-    rw: hidden
+    debug: True
+#    rw: hidden
     instructions:
      - ADC2.JESD_control1 : 0x14
 #     - ADC2.SYNC_control: 1  #Setup ADCs
diff --git a/opcuaserv/opcuaserv.py b/opcuaserv/opcuaserv.py
index daa3cdd..897a943 100644
--- a/opcuaserv/opcuaserv.py
+++ b/opcuaserv/opcuaserv.py
@@ -56,28 +56,31 @@ def AddVar(name,value):
     myvar2.set_writable()
     return myvar2
 
-def AddVarR(vname,varvalue2,v):
-    myvar = PCCobj.add_variable(idx, vname, varvalue2)
+def AddVarR(vname,varvalue2,v,debug):
+    obj=(DEBUGobj if debug else PCCobj) 
+    myvar = obj.add_variable(idx, vname, varvalue2)
     logging.info(str(("Variable added: ",vname,len(varvalue2))))
     Vars_R[myvar.nodeid.Identifier]=[vname,myvar.get_data_value(),varvalue2,v]
     return myvar
 
-def AddVarW(vname,varvalue2,v,Q1):
+def AddVarW(vname,varvalue2,v,Q1,debug):
     logging.info(str(("Variable added: ",vname)))#,'=',varvalue2)
-    myvar2 = PCCobj.add_variable(idx, vname, varvalue2)
+    obj=(DEBUGobj if debug else PCCobj) 
+    myvar2 = obj.add_variable(idx, vname, varvalue2)
     myvar2.set_writable()
     Vars_W[myvar2.nodeid.Identifier]=[vname,myvar2.get_data_value(),v,Q1]
     handle = sub.subscribe_data_change(myvar2)
     return myvar2
 
-def Addmethod(vname,v,Q1):
-    myvar = PCCobj.add_method(idx, vname, lambda ObjectId,name=vname,inst=v,Q1=Q1 : CallMethod(ObjectId,name,inst,Q1), [],[] )
+def Addmethod(vname,v,Q1,debug):
+    obj=(DEBUGobj if debug else PCCobj) 
+    myvar = obj.add_method(idx, vname, lambda ObjectId,name=vname,inst=v,Q1=Q1 : CallMethod(ObjectId,name,inst,Q1), [],[] )
     logging.info(str(("AddMethod:",vname)))
 
 def InitServer(port=4840):
 
 # setup our server
-    global server,running,PCCobj,idx,sub;
+    global server,running,PCCobj,DEBUGobj,idx,sub;
     server = Server()
     server.set_endpoint("opc.tcp://0.0.0.0:{}/PCC/".format(port))
 
@@ -89,6 +92,7 @@ def InitServer(port=4840):
 
     # populating our address space
     PCCobj = objects.add_object(idx, "PCC")
+    DEBUGobj = PCCobj.add_object(idx, "DEBUG")
 #    self.PCCobj=PCCobj
     
     # starting!
diff --git a/opcuaserv/yamlreader.py b/opcuaserv/yamlreader.py
index f687dd9..1c51537 100644
--- a/opcuaserv/yamlreader.py
+++ b/opcuaserv/yamlreader.py
@@ -40,7 +40,7 @@ class yamlreader(yamlconfig):
         elif datatype=='string':   varvalue2=dim1*[""]
 #        print(len(varvalue2),varvalue2)
         if v.get('rw') in ['ro','rw']:
-            var1=AddVarR(name+"_R",varvalue2,v['id'])
+            var1=AddVarR(name+"_R",varvalue2,v['id'],v.get('debug'))
             v['OPCR']=var1
             print("Var added:"+name+"_R")
             self.server.readvar(v['id'])
@@ -49,7 +49,7 @@ class yamlreader(yamlconfig):
 #            Q1.put(Inst)
 
         if v.get('rw') in ['wo','rw','variable']:
-            var1=AddVarW(name+"_RW",varvalue2,v['id'],self)
+            var1=AddVarW(name+"_RW",varvalue2,v['id'],self,v.get('debug'))
             v['OPCW']=var1
             print("Var added:"+name+"_RW")
      for v in self.conf['variables']:
@@ -66,7 +66,7 @@ class yamlreader(yamlconfig):
           if v.get('rw','')=='hidden': continue;
           print(v)
 #        Inst1=Vars.Instr(Vars.DevType.Instr,v,0,[])
-          Addmethod(v['name'],v['id'],self)
+          Addmethod(v['name'],v['id'],self,v.get('debug'))
           mask=v.get('mask');
           if not(mask): continue;
           mask=Find(self.conf['variables'],'name',mask)
diff --git a/pypcc2.py b/pypcc2.py
index f5c6ae9..6bc05a2 100644
--- a/pypcc2.py
+++ b/pypcc2.py
@@ -14,7 +14,7 @@ parser = argparse.ArgumentParser()
 parser.add_argument("-s", "--simulator", help="Do not connect to I2c, but simulate behaviour.", action="store_true")
 parser.add_argument("-p", "--port", help="Port number to listen on [%(default)s].", type=int, default=4842)
 parser.add_argument("-l", "--loglevel", help="Log level [%(default)s].", type=str, choices=["DEBUG","INFO","WARNING","ERROR"], default="INFO")
-#parser.add_argument("-c", "--config", help="YAML config file.",type=str, action="store_true",default='RCU')
+parser.add_argument("-c", "--config", help="YAML config files, comma seperated [%(default)s]",type=str, default='RCU')
 args = parser.parse_args()
 
 # set log level
@@ -34,8 +34,9 @@ signal.signal(signal.SIGINT, signal_handler)
 
 #Start i2c processes as soon as possible to have minimum duplication
 logging.info("Start I2C processes")   
-I2Cports=['UNB2']
-#I2Cports=[]
+#I2Cports=['UNB2','RCU','CLK']
+#I2Cports=['RCU']
+I2Cports=[x for x in args.config.split(',')]
 threads=[]
 I2Cclients=[]
 for name in I2Cports:
-- 
GitLab