diff --git a/config/RECVTR.yaml b/config/RECVTR.yaml
index f1a81f0af082247d690b5482b335a1955e83a462..97a698461ad42c861c1623b981ee67923069003d 100644
--- a/config/RECVTR.yaml
+++ b/config/RECVTR.yaml
@@ -10,7 +10,7 @@ drivers:
    type: i2c_array #An array of similar devices connected to an I2C switch
    parent: I2C1
    parameters: [0,31,14] #start,number of RCUs, error count to disable I2C
-   status: RCU_I2C_STATUS
+   status: RCU_I2C_error
  - name: I2C_HBAT
    type: hba1 #Special driver to manage HBAT1s.
    parent: I2C_RCU
@@ -220,7 +220,7 @@ variables:
      dtype: boolean
      dim: 32
 
-   - name: RCU_I2C_STATUS
+   - name: RCU_I2C_error
      description: 0=Good, >0 communication error
      driver: I2C_RCU
      rw:  ro #server RW variable, not linked to IO
@@ -235,7 +235,7 @@ variables:
 #     dtype: uint8
 #     dim: 1
 
-   - name: RECVTR_busy
+   - name: RECVTR_translator_busy
      description: True when I2C line is busy
      rw:  ro #server variable, not linked to IO
      dtype: boolean
@@ -305,7 +305,7 @@ variables:
      dtype: double
      dim: 32
      monitor: true
-     mask: RCU_I2C_STATUS
+     mask: RCU_I2C_error
 
    - name: RCU_3V3
      description: RCU 3.3V voltage (V)
@@ -317,7 +317,7 @@ variables:
      dtype: double
      dim: 32
      monitor: true
-     mask: RCU_I2C_STATUS
+     mask: RCU_I2C_error
 
    - name: RCU_1V8
      description: RCU 1.8V voltage (V)
@@ -329,7 +329,7 @@ variables:
      dtype: double
      dim: 32
      monitor: true
-     mask: RCU_I2C_STATUS
+     mask: RCU_I2C_error
 
    - name: RCU_2V5
      description: RCU 2.5V voltage (V)
@@ -341,9 +341,9 @@ variables:
      dtype: double
      dim: 32
      monitor: true
-     mask: RCU_I2C_STATUS
+     mask: RCU_I2C_error
 
-   - name: RCU_V_ANT
+   - name: RCU_ANT_VOUT
      description: RCU antenna voltage (V)
      driver: I2C_RCU
      devreg:  [AN.V_Ant_O0,AN.V_Ant_O1,AN.V_Ant_O2]
@@ -353,9 +353,9 @@ variables:
      dtype: double
      dim: 96
      monitor: true
-     mask: RCU_I2C_STATUS
+     mask: RCU_I2C_error
 
-   - name: RCU_ANT_V
+   - name: RCU_ANT_VIN
      description: Voltage on antenna output of RCU (V). Controlled by ANT_PWR_ON.
      driver: I2C_RCU
      devreg:  [AN.V_Ant_I0,AN.V_Ant_I1,AN.V_Ant_I2]
@@ -365,9 +365,9 @@ variables:
      dtype: double
      dim: 96
      monitor: true
-     mask: RCU_I2C_STATUS
+     mask: RCU_I2C_error
 
-   - name: RCU_ANT_I
+   - name: RCU_ANT_IOUT
      description: Current drawn on antenna output of RCU (A)
      driver: I2C_RCU
      devreg:  [AN.I_Ant0,AN.I_Ant1,AN.I_Ant2]
@@ -377,7 +377,7 @@ variables:
      dtype: double
      dim: 96
      monitor: true
-     mask: RCU_I2C_STATUS
+     mask: RCU_I2C_error
 
    - name: RCU_PWR_DIGITAL_ON
      description: RCU digital power enable. Controlled by calling RCU_on/RCU_off
@@ -400,7 +400,7 @@ variables:
      dtype: boolean
      dim: 32
      monitor: true
-     mask: RCU_I2C_STATUS
+     mask: RCU_I2C_error
 
    - name: RCU_PWR_ANALOG_ON
      description: RCU analog power enable. Controlled by RCU_on/off
@@ -479,7 +479,7 @@ variables:
      dim: 32
      mask: RCU_mask
      
-   - name: RCU_ADC_lock
+   - name: RCU_ADC_locked
      description: RCU ADC lock status, 0x81=locked
      driver: I2C_RCU
      devreg:  [ADC1.PLL_stat,ADC2.PLL_stat,ADC3.PLL_stat]
@@ -568,7 +568,7 @@ variables:
      debug: true
 
 methods:
-  - name: RCU_Init #Called after startup to load. Should have all stored registers  
+  - name: RECVTR_Init #Called after startup to load. Should have all stored registers  
     driver: I2C_RCU
     debug: True
     instructions:   
@@ -591,7 +591,7 @@ methods:
     driver: I2C_RCU
     mask: RCU_mask
     instructions:
-     - RCU_I2C_STATUS: 0
+     - RCU_I2C_error: 0
      - IO2.CONF1: 0x80 #Pgood on 0x80
      - IO2.GPIO1: 0x4A #0x40 Dig on, 0x0a =10dB att
      - IO2.GPIO2: 0x55 #0x15 #Band0 (or 0x2a band 1)  #LEDS=on=low
@@ -669,7 +669,7 @@ methods:
     driver: I2C_RCU
     mask: RCU_mask
     instructions:
-     - RCU_I2C_STATUS: 0
+     - RCU_I2C_error: 0
      - RCU_PWR_ANALOG_ON: 0 #Switch power off
      - RCU_PWR_DIGITAL_ON: 0 #Switch power off
      - IO2.GPIO1: 0
diff --git a/testRCUL.py b/testRCUL.py
index f9f3525492baa6667ceea1d6c2fa56fbe1b80d4d..d6457359410543fae4b2f9fd22fe16ab28c36321 100644
--- a/testRCUL.py
+++ b/testRCUL.py
@@ -13,6 +13,7 @@ from yamlconfig import Find;
 import yamlconfig as yc
 
 logging.basicConfig(level="WARNING",format='%(asctime)s [%(levelname)-8s,%(filename)-20s:%(lineno)-3d] %(message)s')
+#logging.basicConfig(level="DEBUG",format='%(asctime)s [%(levelname)-8s,%(filename)-20s:%(lineno)-3d] %(message)s')
 
 RunTimer=True;
 #def signal_handler(sig, frame):
@@ -24,37 +25,66 @@ RunTimer=True;
 #logging.info("Start I2C processes")   
 #threads=[]
 #I2Cclients=[]
-name='RCUL'
+name='RECVTR'
 #RCU_I2C=i2client.i2client(name=name)
-
+RCUNR=1;
 conf=yc.yamlconfig(name)
 conf.linkdevices()
 conf.loaddrivers()
 conf.linkdrivers()
 
+#def getRCU(D,N=1):
+#return D[N*RCUNR:N*(RCUNR+1)]
+
 def GetVal(name,N=1):
  varid=conf.getvarid(name);
  var1=conf.getvars()[varid]
  drv=var1.get('drivercls');
- mask=[True]*N+[False]*((32-1)*N);
+ mask=[False]*RCUNR*N+[True]*N+[False]*((32-RCUNR-1)*N);
  data=drv.OPCUAReadVariable(varid,var1,mask)
- return data[0].data,var1
+ data=data[0].data
+ N3=len(data)//32;
+ return data[N3*RCUNR:N3*(RCUNR+1)],var1
+
 
 data,var1=GetVal('RCU_ID');
-print("ID=",[hex(d) for d in data[:4]]);
+#print("ID= %h%h%h%h" % (,str([hex(d) for d in data[:4]]));
+ID=("%.2x%.2x%.2x%.2x" % (data[0],data[1],data[2],data[3]))
+
+logPath='log'
+
+rootLogger = logging.getLogger()
+fileHandler = logging.FileHandler("{0}/{1}.log".format(logPath, "RCU2L"+ID))
+#fileHandler.setFormatter(logFormatter)
+rootLogger.addHandler(fileHandler)
+
+logging.warning("ID=%s" % ID)
+#exit();
+#print("Check 
+def Check(D,Dmin,Dmax):
+  for d in D:
+    if (d<Dmin): 
+        logging.error("Value to small");
+        return False;
+    if (d>Dmax): 
+        logging.error("Value to large");
+        return False;
+  return True
 
-if False:
+if True:
  data,var1=GetVal('RCU_temperature');
  D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
- print("Temp=",D,"K")
- if (D<290) or (D>350): exit()
+ logging.warning("RCU Temperature=%.3f K" % D)
+ if not Check([D],290,350): exit();
 
  data,var1=GetVal('RCU_3V3');
  D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
- print("3V3=",D,"V")
- if (D<3.2) or (D>3.4): exit()
+ logging.warning("3V3 =%.3f V" % D)
+# print("3V3=",D,"V")
+ if not Check([D],3.2,3.4): exit();
+# if (D<3.2) or (D>3.4): exit()
 #print("data=",[hex(d) for d in data[:3]]);
-
+#exit()
 
 def SetRegister(regname,value):
   methodid=conf.getmethodid("RCU_on");
@@ -62,12 +92,13 @@ def SetRegister(regname,value):
   drv=var1.get('drivercls');
   v1=conf.getdevreg(regname)
   drv2=v1.get('drivercls')
-  mask=[True]+[False]*31;
+  mask=[False]*(RCUNR)+[True]+[False]*(31-RCUNR);
   if drv:  drv.Setdevreg(v1,value,mask)
   elif drv2: drv2.Setdevreg(v1,value,mask)
   else: logging.warn("Driver not specified for instruction"+key)
 
-if False:
+logging.warning("Switch RCU Power on");
+if True:
  SetRegister("IO1.GPIO1",[0])
  SetRegister("IO1.GPIO2",[0x80]) #Analog power on
  SetRegister("IO2.GPIO1",[0x40]) #Digital power on
@@ -78,85 +109,120 @@ if False:
  SetRegister("IO2.CONF1",[0x80]) #Pgood on P07
  SetRegister("IO2.CONF2",[0])
 
- print("IO expander status:");
- data,var=GetVal('RCU_IO1_GPIO1');print("IO1_1",hex(data[0]))
- data,var=GetVal('RCU_IO1_GPIO2');print("IO1_2",hex(data[0]))
- data,var=GetVal('RCU_IO2_GPIO1');print("IO2_1",hex(data[0]))
- data,var=GetVal('RCU_IO2_GPIO2');print("IO2_2",hex(data[0]))
-
-if False:
+ logging.warning("  Check IO expander 1&2");
+# print("IO expander status:");
+ data,var=GetVal('RCU_IO1_GPIO1');
+ if not Check(data,0,0): exit();
+ data,var=GetVal('RCU_IO1_GPIO2');
+ if not Check(data,0x80,0x80): exit();
+ data,var=GetVal('RCU_IO2_GPIO1');
+ if not Check(data,0xC0,0xC0): exit();
+ data,var=GetVal('RCU_IO2_GPIO2');
+ if not Check(data,0x0,0x0): exit();
+
+logging.warning("Check voltages")
+if True:
  data,var1=GetVal('RCU_1V8');
  D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
- print("1V8=",D,"")
+ logging.warning("  1V8 =%.3f V" % D)
+ if not Check([D],1.7,1.9): exit();
 
  data,var1=GetVal('RCU_2V5');
  D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
- print("2V5=",D,"")
-
-if False:
- data,var1=GetVal('ANT_Vin');
+ logging.warning("  2V5 =%.3f V" % D)
+ if not Check([D],2.4,2.6): exit();
+if True:
+ data,var1=GetVal('RCU_ANT_VIN');
  D0=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
  D1=((data[3]*256+data[4])*256+data[5])*var1.get('scale',1.)
  D2=((data[6]*256+data[7])*256+data[8])*var1.get('scale',1.)
- print("Vant_in=",D0,D1,D2)
+ logging.warning("  Vant_in=%.2f %.2f %.2f" % (D0,D1,D2))
+ if not Check([D0,D1,D2],5,10): exit();
 
-# SetRegister("IO1.GPIO1",[0xC0]) #Antenna power on
-# SetRegister("IO1.GPIO2",[0xC0]) #Analog power on
+ logging.warning("Switch Antenna power on")
+ SetRegister("IO1.GPIO1",[0xC0]) #Antenna power on
+ SetRegister("IO1.GPIO2",[0xC0]) #Analog power on
 
- data,var1=GetVal('ANT_Vout');
+ data,var1=GetVal('RCU_ANT_VOUT');
  D0=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
  D1=((data[3]*256+data[4])*256+data[5])*var1.get('scale',1.)
  D2=((data[6]*256+data[7])*256+data[8])*var1.get('scale',1.)
- print("Vant_out=",D0,D1,D2)
+ logging.warning("  Vant_out=%.2f %.2f %.2f" % (D0,D1,D2))
+ if not Check([D0,D1,D2],5,10): exit();
 
- data,var1=GetVal('ANT_I');
+ data,var1=GetVal('RCU_ANT_IOUT');
  D0=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
  D1=((data[3]*256+data[4])*256+data[5])*var1.get('scale',1.)
  D2=((data[6]*256+data[7])*256+data[8])*var1.get('scale',1.)
- print("Iant=",D0,D1,D2)
+ logging.warning("  Iant_out=%.2f %.2f %.2f" % (D0,D1,D2))
+# print("Iant=",D0,D1,D2)
+#exit()
 
-if False:
+if True:
+ logging.warning("Test ADC read")
+ logging.warning("  Check IO expander 3");
  SetRegister("IO3.GPIO1",[0x15]) #ADC_SDIO=high, clk=low,  DTH_EN=low
  SetRegister("IO3.GPIO2",[0x47]) #ADC SC=high, DTH_SDA=high
  SetRegister("IO3.CONF1",[0]) #All output
  SetRegister("IO3.CONF2",[0])
- data,var=GetVal('RCU_IO3_GPIO1');print("IO3_1",hex(data[0]))
- data,var=GetVal('RCU_IO3_GPIO2');print("IO3_2",hex(data[0]))
+ data,var=GetVal('RCU_IO3_GPIO1');
+ if not Check(data,0x15,0x15): exit();
+ data,var=GetVal('RCU_IO3_GPIO2');
+ if not Check(data,0x47,0x47): exit();
 
-if False:
+if True:
  #Test reading register from ADCs
- data,var=GetVal('RCU_ADC_JESD');print("ADC JESD",[hex(d) for d in data[:3]])
+ data,var=GetVal('RCU_ADC_JESD');
+ logging.warning("  ADC JESD (0x14)=%x %x %x" % (data[0],data[1],data[2]))
+ if not Check(data,0x14,0x14): exit();
 
+ logging.warning("Test ADC write")
  #Test writing ADC register
  SetRegister("ADC1.SYNC_control",[1])
  SetRegister("ADC1.Update",[1])
- data,var=GetVal('RCU_ADC_sync');print("ADC sync",[hex(d) for d in data[:3]])
-
+ SetRegister("ADC2.SYNC_control",[1])
+ SetRegister("ADC2.Update",[1])
+ SetRegister("ADC3.SYNC_control",[1])
+ SetRegister("ADC3.Update",[1])
+ data,var=GetVal('RCU_ADC_sync');
+ logging.warning("  ADC sync (0x1)=%x %x %x" % (data[0],data[1],data[2]))
+ if not Check(data,0x1,0x1): exit();
+#exit()
 #Need to update I2c bitbang....
 if True:
+ logging.warning("Test DITHER communication")
  SetRegister("IO3.GPIO1",[0x15]) #ADC_SDIO=high, clk=low,  DTH_SDN=low
- SetRegister("IO3.GPIO2",[0x3F]) #ADC SC=high, DTH_SDA=low, DTH_CLK=high
+ SetRegister("IO3.GPIO2",[0x47]) #ADC SC=high, DTH_SDA=high
  SetRegister("IO3.CONF1",[0]) #All output
- SetRegister("IO3.CONF2",[0x40]) #DTH_SDA=input
+ SetRegister("IO3.CONF2",[0x0]) #All output (DTH_SDA=input)
+
 
 # data,var=GetVal('RCU_IO3_GPIO1');print("IO3_1",hex(data[0]))
 # data,var=GetVal('RCU_IO3_GPIO2');print("IO3_2",hex(data[0]))
  f=int(150e6)
- print("Frequency set=",f)
+ logging.warning("  Set frequency 150MHz");
+# print("Frequency set=",f)
  d=[0]*4;
  for i in range(4):
    d[3-i]=f%256;f//=256
 # print([hex(h) for h in d])
  SetRegister("DTH1.Freq",d) #DTH_SDA=input
+ SetRegister("DTH2.Freq",d) #DTH_SDA=input
+ SetRegister("DTH3.Freq",d) #DTH_SDA=input
 
+ f=int(150e6)
  data,var1=GetVal("RCU_DTH_freq")
 # data,var1=GetVal("RCU_DTH_Rev")
- f=0;
- for i in range(4):
-  f=f*256+data[i];
- print("Frequency read back=",f)
+ for j in range(3):
+   f2=0;
+   for i in range(4):
+     f2=f2*256+data[j*4+i];
+   #print("Frequency read back=",f)
+   logging.warning("  Readback frequency %f" % f2);
+   if not Check([f2],f-1,f+1): exit();
 # print([hex(h) for h in data[:30]])
 
+logging.warning("** I2C communication working **");
 
 #print(data)
 #scale=float(scale)