Skip to content
Snippets Groups Projects
Commit ead72f9e authored by Mick Joris's avatar Mick Joris
Browse files

Test scripts

parent 7ede764d
Branches
Tags
No related merge requests found
Pipeline #26396 passed
PCB_number:
- {ID: 0081cf88, number: '3'}
- {ID: 00817e5b, number: '7'}
- {ID: 00820526, number: '4'}
- {ID: 0081b11b, number: '6'}
- {ID: 0081612a, number: '5'}
- {ID: 008212c8, number: '2'}
- {ID: 0081ed2b, number: '1'}
ant_power:
- ID: 00817e5b
Ioff: 0.024
Ion: 0.03
Iout: [0.003643820544, 0.003630087552, 0.0035522672640000003]
Vin: [43.9113927232, 43.6596229632, 43.569901376]
Vout: [42.0107599168, 41.2234072128, 40.5184518848]
time: 2022-01-29 12:40
- ID: 00820526
Ioff: 0.025
Ion: 0.033
Iout: [0.00361635456, 0.0035751555840000003, 0.0035980439040000003]
Vin: [43.7658240256, 43.6907508608, 43.4344034688]
Vout: [43.5955361152, 43.6349037504, 44.2574617024]
time: 2022-01-29 16:59
- ID: 0081cf88
Ioff: 0.02
Ion: 0.023
Iout: [0.0044082904320000005, 0.002856462336, 0.003579733248]
Vin: [43.39595136, 43.4041910976, 43.718216652799995]
Vout: [0.0466918464, 0.0466918464, 43.525956108799996]
time: 2022-01-29 12:56
- ID: 0081b11b
Ioff: 0.024
Ion: 0.033
Iout: [0.003680441856, 0.003648398208, 0.003698752512]
Vin: [43.5177163712, 43.789627712, 43.742020339199996]
Vout: [44.0752719488, 43.326371353599995, 44.0075229952]
time: 2022-01-30 16:17
- ID: 008212c8
Ioff: 0.024
Ion: 0.033
Iout: [0.003634665216, 0.00359346624, 0.003579733248]
Vin: [43.2201702912, 43.326371353599995, 43.4673624192]
Vout: [43.583634272, 43.2705242432, 43.8061071872]
time: 2022-01-30 16:06
- ID: 0081ed2b
Ioff: 0.025
Ion: 0.033
Iout: [0.00357057792, 0.003611776896, 0.003634665216]
Vin: [43.6861732288, 43.702652704, 43.4893350528]
Vout: [43.7877966592, 43.8244177152, 43.611100064]
time: 2022-01-30 16:07
- ID: 0081612a
Ioff: 0.024
Ion: 0.033
Iout: [0.003630087552, 0.00363924288, 0.00363924288]
Vin: [43.6669471744, 43.9699864128, 43.0919965952]
Vout: [44.0212558912, 43.748429023999996, 43.8070227136]
time: 2022-02-02 23:56
off_power:
- {ID: 00817e5b, I_4V: 0.02, I_6V: 0.033, V_3v3: 3.026841664, temp: 283.38169600000003,
time: '2022-01-29 12:40'}
- {ID: 00820526, I_4V: 0.03, I_6V: 0.023, V_3v3: 3.025905344, temp: 275.544, time: '2022-01-29
16:59'}
- {ID: 0081cf88, I_4V: 0.03, I_6V: 0.034, V_3v3: 3.014669504, temp: 273.339648, time: '2022-01-29
12:56'}
- {ID: 0081b11b, I_4V: 0.03, I_6V: 0.025, V_3v3: 3.019632, temp: 283.136768, time: '2022-01-30
16:17'}
- {ID: 0081612a, I_4V: 0.03, I_6V: 0.023, V_3v3: 3.017852992, temp: 272.115008, time: '2022-02-02
23:56'}
- {ID: 008212c8, I_4V: 0.03, I_6V: 0.023, V_3v3: 3.005774464, temp: 266.726592, time: '2022-01-30
15:55'}
- {ID: 0081ed2b, I_4V: 0.02, I_6V: 0.023, V_3v3: 3.02244096, temp: 267.706304, time: '2022-01-30
16:07'}
on_power:
- {ID: 00817e5b, I_4V: 0.5, I_6V: 1.228, V_1v8: 1.64008545792, V_2v5: 2.33419665024,
time: '2022-01-29 12:40'}
- {ID: 00820526, I_4V: 0.7, I_6V: 1.2, V_1v8: 1.63797973248, V_2v5: 2.31062168064,
time: '2022-01-29 16:59'}
- {ID: 0081cf88, I_4V: 0.51, I_6V: 1.235, V_1v8: 1.62809197824, V_2v5: 2.30764619904,
time: '2022-01-29 12:56'}
- {ID: 0081b11b, I_4V: 0.51, I_6V: 1.243, V_1v8: 1.64274050304, V_2v5: 2.30027616,
time: '2022-01-30 16:17'}
- {ID: 008212c8, I_4V: 0.5, I_6V: 1.22, V_1v8: 1.63738463616, V_2v5: 2.32508709888,
time: '2022-01-30 15:55'}
- {ID: 0081ed2b, I_4V: 0.51, I_6V: 1.219, V_1v8: 1.63921570176, V_2v5: 2.31963967872,
time: '2022-01-30 16:07'}
- {ID: 0081612a, I_4V: 0.51, I_6V: 1.238, V_1v8: 1.64594486784, V_2v5: 2.32092142464,
time: '2022-02-02 23:56'}
PCB_number:
- {ID: 0081cf88, number: '3'}
- {ID: 00817e5b, number: '7'}
- {ID: 00820526, number: '4'}
ant_power:
- ID: 00817e5b
Ioff: 0.024
Ion: 0.03
Iout: [0.003643820544, 0.003630087552, 0.0035522672640000003]
Vin: [43.9113927232, 43.6596229632, 43.569901376]
Vout: [42.0107599168, 41.2234072128, 40.5184518848]
time: 2022-01-29 12:40
- ID: 00820526
Ioff: 0.025
Ion: 0.03
Iout: [0.003588888576, 0.003556844928, 0.003579733248]
Vin: [43.7511756032, 43.7108924416, 43.4252482048]
Vout: [41.953997279999996, 41.2591127424, 41.574053823999996]
time: 2022-01-29 12:52
- ID: 0081cf88
Ioff: 0.02
Ion: 0.023
Iout: [0.0044082904320000005, 0.002856462336, 0.003579733248]
Vin: [43.39595136, 43.4041910976, 43.718216652799995]
Vout: [0.0466918464, 0.0466918464, 43.525956108799996]
time: 2022-01-29 12:56
off_power:
- {ID: 00817e5b, I_4V: 0.02, I_6V: 0.033, V_3v3: 3.026841664, temp: 283.38169600000003,
time: '2022-01-29 12:40'}
- {ID: 00820526, I_4V: 0.03, I_6V: 0.023, V_3v3: 3.024594496, temp: 269.4208, time: '2022-01-29
12:52'}
- {ID: 0081cf88, I_4V: 0.03, I_6V: 0.034, V_3v3: 3.014669504, temp: 273.339648, time: '2022-01-29
12:56'}
on_power:
- {ID: 00817e5b, I_4V: 0.5, I_6V: 1.228, V_1v8: 1.64008545792, V_2v5: 2.33419665024,
time: '2022-01-29 12:40'}
- {ID: 00820526, I_4V: 0.7, I_6V: 1.2, V_1v8: 1.637659296, V_2v5: 2.31043857408, time: '2022-01-29
12:52'}
- {ID: 0081cf88, I_4V: 0.51, I_6V: 1.235, V_1v8: 1.62809197824, V_2v5: 2.30764619904,
time: '2022-01-29 12:56'}
PCB_number:
- {ID: 0081cf88, number: '3'}
- {ID: 00817e5b, number: '7'}
- {ID: 00820526, number: '4'}
- {ID: 0081b11b, number: '6'}
- {ID: 0081612a, number: '5'}
- {ID: 008212c8, number: '2'}
- {ID: 0081ed2b, number: '1'}
ant_power:
- ID: 00817e5b
Ioff: 0.024
Ion: 0.03
Iout: [0.003643820544, 0.003630087552, 0.0035522672640000003]
Vin: [43.9113927232, 43.6596229632, 43.569901376]
Vout: [42.0107599168, 41.2234072128, 40.5184518848]
time: 2022-01-29 12:40
- ID: 00820526
Ioff: 0.025
Ion: 0.033
Iout: [0.00361635456, 0.0035751555840000003, 0.0035980439040000003]
Vin: [43.7658240256, 43.6907508608, 43.4344034688]
Vout: [43.5955361152, 43.6349037504, 44.2574617024]
time: 2022-01-29 16:59
- ID: 0081cf88
Ioff: 0.02
Ion: 0.023
Iout: [0.0044082904320000005, 0.002856462336, 0.003579733248]
Vin: [43.39595136, 43.4041910976, 43.718216652799995]
Vout: [0.0466918464, 0.0466918464, 43.525956108799996]
time: 2022-01-29 12:56
- ID: 0081b11b
Ioff: 0.024
Ion: 0.033
Iout: [0.003680441856, 0.003648398208, 0.003698752512]
Vin: [43.5177163712, 43.789627712, 43.742020339199996]
Vout: [44.0752719488, 43.326371353599995, 44.0075229952]
time: 2022-01-30 16:17
- ID: 008212c8
Ioff: 0.024
Ion: 0.033
Iout: [0.003634665216, 0.00359346624, 0.003579733248]
Vin: [43.2201702912, 43.326371353599995, 43.4673624192]
Vout: [43.583634272, 43.2705242432, 43.8061071872]
time: 2022-01-30 16:06
- ID: 0081ed2b
Ioff: 0.025
Ion: 0.033
Iout: [0.00357057792, 0.003611776896, 0.003634665216]
Vin: [43.6861732288, 43.702652704, 43.4893350528]
Vout: [43.7877966592, 43.8244177152, 43.611100064]
time: 2022-01-30 16:07
off_power:
- {ID: 00817e5b, I_4V: 0.02, I_6V: 0.033, V_3v3: 3.026841664, temp: 283.38169600000003,
time: '2022-01-29 12:40'}
- {ID: 00820526, I_4V: 0.03, I_6V: 0.023, V_3v3: 3.025905344, temp: 275.544, time: '2022-01-29
16:59'}
- {ID: 0081cf88, I_4V: 0.03, I_6V: 0.034, V_3v3: 3.014669504, temp: 273.339648, time: '2022-01-29
12:56'}
- {ID: 0081b11b, I_4V: 0.03, I_6V: 0.025, V_3v3: 3.019632, temp: 283.136768, time: '2022-01-30
16:17'}
- {ID: 0081612a, I_4V: 0.03, I_6V: 0.023, V_3v3: 3.0172912, temp: 267.951232, time: '2022-01-30
13:31'}
- {ID: 008212c8, I_4V: 0.03, I_6V: 0.023, V_3v3: 3.005774464, temp: 266.726592, time: '2022-01-30
15:55'}
- {ID: 0081ed2b, I_4V: 0.02, I_6V: 0.023, V_3v3: 3.02244096, temp: 267.706304, time: '2022-01-30
16:07'}
on_power:
- {ID: 00817e5b, I_4V: 0.5, I_6V: 1.228, V_1v8: 1.64008545792, V_2v5: 2.33419665024,
time: '2022-01-29 12:40'}
- {ID: 00820526, I_4V: 0.7, I_6V: 1.2, V_1v8: 1.63797973248, V_2v5: 2.31062168064,
time: '2022-01-29 16:59'}
- {ID: 0081cf88, I_4V: 0.51, I_6V: 1.235, V_1v8: 1.62809197824, V_2v5: 2.30764619904,
time: '2022-01-29 12:56'}
- {ID: 0081b11b, I_4V: 0.51, I_6V: 1.243, V_1v8: 1.64274050304, V_2v5: 2.30027616,
time: '2022-01-30 16:17'}
- {ID: 008212c8, I_4V: 0.5, I_6V: 1.22, V_1v8: 1.63738463616, V_2v5: 2.32508709888,
time: '2022-01-30 15:55'}
- {ID: 0081ed2b, I_4V: 0.51, I_6V: 1.219, V_1v8: 1.63921570176, V_2v5: 2.31963967872,
time: '2022-01-30 16:07'}
Monitor_ADC:
- {ID: I2C1, time: 333x33}
PCB_number:
- {ID: 12c1, number: 1}
- {ID: 12c2, number: 1}
Power_supply:
- {ID: I2C1, Ioff_3V: 3, Ioff_6V: 50, Ion_3V: 3, Ion_6V: 5, time: '22-01-29 11:11'}
Test_log:
- {ID: 4343, message: null, time: 333}
description: Test results on RCU2HQM
Monitor_ADC:
- {ID: I2C1, time: 333x33}
PCB_number:
- {ID: 12c1, number: 1}
- {ID: 12c2, number: 1}
- {ID: 0081cf88, number: '3'}
Power_supply:
- {ID: I2C1, Ioff_3V: 3, Ioff_6V: 3, Ion_3V: 3, Ion_6V: 5, time: 333x33}
Test_log:
- {ID: 4343, message: null, time: 333}
description: Test results on RCU2HQM
import yaml
class yamllog():
def __init__(self,yamlfile):
self.conf=yaml.load(open(yamlfile+'.yaml'))
def getdata(self,table,field,value):
for D in self.conf[table]:
if D[field]==value: return D
return None;
def insert(self,table,D):
self.conf[table].append(D);
def replace(self,table,field,value,Dnew):
for i,D in enumerate(self.conf[table]):
if D[field]==value:
self.conf[table][i]=Dnew;
return;
self.insert(table,Dnew);
def save(self,yamlfile):
with open(yamlfile+".yaml","w") as file:
yaml.dump(self.conf,file)
if False:
from datetime import datetime;
testtime=datetime.now().strftime("%y-%m-%d %H:%M")
T1=yamllog("RCU2HQM")
D=T1.getdata("Power_supply","ID","I2C1")
D['Ioff_6V']=50;
D['time']=testtime;
T1.replace("Power_supply","ID","I2C1",D)
print(D)
T1.save("RCU2HQM2")
name='RECVTR_HB' #YAML config file with all register values etc
logPath='log'
import logging
import argparse
from opcuaserv import opcuaserv
from opcuaserv import i2client
from opcuaserv import yamlreader
#from opcuaserv import pypcc2
from i2cserv import i2cthread
import threading
import time
import sys
import signal
from yamlconfig import Find;
import yamlconfig as yc
from datetime import datetime
testtime=datetime.now().strftime("%y-%m-%d %H:%M")
RCUNR=(0 if len(sys.argv)<2 else int(sys.argv[1]));
print("RCU NR=",RCUNR," tested at ",testtime);
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;
conf=yc.yamlconfig(name)
conf.linkdevices()
conf.loaddrivers()
conf.linkdrivers()
Bands=[2,1,4]
Band=Bands[0]; #0=110, 1=170, 2=210
DAB=1; #1=DAB filter enables
Att=10;
def GetVal(name,N=1):
varid=conf.getvarid(name);
var1=conf.getvars()[varid]
drv=var1.get('drivercls');
mask=[False]*RCUNR*N+[True]*N+[False]*((32-RCUNR-1)*N);
data=drv.OPCUAReadVariable(varid,var1,mask)
data=data[0].data
N3=len(data)//32;
return data[N3*RCUNR:N3*(RCUNR+1)],var1
data,var1=GetVal('RCU_PCB_ID');
ID=("%.2x%.2x%.2x%.2x" % (data[0],data[1],data[2],data[3]))
rootLogger = logging.getLogger()
#fileHandler = logging.FileHandler("{0}/{1}.log".format(logPath, "RCU2L"+ID))
#fileHandler.setFormatter(logFormatter)
#rootLogger.addHandler(fileHandler)
logging.warning("ID=%s" % ID)
now=datetime.now();
logging.warning("Time="+now.strftime("%Y-%m-%d %H:%M"));
#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 True:
data,var1=GetVal('RCU_TEMP');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
logging.warning("RCU Temperature=%.3f K" % D)
if not Check([D],290,350): exit();
data,var1=GetVal('RCU_PWR_3V3');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
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");
var1=conf.getmethod(methodid)
drv=var1.get('drivercls');
v1=conf.getdevreg(regname)
drv2=v1.get('drivercls')
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 True:
# logging.warning("Switch RCU Power off");
# SetRegister("IO1.GPIO1",[0])
# SetRegister("IO1.GPIO2",[0x0]) #Analog power off
# SetRegister("IO2.GPIO1",[0x0]) #Digital power off
# SetRegister("IO2.GPIO2",[0x80])
SetRegister("IO1.CONF1",[0])
SetRegister("IO1.CONF2",[0])
SetRegister("IO2.CONF1",[0x80]) #Pgood on 0x80
SetRegister("IO2.CONF2",[0])
SetRegister("IO4.CONF1",[0xC0])#pin 0x40, 0x80 not used
SetRegister("IO4.CONF2",[0xF8])
time.sleep(1.0)
logging.warning("Switch RCU Power on");
SetRegister("IO1.GPIO1",[Att])#0x0a = 10dB att
SetRegister("IO1.GPIO2",[0x80+Att])#0x80 Analog on, 0x0a=10dB att
SetRegister("IO2.GPIO1",[0x40+Att])#0x40 Dig on, 0x0a =10dB att
SetRegister("IO2.GPIO2",[0x40+Band+(Band<<3)])#0x09 #Band0 (or 0x12 or 0x24) #LED green=on=low 0x40
SetRegister("IO4.GPIO1",[0x51 if DAB else 0x2A])#DAB switch states: 0x2A or 0x51
SetRegister("IO4.GPIO2",[Band])#Band select
time.sleep(0.5)
# logging.warning(" Check IO expander 1&2");
# print("IO expander status:");
# data,var=GetVal('RCU_IO1_GPIO1');
# if not Check(data,0,0):
# logging.warning(" IO1_GPIO1 =%x" % data[0])
# exit();
# data,var=GetVal('RCU_IO1_GPIO2');
# if not Check(data,0x80,0x80):
# logging.warning(" IO1_GPIO2 =%x" % data[0])
# exit();
# data,var=GetVal('RCU_IO2_GPIO1');
# if not Check(data,0xC0,0xC0):
# logging.warning(" IO2_GPIO1 =%x" % data[0])
# exit();
# data,var=GetVal('RCU_IO2_GPIO2');
# if not Check(data,0x40,0x40):
# logging.warning(" IO2_GPIO2 =%x" % data[0])
# exit();
# time.sleep(0.5)
if True:
logging.warning("Check voltages")
data,var1=GetVal('RCU_PWR_1V8');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
logging.warning(" 1V8 =%.3f V" % D)
if not Check([D],1.7,1.9): exit();
data,var1=GetVal('RCU_PWR_2V5');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
logging.warning(" 2V5 =%.3f V" % D)
if not Check([D],2.4,2.6): exit();
if False:
data,var1=GetVal('RCU_PWR_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.)
logging.warning(" Vant_in=%.2f %.2f %.2f" % (D0,D1,D2))
if not Check([D0,D1,D2],5,10): exit();
logging.warning("Switch Antenna power on")
SetRegister("IO1.GPIO1",[0xC0]) #Antenna power on
SetRegister("IO1.GPIO2",[0xC0]) #Analog power on
data,var1=GetVal('RCU_PWR_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.)
logging.warning(" Vant_out=%.2f %.2f %.2f" % (D0,D1,D2))
if not Check([D0,D1,D2],5,10): exit();
data,var1=GetVal('RCU_PWR_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.)
logging.warning(" Iant_out=%.2f %.2f %.2f" % (D0,D1,D2))
# print("Iant=",D0,D1,D2)
#exit()
if False:
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');
if not Check(data,0x15,0x15): exit();
data,var=GetVal('RCU_IO3_GPIO2');
if not Check(data,0x47,0x47): exit();
if False:
#Test reading register from ADCs
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 & ADC lock")
#Test writing ADC register
SetRegister("ADC1.SYNC_control",[1])
SetRegister("ADC1.CML_level",[7]);
SetRegister("ADC1.Update",[1])
SetRegister("ADC2.SYNC_control",[1])
SetRegister("ADC2.CML_level",[7]);
SetRegister("ADC2.Update",[1])
SetRegister("ADC3.SYNC_control",[1])
SetRegister("ADC3.CML_level",[7]);
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();
data,var=GetVal('RCU_ADC_locked');
logging.warning(" ADC locked (0x1)=%x %x %x" % (data[0],data[1],data[2]))
if not Check(data,0x1,0x1): logging.error("*** FAILED ADC lock!")
# - RCU_ADC_locked: Update
#exit()
#Need to update I2c bitbang....
if False:
logging.warning("Test DITHER communication")
SetRegister("IO3.GPIO1",[0x15]) #ADC_SDIO=high, clk=low, DTH_SDN=low
SetRegister("IO3.GPIO2",[0x47]) #ADC SC=high, DTH_SDA=high
SetRegister("IO3.CONF1",[0]) #All output
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]))
f0=102.2e6;
f=int(f0)
logging.warning(" Set frequency %f"%f0);
# 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(f0)
data,var1=GetVal("RCU_DTH_freq")
# data,var1=GetVal("RCU_DTH_Rev")
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("Test DITHER on")
SetRegister("DTH1.CONF",[0])
SetRegister("DTH1.Tune",[0,0])
SetRegister("DTH1.Start",[0,1,0,0,1])
SetRegister("DTH2.CONF",[0])
SetRegister("DTH2.Tune",[0,0])
SetRegister("DTH2.Start",[0,1,0,0,1])
SetRegister("DTH3.CONF",[0])
SetRegister("DTH3.Tune",[0,0])
SetRegister("DTH3.Start",[0,1,0,0,1])
time.sleep(0.1)
data,var=GetVal('RCU_DTH_on');
logging.warning(" DTH on (0x1)=%x %x %x" % (data[0],data[1],data[2]))
if not Check(data,0x1,0x1): logging.error("*** FAILED: Dither on! ***")
logging.warning("** PASSED Power and Control test **");
#print(data)
#scale=float(scale)
#data2=[(d*scale) for d in data2]
#print("ID=",[hex(d) for d in data[:4]]);
name='RECVTR_HB' #YAML config file with all register values etc
logPath='log'
import logging
import argparse
from opcuaserv import opcuaserv
from opcuaserv import i2client
from opcuaserv import yamlreader
#from opcuaserv import pypcc2
from i2cserv import i2cthread
import threading
import time
import sys
import signal
from yamlconfig import Find;
import yamlconfig as yc
from datetime import datetime
testtime=datetime.now().strftime("%y-%m-%d %H:%M")
RCUNR=(0 if len(sys.argv)<2 else int(sys.argv[1]));
print("RCU NR=",RCUNR," tested at ",testtime);
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;
conf=yc.yamlconfig(name)
conf.linkdevices()
conf.loaddrivers()
conf.linkdrivers()
Bands=[2,1,4]
Band=Bands[2]; #0=110, 1=170, 2=210
DAB=0; #1=DAB filter enables
Att=10;
def GetVal(name,N=1):
varid=conf.getvarid(name);
var1=conf.getvars()[varid]
drv=var1.get('drivercls');
mask=[False]*RCUNR*N+[True]*N+[False]*((32-RCUNR-1)*N);
data=drv.OPCUAReadVariable(varid,var1,mask)
data=data[0].data
N3=len(data)//32;
return data[N3*RCUNR:N3*(RCUNR+1)],var1
data,var1=GetVal('RCU_PCB_ID');
ID=("%.2x%.2x%.2x%.2x" % (data[0],data[1],data[2],data[3]))
rootLogger = logging.getLogger()
#fileHandler = logging.FileHandler("{0}/{1}.log".format(logPath, "RCU2L"+ID))
#fileHandler.setFormatter(logFormatter)
#rootLogger.addHandler(fileHandler)
logging.warning("ID=%s" % ID)
now=datetime.now();
logging.warning("Time="+now.strftime("%Y-%m-%d %H:%M"));
#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 True:
data,var1=GetVal('RCU_TEMP');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
logging.warning("RCU Temperature=%.3f K" % D)
if not Check([D],290,350): exit();
data,var1=GetVal('RCU_PWR_3V3');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
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");
var1=conf.getmethod(methodid)
drv=var1.get('drivercls');
v1=conf.getdevreg(regname)
drv2=v1.get('drivercls')
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 True:
# logging.warning("Switch RCU Power off");
# SetRegister("IO1.GPIO1",[0])
# SetRegister("IO1.GPIO2",[0x0]) #Analog power off
# SetRegister("IO2.GPIO1",[0x0]) #Digital power off
# SetRegister("IO2.GPIO2",[0x80])
SetRegister("IO1.CONF1",[0])
SetRegister("IO1.CONF2",[0])
SetRegister("IO2.CONF1",[0x80]) #Pgood on 0x80
SetRegister("IO2.CONF2",[0])
SetRegister("IO4.CONF1",[0xC0])#pin 0x40, 0x80 not used
SetRegister("IO4.CONF2",[0xF8])
time.sleep(1.0)
logging.warning("Switch RCU Power on");
SetRegister("IO1.GPIO1",[Att])#0x0a = 10dB att
SetRegister("IO1.GPIO2",[0x80+Att])#0x80 Analog on, 0x0a=10dB att
SetRegister("IO2.GPIO1",[0x40+Att])#0x40 Dig on, 0x0a =10dB att
SetRegister("IO2.GPIO2",[0x40+Band+(Band<<3)])#0x09 #Band0 (or 0x12 or 0x24) #LED green=on=low 0x40
SetRegister("IO4.GPIO1",[0x51 if DAB else 0x2A])#DAB switch states: 0x2A or 0x51
SetRegister("IO4.GPIO2",[Band])#Band select
time.sleep(0.5)
# logging.warning(" Check IO expander 1&2");
# print("IO expander status:");
# data,var=GetVal('RCU_IO1_GPIO1');
# if not Check(data,0,0):
# logging.warning(" IO1_GPIO1 =%x" % data[0])
# exit();
# data,var=GetVal('RCU_IO1_GPIO2');
# if not Check(data,0x80,0x80):
# logging.warning(" IO1_GPIO2 =%x" % data[0])
# exit();
# data,var=GetVal('RCU_IO2_GPIO1');
# if not Check(data,0xC0,0xC0):
# logging.warning(" IO2_GPIO1 =%x" % data[0])
# exit();
# data,var=GetVal('RCU_IO2_GPIO2');
# if not Check(data,0x40,0x40):
# logging.warning(" IO2_GPIO2 =%x" % data[0])
# exit();
# time.sleep(0.5)
#exit()
if True:
logging.warning("Check voltages")
data,var1=GetVal('RCU_PWR_1V8');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
logging.warning(" 1V8 =%.3f V" % D)
if not Check([D],1.7,1.9): exit();
data,var1=GetVal('RCU_PWR_2V5');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
logging.warning(" 2V5 =%.3f V" % D)
if not Check([D],2.4,2.6): exit();
if False:
data,var1=GetVal('RCU_PWR_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.)
logging.warning(" Vant_in=%.2f %.2f %.2f" % (D0,D1,D2))
if not Check([D0,D1,D2],5,10): exit();
logging.warning("Switch Antenna power on")
SetRegister("IO1.GPIO1",[0xC0]) #Antenna power on
SetRegister("IO1.GPIO2",[0xC0]) #Analog power on
data,var1=GetVal('RCU_PWR_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.)
logging.warning(" Vant_out=%.2f %.2f %.2f" % (D0,D1,D2))
if not Check([D0,D1,D2],5,10): exit();
data,var1=GetVal('RCU_PWR_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.)
logging.warning(" Iant_out=%.2f %.2f %.2f" % (D0,D1,D2))
# print("Iant=",D0,D1,D2)
#exit()
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');
if not Check(data,0x15,0x15): exit();
data,var=GetVal('RCU_IO3_GPIO2');
if not Check(data,0x47,0x47): exit();
#if True:
# SetRegister("IO3.GPIO1",[0xD5]) #ADC_SDIO=high, clk=low, DTH_EN=low
# SetRegister("IO3.GPIO2",[0xC7]) #ADC SC=high, DTH_SDA=high
# SetRegister("RCU_DTH_shutdown
if False:
#Test reading register from ADCs
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 & ADC lock")
#Test writing ADC register
SetRegister("ADC1.SYNC_control",[1])
SetRegister("ADC1.CML_level",[7]);
SetRegister("ADC1.Update",[1])
SetRegister("ADC2.SYNC_control",[1])
SetRegister("ADC2.CML_level",[7]);
SetRegister("ADC2.Update",[1])
SetRegister("ADC3.SYNC_control",[1])
SetRegister("ADC3.CML_level",[7]);
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();
data,var=GetVal('RCU_ADC_locked');
logging.warning(" ADC locked (0x1)=%x %x %x" % (data[0],data[1],data[2]))
if not Check(data,0x1,0x1): logging.error("*** FAILED ADC lock!")
# - RCU_ADC_locked: Update
#exit()
#Need to update I2c bitbang....
if False:
logging.warning("Test DITHER communication")
SetRegister("IO3.GPIO1",[0x15]) #ADC_SDIO=high, clk=low, DTH_SDN=low
SetRegister("IO3.GPIO2",[0x47]) #ADC SC=high, DTH_SDA=high
SetRegister("IO3.CONF1",[0]) #All output
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]))
f0=102.2e6;
f=int(f0)
logging.warning(" Set frequency %f"%f0);
# 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(f0)
data,var1=GetVal("RCU_DTH_freq")
# data,var1=GetVal("RCU_DTH_Rev")
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("Test DITHER on")
SetRegister("DTH1.CONF",[0])
SetRegister("DTH1.Tune",[0,0])
SetRegister("DTH1.Start",[0,1,0,0,1])
SetRegister("DTH2.CONF",[0])
SetRegister("DTH2.Tune",[0,0])
SetRegister("DTH2.Start",[0,1,0,0,1])
SetRegister("DTH3.CONF",[0])
SetRegister("DTH3.Tune",[0,0])
SetRegister("DTH3.Start",[0,1,0,0,1])
time.sleep(0.1)
data,var=GetVal('RCU_DTH_on');
logging.warning(" DTH on (0x1)=%x %x %x" % (data[0],data[1],data[2]))
if not Check(data,0x1,0x1): logging.error("*** FAILED: Dither on! ***")
logging.warning("** PASSED Power and Control test **");
#print(data)
#scale=float(scale)
#data2=[(d*scale) for d in data2]
#print("ID=",[hex(d) for d in data[:4]]);
name='RECVTR_HB' #YAML config file with all register values etc
logPath='log'
yamllogfile="prodtest/RCU2HQM"
savedb=False;
savedb=True;
from test_common import *
from datetime import datetime
from prodtest.yamllog import yamllog
loadconf(name);
Bands=[2,1,4]
Band=Bands[0]; #0=110, 1=170, 2=210
DAB=1; #1=DAB filter enables
Att=10;
skip_know_user_input=True;
#skip_know_user_input=False;
db=yamllog(yamllogfile)
data,var1=GetVal('RCU_PCB_ID');
ID=("%.2x%.2x%.2x%.2x" % (data[0],data[1],data[2],data[3]))
logging.warning("ID=%s" % ID)
testtime=datetime.now().strftime("%Y-%m-%d %H:%M");
logging.warning("Time="+testtime);
#If we so not know number, ask it
PCBnum=db.getdata("PCB_number","ID",ID)
if (PCBnum is None) or not(skip_know_user_input):
print("Enter PCB number:");
PCBnum=input();
PCBnum={"ID":ID,"number":PCBnum}
db.replace("PCB_number","ID",ID,PCBnum)
if savedb: db.save(yamllogfile);
else:
print("PCB nunber=",PCBnum['number']);
if True:
offpwr=db.getdata("off_power","ID",ID)
if (offpwr is None) or not(skip_know_user_input):
print("Enter 4V current (A):");
Ioff3=float(input());
print("Enter 6V current (A):");
Ioff6=float(input());
offpwr={"ID":ID,"I_4V":Ioff3,"I_6V":Ioff6}
offpwr['time']=testtime;
data,var1=GetVal('RCU_TEMP');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
offpwr['temp']=D;
logging.warning("RCU Temperature=%.3f K" % D)
if not Check([D],290,350): exit();
data,var1=GetVal('RCU_PWR_3V3');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
offpwr['V_3v3']=D;
logging.warning("3V3 =%.3f V" % D)
# print("3V3=",D,"V")
if not Check([D],3.2,3.4): exit();
db.replace("off_power","ID",ID,offpwr)
if savedb: db.save(yamllogfile);
# if (D<3.2) or (D>3.4): exit()
#print("data=",[hex(d) for d in data[:3]]);
#exit()
if True:
# logging.warning("Switch RCU Power off");
# SetRegister("IO1.GPIO1",[0])
# SetRegister("IO1.GPIO2",[0x0]) #Analog power off
# SetRegister("IO2.GPIO1",[0x0]) #Digital power off
# SetRegister("IO2.GPIO2",[0x80])
SetRegister("IO1.CONF1",[0])
SetRegister("IO1.CONF2",[0])
SetRegister("IO2.CONF1",[0x80]) #Pgood on 0x80
SetRegister("IO2.CONF2",[0])
SetRegister("IO4.CONF1",[0xC0])#pin 0x40, 0x80 not used
SetRegister("IO4.CONF2",[0xF8])
time.sleep(1.0)
logging.warning("Switch RCU Power on");
SetRegister("IO1.GPIO1",[Att])#0x0a = 10dB att
SetRegister("IO1.GPIO2",[0x80+Att])#0x80 Analog on, 0x0a=10dB att
SetRegister("IO2.GPIO1",[0x40+Att])#0x40 Dig on, 0x0a =10dB att
SetRegister("IO2.GPIO2",[0x40+Band+(Band<<3)])#0x09 #Band0 (or 0x12 or 0x24) #LED green=on=low 0x40
SetRegister("IO4.GPIO1",[0x51 if DAB else 0x2A])#DAB switch states: 0x2A or 0x51
SetRegister("IO4.GPIO2",[Band])#Band select
time.sleep(0.5)
# logging.warning(" Check IO expander 1&2");
# print("IO expander status:");
# data,var=GetVal('RCU_IO1_GPIO1');
# if not Check(data,0,0):
# logging.warning(" IO1_GPIO1 =%x" % data[0])
# exit();
# data,var=GetVal('RCU_IO1_GPIO2');
# if not Check(data,0x80,0x80):
# logging.warning(" IO1_GPIO2 =%x" % data[0])
# exit();
# data,var=GetVal('RCU_IO2_GPIO1');
# if not Check(data,0xC0,0xC0):
# logging.warning(" IO2_GPIO1 =%x" % data[0])
# exit();
# data,var=GetVal('RCU_IO2_GPIO2');
# if not Check(data,0x40,0x40):
# logging.warning(" IO2_GPIO2 =%x" % data[0])
# exit();
# time.sleep(0.5)
if True:
logging.warning("Check voltages")
onpwr=db.getdata("on_power","ID",ID)
if (onpwr is None) or not(skip_know_user_input):
print("Enter 4V current (A):");
Ioff3=float(input());
print("Enter 6V current (A):");
Ioff6=float(input());
onpwr={"ID":ID,"I_4V":Ioff3,"I_6V":Ioff6}
onpwr['time']=testtime;
data,var1=GetVal('RCU_PWR_1V8');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
onpwr['V_1v8']=D;
logging.warning(" 1V8 =%.3f V" % D)
if not Check([D],1.7,1.9): exit();
data,var1=GetVal('RCU_PWR_2V5');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
onpwr['V_2v5']=D;
logging.warning(" 2V5 =%.3f V" % D)
if not Check([D],2.4,2.6): exit();
db.replace("on_power","ID",ID,onpwr)
if savedb: db.save(yamllogfile);
if True:
antpwr=db.getdata("ant_power","ID",ID)
if (antpwr is None) or not(skip_know_user_input):
print("Enter ant current (A):");
Ioff=float(input());
antpwr={"ID":ID,"Ioff":Ioff}
antpwr['time']=testtime;
data,var1=GetVal('RCU_PWR_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.)
logging.warning(" Vant_in=%.2f %.2f %.2f" % (D0,D1,D2))
antpwr['Vin']=[D0,D1,D2]
if not Check([D0,D1,D2],5,10): exit();
logging.warning("Switch Antenna power on")
SetRegister("IO1.GPIO1",[0xC0]) #Antenna power on
SetRegister("IO1.GPIO2",[0xC0]) #Analog power on
data,var1=GetVal('RCU_PWR_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.)
logging.warning(" Vant_out=%.2f %.2f %.2f" % (D0,D1,D2))
antpwr['Vout']=[D0,D1,D2]
if not Check([D0,D1,D2],5,10): exit();
data,var1=GetVal('RCU_PWR_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.)
antpwr['Iout']=[D0,D1,D2]
logging.warning(" Iant_out=%.2f %.2f %.2f" % (D0,D1,D2))
if (antpwr.get("Ion") is None) or not(skip_know_user_input):
print("Enter ant current (A):");
Ion=float(input());
antpwr["Ion"]=Ion
db.replace("ant_power","ID",ID,antpwr)
if savedb: db.save(yamllogfile);
# print("Iant=",D0,D1,D2)
#exit()
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');
if not Check(data,0x15,0x15): exit();
data,var=GetVal('RCU_IO3_GPIO2');
if not Check(data,0x47,0x47): exit();
if True:
#Test reading register from ADCs
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 & ADC lock")
#Test writing ADC register
SetRegister("ADC1.SYNC_control",[1])
SetRegister("ADC1.CML_level",[7]);
SetRegister("ADC1.Update",[1])
SetRegister("ADC2.SYNC_control",[1])
SetRegister("ADC2.CML_level",[7]);
SetRegister("ADC2.Update",[1])
SetRegister("ADC3.SYNC_control",[1])
SetRegister("ADC3.CML_level",[7]);
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();
data,var=GetVal('RCU_ADC_locked');
logging.warning(" ADC locked (0x1)=%x %x %x" % (data[0],data[1],data[2]))
if not Check(data,0x1,0x1): logging.error("*** FAILED ADC lock!")
# - RCU_ADC_locked: Update
#exit()
#Need to update I2c bitbang....
if False:
logging.warning("Test DITHER communication")
SetRegister("IO3.GPIO1",[0x15]) #ADC_SDIO=high, clk=low, DTH_SDN=low
SetRegister("IO3.GPIO2",[0x47]) #ADC SC=high, DTH_SDA=high
SetRegister("IO3.CONF1",[0]) #All output
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]))
f0=102.2e6;
f=int(f0)
logging.warning(" Set frequency %f"%f0);
# 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(f0)
data,var1=GetVal("RCU_DTH_freq")
# data,var1=GetVal("RCU_DTH_Rev")
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("Test DITHER on")
SetRegister("DTH1.CONF",[0])
SetRegister("DTH1.Tune",[0,0])
SetRegister("DTH1.Start",[0,1,0,0,1])
SetRegister("DTH2.CONF",[0])
SetRegister("DTH2.Tune",[0,0])
SetRegister("DTH2.Start",[0,1,0,0,1])
SetRegister("DTH3.CONF",[0])
SetRegister("DTH3.Tune",[0,0])
SetRegister("DTH3.Start",[0,1,0,0,1])
time.sleep(0.1)
data,var=GetVal('RCU_DTH_on');
logging.warning(" DTH on (0x1)=%x %x %x" % (data[0],data[1],data[2]))
if not Check(data,0x1,0x1): logging.error("*** FAILED: Dither on! ***")
logging.warning("** PASSED Power and Control test **");
#print(data)
#scale=float(scale)
#data2=[(d*scale) for d in data2]
#print("ID=",[hex(d) for d in data[:4]]);
logPath='log'
import logging
import argparse
from opcuaserv import opcuaserv
from opcuaserv import i2client
from opcuaserv import yamlreader
#from opcuaserv import pypcc2
#from i2cserv import i2cthread
#import threading
import time
import sys
import signal
from yamlconfig import Find;
import yamlconfig as yc
#from datetime import datetime
#from prodtest.yamllog import yamllog
RCUNR=(0 if len(sys.argv)<2 else int(sys.argv[1]));
print("RCU NR=",RCUNR);
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')
global conf
conf=None
RunTimer=True;
def loadconf(name):
global conf
conf=yc.yamlconfig(name)
conf.linkdevices()
conf.loaddrivers()
conf.linkdrivers()
#db=yamllog(yamllogfile)
rootLogger = logging.getLogger()
def GetVal(name,N=1):
varid=conf.getvarid(name);
var1=conf.getvars()[varid]
drv=var1.get('drivercls');
mask=[False]*RCUNR*N+[True]*N+[False]*((32-RCUNR-1)*N);
data=drv.OPCUAReadVariable(varid,var1,mask)
data=data[0].data
N3=len(data)//32;
return data[N3*RCUNR:N3*(RCUNR+1)],var1
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
def SetRegister(regname,value):
methodid=conf.getmethodid("RCU_on");
var1=conf.getmethod(methodid)
drv=var1.get('drivercls');
v1=conf.getdevreg(regname)
drv2=v1.get('drivercls')
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)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment