From 5bbc8fb52069fe7d4366f5f6926a3b303c6b94bb Mon Sep 17 00:00:00 2001
From: Paulus <kruger@astron.nl>
Date: Wed, 28 Apr 2021 01:50:02 +0100
Subject: [PATCH] RCU status added

---
 config/RCU.yaml         | 24 ++++++++++++++----------
 i2cserv/i2c_array.py    |  2 +-
 i2cserv/i2c_dev.py      |  2 +-
 opcuaserv/yamlreader.py | 13 +++++++++----
 testCLK.py              |  3 +--
 testRCU.py              | 10 +++++++---
 6 files changed, 33 insertions(+), 21 deletions(-)

diff --git a/config/RCU.yaml b/config/RCU.yaml
index c17fd0b..ba37d23 100644
--- a/config/RCU.yaml
+++ b/config/RCU.yaml
@@ -209,11 +209,10 @@ variables:
      dim: 32
 
    - name: RCU_state
-     description: State of RCUs 0=unknown, 1=ready, 2=busy, 3=error
-     driver: I2C_RCU
+     description: State of RCUs 0=unknown, 1=ready, 2=busy, 3= wait PPS, 4=error
      rw:  variable #server variable, not linked to IO
      dtype: uint8
-     dim: 32
+     dim: 1
 
    - name: RCU_attenuator
      description: Attenuator before ADC
@@ -348,6 +347,7 @@ methods:
     driver: I2C_RCU
     hidden: True
     instructions:   
+    - RCU_state: 2
     - RCU_IO1_GPIO1: Update
     - RCU_IO1_GPIO2: Update
     - RCU_IO2_GPIO1: Update
@@ -360,11 +360,16 @@ methods:
 #    - IO3.GPIO1: Update
 #    - IO3.GPIO2: Update
     - IO3.CONF1: Update
+    - RCU_mask: True
+    - RCU_update: 0
+    - RCU_mask: False
+    - RCU_state: 1
 
   - name: RCU_on
     driver: I2C_RCU
     mask: RCU_mask
     instructions:
+     - RCU_state: 2
      - IO2.CONF1: 0    #Set device register, can also specify a register adress direction e.g. OIO2.0: 0
      - IO2.GPIO1: 0x4A
      - IO2.GPIO2: 0x55
@@ -385,21 +390,18 @@ methods:
 #     - ADC2_on: 0
 #     - WAIT: 500         #ms to wait
      - RCU_update: 0
+     - RCU_state: 1
 
   - name: RCU_update
     driver: I2C_RCU
     mask: RCU_mask
     debug: True
     instructions:
-#     - RCU_ADC_lock: Update
-      - RCU_IO1_GPIO1 : Update
-      - RCU_IO1_GPIO2 : Update
-      - RCU_IO2_GPIO1 : Update
-      - RCU_IO2_GPIO2 : Update
-      - RCU_IO3_GPIO1 : Update
-      - RCU_IO3_GPIO2 : Update
       - RCU_Pwr_dig: Update  #Read value and update the OPC-UA variable
       - RCU_ADC_lock: Update
+      - RCU_Pwr_dig: Update
+      - RCU_ID: Update
+      - RCU_version: Update
 
 
   - name: ADC1_on
@@ -430,5 +432,7 @@ methods:
     driver: I2C_RCU
     mask: RCU_mask
     instructions:
+     - RCU_state: 3
      - HB_UC_update.wait_pps : 1
+     - RCU_state: 1
 
diff --git a/i2cserv/i2c_array.py b/i2cserv/i2c_array.py
index 976274a..aee041c 100644
--- a/i2cserv/i2c_array.py
+++ b/i2cserv/i2c_array.py
@@ -200,7 +200,7 @@ class i2c_array(i2c_dev):
         value[:]=value2[:];
         if devreg['store']:
              storearray=self.getstorearray(devreg,len(value));
-             storearray[self.RCUi]=value[:]
+             storearray[self.RCUi]=value[0]
              logging.debug(str(("Store buffer",self.RCUi,value[0])))
  #            print("Stored values:",self.getstorearray(devreg))
         if (width!=l1*8) or (bitoffset>0):
diff --git a/i2cserv/i2c_dev.py b/i2cserv/i2c_dev.py
index 2d7ee15..bcf8ba9 100644
--- a/i2cserv/i2c_dev.py
+++ b/i2cserv/i2c_dev.py
@@ -253,7 +253,7 @@ class i2c_dev(hwdev):
         if devreg['store']:
              devreg['storeval']=value[0];
         l1=int(np.floor((width+bitoffset+7)/8))
-        print(value[0],width,bitoffset,l1)
+        #print(value[0],width,bitoffset,l1)
         if (width!=l1*8) or (bitoffset>0):
             if (width<8):
               for i in range(len(value)):
diff --git a/opcuaserv/yamlreader.py b/opcuaserv/yamlreader.py
index ba20318..9616cbc 100644
--- a/opcuaserv/yamlreader.py
+++ b/opcuaserv/yamlreader.py
@@ -47,8 +47,8 @@ class yamlreader(yamlconfig):
             var1=AddVarR(name+"_R",varvalue2,v['id'],v.get('debug'))
             v['OPCR']=var1
             logging.debug("Var added:"+name+"_R")
-            self.server.readvar(v['id'])
-            time.sleep(0.1);
+#            self.server.readvar(v['id'])
+#            time.sleep(0.1);
 #            Inst=Vars.Instr(Vars.DevType.VarUpdate,v,dim2,varvalue2)
 #            Q1.put(Inst)
 
@@ -179,7 +179,12 @@ class yamlreader(yamlconfig):
         if dtype=="double": 
                 scale=float(v.get('scale',1.))
                 data2=[(d*scale) for d in data2]
-        data3=v['OPCR'].get_value();
+        var1=v.get('OPCR')
+        if not(var1): var1=v.get('OPCW')
+        if not(var1):
+           logging.warn("OPC variable not found!!");
+           return;
+        data3=var1.get_value();
 #        print("OPCset",v['name'],data3,mask)
         if mask: #Only update masked values
             step=len(data2)//len(mask)
@@ -190,7 +195,7 @@ class yamlreader(yamlconfig):
             data3=data2;
         if len(data3)==1: data3=data3[0];
         logging.info(str(("OPCset",v['name'],data3)))
-        v['OPCR'].set_value(data3);
+        var1.set_value(data3);
 
     def Monitor(self):
         T1=self.monitorvar.get_value()*10;
diff --git a/testCLK.py b/testCLK.py
index 34f5b9f..7ca0294 100644
--- a/testCLK.py
+++ b/testCLK.py
@@ -37,7 +37,7 @@ var1=RCU_conf.getvarid('CLK_I2C_OK')
 #RCU_I2C.setvar(var1,[True])
 
 var1=RCU_conf.getvarid('CLK_PLL_locked')
-#RCU_I2C.readvar(var1,[])
+RCU_I2C.readvar(var1,[])
 
 
 var1=RCU_conf.getvarid('CLK_PLL_locked_SPI')
@@ -45,7 +45,6 @@ var1=RCU_conf.getvarid('CLK_PLL_locked_SPI')
 RCU_I2C.readvar(var1,[])
 
 
-
 #var1=RCU_conf.getmethodid('CLK_on');
 var1=RCU_conf.getmethodid('CLK_PLL_setup');
 #RCU_I2C.callmethod(var1,[])
diff --git a/testRCU.py b/testRCU.py
index 868e96a..27ca7dd 100644
--- a/testRCU.py
+++ b/testRCU.py
@@ -11,7 +11,7 @@ import sys
 import signal
 from yamlconfig import Find;
 
-logging.basicConfig(level="DEBUG",format='%(asctime)s [%(levelname)-8s,%(filename)-20s:%(lineno)-3d] %(message)s')
+logging.basicConfig(level="INFO",format='%(asctime)s [%(levelname)-8s,%(filename)-20s:%(lineno)-3d] %(message)s')
 
 RunTimer=True;
 #def signal_handler(sig, frame):
@@ -44,6 +44,10 @@ if False:
     N=32;
     mask=[i<8 for i in range(N)];
     data=[0]*N;
+elif True:
+    var1=RCU_conf.getvarid('RCU_ADC_lock');
+    N=32*3;
+    mask=[i<5*3 for i in range(N)];
 elif False:
     var1=RCU_conf.getvarid('RCU_attenuator');
     N=32*3;
@@ -59,7 +63,7 @@ else:
 #print("mask=",mask);
 #print("data=",data);
 #RCU_I2C.setvar(var1,data,mask);
-#RCU_I2C.readvar(var1,mask);
+RCU_I2C.readvar(var1,mask);
 
 var1=RCU_conf.getvarid('RCU_temperature');
 N=32;
@@ -77,7 +81,7 @@ mask=[i<7 for i in range(N)];
 #RCU_I2C.callmethod(var1,mask)
 
 
-time.sleep(2);
+time.sleep(5);
 
 while RCU_I2C.data_waiting():
     varid,data,mask=RCU_I2C.readdata()
-- 
GitLab