From 569cf223aaf8079caa0465e70d24718f1c7b0736 Mon Sep 17 00:00:00 2001 From: kruger <kruger@astron.nl> Date: Tue, 8 Jun 2021 14:09:56 +0100 Subject: [PATCH] HBAT working --- i2cserv/i2c_array.py | 8 ++++++-- i2cserv/i2c_switch.py | 7 +++++-- i2cserv/i2cthread.py | 9 +++++---- opcuaserv/yamlreader.py | 14 ++++++++------ scripts/SetHBAT_BFs.py | 37 +++++++++++++++++++++++++++++++++++++ 5 files changed, 61 insertions(+), 14 deletions(-) create mode 100644 scripts/SetHBAT_BFs.py diff --git a/i2cserv/i2c_array.py b/i2cserv/i2c_array.py index ce2c610..b2b31de 100644 --- a/i2cserv/i2c_array.py +++ b/i2cserv/i2c_array.py @@ -96,7 +96,7 @@ class i2c_array(i2c_dev): if (len(mask)==self.N): mask=[m for m in mask for x in range(Step)] if not(len(mask)==Step*self.N): - print("Check mask length!"); + print("Check mask length!",len(mask),Step,self.N); return; # if (len(value1)==V1.nVars) and (self.N>1): value1=(value1*self.N); i2c=self.conf['parentcls']; @@ -133,6 +133,9 @@ class i2c_array(i2c_dev): def Setdevreg(self,devreg,value,mask=[]): # if devreg.get('store'): logging.debug("Stored") # print(devreg['store']) + if len(mask)==0: + mask=[True]*self.N; + self.RCUi=0; self.SetSwitchMask(mask) if not(self.SetVarValue(devreg,8,0,value)): return False; if devreg.get('store'): @@ -174,8 +177,9 @@ class i2c_array(i2c_dev): if devreg['store']: storearray=self.getstorearray(devreg); previous=storearray[self.RCUi]; +# print(value,previous) for x in range(len(value)): - value[x]=ApplyMask(value[x],width,bitoffset,previous); + value[x]=ApplyMask(value[x],width,bitoffset,(previous[x] if isinstance(previous,list) else previous)); storearray[self.RCUi]=(value[0] if len(value)==1 else value[:]) logging.debug("Stored value:"+str(storearray[self.RCUi])) # devreg['drivercls'].i2csetget diff --git a/i2cserv/i2c_switch.py b/i2cserv/i2c_switch.py index 6863b5a..59c2641 100644 --- a/i2cserv/i2c_switch.py +++ b/i2cserv/i2c_switch.py @@ -8,21 +8,24 @@ class i2c_switch(i2c): i2c.__init__(self,config) self.SWaddr=config['devreg'][0]['addr'] self.CurrentChannel=0 + self.NoSwitch=True; logging.info("i2c switch at address "+str(self.SWaddr)) + if self.NoSwitch: + logging.warn("i2c switch disabled!") def SetSW1(self,channelbit): channel=(0 if (channelbit>5) else 1<<(channelbit)) #LTS if (channel)==self.CurrentChannel: return True; logging.debug("SetChannelbit=%i" % channelbit) self.CurrentChannel=channel - return self.i2csetget(self.SWaddr,[channel]) + return (True if self.NoSwitch else self.i2csetget(self.SWaddr,[channel])) def SetChannel(self,channel): channel&=0x3F;#LTS if (channel)==self.CurrentChannel: return True; logging.debug("SetChannel=%i" % channel) self.CurrentChannel=channel - return self.i2csetget(self.SWaddr,[channel]) + return (True if self.NoSwitch else self.i2csetget(self.SWaddr,[channel])) # def I2Ccallback(self,RCU,addr,data,reg=None,read=0): # self.callback1(addr,data,reg,read) diff --git a/i2cserv/i2cthread.py b/i2cserv/i2cthread.py index d4066a0..62f1c1b 100644 --- a/i2cserv/i2cthread.py +++ b/i2cserv/i2cthread.py @@ -83,10 +83,11 @@ def setvar(conf,Qout,varid,data,mask): if not(drv): logging.warn(var1['name']+" driver not found!") return; - for data in drv.OPCUASetVariable(varid,var1,data,mask): - if len(mask)==len(data.mask): mask[:]=data.mask[:]; - elif len(mask)==0: mask=data.mask.copy(); - Qout.put(data) + for data2 in drv.OPCUASetVariable(varid,var1,data,mask): + if len(mask)==len(data2.mask): mask[:]=data2.mask[:]; + elif len(mask)==0: mask=data2.mask.copy(); +# print(data2.data[:64]); + Qout.put(data2) return mask; def getvar(conf,Qout,varid,mask): diff --git a/opcuaserv/yamlreader.py b/opcuaserv/yamlreader.py index 6e0de63..fa5a456 100644 --- a/opcuaserv/yamlreader.py +++ b/opcuaserv/yamlreader.py @@ -98,11 +98,12 @@ class yamlreader(yamlconfig): if not(v): logging.warn(self.yamlfile+"_Init method not found for initialisation!") return; - self.server.callmethod(v['id'],[]) + self.callMethod(v['id']) def setvar(self,id1,data=[]): v=self.conf['variables'][id1]; if v['rw']=='variable': return; + endian=v.get('endian','>'); mask=v.get('maskOPC',None); mask=mask.get_value() if (mask!=None) else []; # print("M2:",mask) @@ -118,14 +119,14 @@ class yamlreader(yamlconfig): if width<=1: data2=bytearray(data) elif width==2: - data2 = struct.pack('>%sH' % len(data), *data) + data2 = struct.pack(endian+'%sH' % len(data), *data) elif width==3: data2=bytearray() for a in data: data2.extend(struct.pack('>L',a)[1:]) elif width==4: - data2 = struct.pack('>%sL' % len(data), *data) + data2 = struct.pack(endian+'%sL' % len(data), *data) elif width==8: - data2 = struct.pack('>%sQ' % len(data), *data) + data2 = struct.pack(endian+'%sQ' % len(data), *data) else: logging.warn("setvar"+v['name']+" unsupported width!"+str(width)) return; @@ -201,7 +202,7 @@ class yamlreader(yamlconfig): return; data3=var1.get_value(); if not(isinstance(data3,list)): data3=[data3]; -# print("OPCset",v['name'],data3,mask) +# print("OPCset",v['name'],data2[:64],mask) if mask: #Only update masked values step=len(data2)//len(mask) #print("mask step=",step) @@ -209,8 +210,9 @@ class yamlreader(yamlconfig): if mask[i//step]: data3[i]=data2[i] else: data3=data2; +# print("OPCset",v['name'],data3[:64],mask) + logging.info(str(("OPCset",v['name'],data3[:64]))) if len(data3)==1: data3=data3[0]; - logging.info(str(("OPCset",v['name'],data3))) var1.set_value(data3); def Monitor(self): diff --git a/scripts/SetHBAT_BFs.py b/scripts/SetHBAT_BFs.py new file mode 100644 index 0000000..7f64d0f --- /dev/null +++ b/scripts/SetHBAT_BFs.py @@ -0,0 +1,37 @@ +RCU=0 +#HBAT=1 #HBAT on RCU 0..2 +#HBA=5; #HBA Element in HBAT +#BFX=11 #delay in 0.5ns +#BFY=BFX+1 +name="HBA_element_beamformer_delays" +AntMask=[True,True,True] +NewVal=[2]*64 + +from test_common import * +import numpy as np + +setAntmask([RCU],AntMask) + +i=(RCU*3)*32 + +val=get_value(name+"_R") +print("old:",val[i:i+64]) + +val[i:i+64]=NewVal + +set_value(name+"_RW",val) +print("set:",val[i:i+64]) +time.sleep(2) +val=get_value(name+"_R") +print("new:",val[i:i+64]) + +#time.sleep(5) +#val[i:i+64]=[0]*64 + +#set_value(name+"_RW",val) +#print("set:",val[i:i+64]) +#time.sleep(1) +#val=get_value(name+"_R") +#print("new:",val[i:i+64]) + +disconnect() -- GitLab