Skip to content
Snippets Groups Projects
Commit 24ed11e4 authored by Paulus Kruger's avatar Paulus Kruger
Browse files

None and NaN added

parent 007db685
No related branches found
No related tags found
No related merge requests found
...@@ -100,11 +100,12 @@ class i2c_array(i2c_dev): ...@@ -100,11 +100,12 @@ class i2c_array(i2c_dev):
for RCUi in range(self.N): for RCUi in range(self.N):
for Vari in range(Step): for Vari in range(Step):
if not(mask[RCUi*Step+Vari]): continue if not(mask[RCUi*Step+Vari]): continue
if not(self.I2Cmask[RCUi]<=self.I2Ccut):
mask[RCUi*Step+Vari]=False;
continue;
i0=(RCUi*Step+ Vari)*Step2 i0=(RCUi*Step+ Vari)*Step2
i1=(RCUi*Step+(Vari+1))*Step2 i1=(RCUi*Step+(Vari+1))*Step2
if not(self.I2Cmask[RCUi]<=self.I2Ccut):
# mask[RCUi*Step+Vari]=False; #Use this if we do not what to update opc-ua var with NaN
value1[i0]=None
continue;
devreg=var1['devreg'][Vari]; devreg=var1['devreg'][Vari];
width=var1.get('width',8) width=var1.get('width',8)
bitoffset=GetField(var1,'bitoffset',Vari,0) bitoffset=GetField(var1,'bitoffset',Vari,0)
...@@ -115,6 +116,7 @@ class i2c_array(i2c_dev): ...@@ -115,6 +116,7 @@ class i2c_array(i2c_dev):
if not(res): if not(res):
if self.disableI2ConError: self.I2Cmask[RCUi]+=1; if self.disableI2ConError: self.I2Cmask[RCUi]+=1;
if self.I2Cmask[RCUi]>self.I2Ccut: mask[RCUi*Step+Vari]=False; if self.I2Cmask[RCUi]>self.I2Ccut: mask[RCUi*Step+Vari]=False;
value1[i0]=None
continue; continue;
self.I2Cmask[RCUi]=0; self.I2Cmask[RCUi]=0;
value1[i0:i1]=value2 value1[i0:i1]=value2
...@@ -138,7 +140,7 @@ class i2c_array(i2c_dev): ...@@ -138,7 +140,7 @@ class i2c_array(i2c_dev):
if devreg.get('store'): if devreg.get('store'):
storearray=self.getstorearray(devreg); storearray=self.getstorearray(devreg);
for RCUi in range(self.N): for RCUi in range(self.N):
if (mask[RCUi]) and (self.I2Cmask[RCUi]<=self.I2Ccut): if (mask[RCUi]) and (self.I2Cmask[RCUi]<=self.I2Ccut) and not(value[0] is None):
storearray[RCUi]=value[0] storearray[RCUi]=value[0]
self.RCUi=RCUi; self.RCUi=RCUi;
logging.debug(str(("Stored values:",self.getstorearray(devreg)))) logging.debug(str(("Stored values:",self.getstorearray(devreg))))
...@@ -163,7 +165,7 @@ class i2c_array(i2c_dev): ...@@ -163,7 +165,7 @@ class i2c_array(i2c_dev):
self.I2Cmask[RCUi]=0; self.I2Cmask[RCUi]=0;
value1[RCUi]=value2[0] value1[RCUi]=value2[0]
if devreg.get('store'): if devreg.get('store'):
if mask[RCUi]: if mask[RCUi] and not(value2[0] is None):
storearray[RCUi]=value2[0] storearray[RCUi]=value2[0]
logging.debug(str(("Stored values:",self.getstorearray(devreg)))) logging.debug(str(("Stored values:",self.getstorearray(devreg))))
return True; return True;
...@@ -194,6 +196,7 @@ class i2c_array(i2c_dev): ...@@ -194,6 +196,7 @@ class i2c_array(i2c_dev):
# print(width,bitoffset,l1) # print(width,bitoffset,l1)
value2=value value2=value
reg=devreg['register_R'] reg=devreg['register_R']
value2[0]=None; #default
if reg>255: #This is for the monitor ADC (+ DTH) if reg>255: #This is for the monitor ADC (+ DTH)
callback(0,[250],read=3) callback(0,[250],read=3)
if not(callback(devreg['addr'],int2bytes(reg),read=2)): return False; if not(callback(devreg['addr'],int2bytes(reg),read=2)): return False;
......
...@@ -126,12 +126,13 @@ class i2c_dev(hwdev): ...@@ -126,12 +126,13 @@ class i2c_dev(hwdev):
def OPCUAReadVariable(self,varid,var1,mask): def OPCUAReadVariable(self,varid,var1,mask):
if len(mask)==0: mask=[True]; if len(mask)==0: mask=[True];
logging.info(str(("Read Var",var1['name'],mask))) logging.info(str(("Read Var",var1['name'],"Mask=",mask)))
if not(var1.get('devreg')): return [] if not(var1.get('devreg')): return []
#data=self.GetVarValueAll(var1) #data=self.GetVarValueAll(var1)
#else: #else:
oldmask=self.I2Cmask.copy() oldmask=self.I2Cmask.copy()
data,mask2=self.GetVarValueMask(var1,mask); data,mask2=self.GetVarValueMask(var1,mask);
logging.info(str(("Read Var",var1['name'],"Data=",data)))
# if len(mask)==len(mask2): mask[:]=mask2[:]; # if len(mask)==len(mask2): mask[:]=mask2[:];
# elif len(mask)==0: (mask.append(x) for x in mask2); # elif len(mask)==0: (mask.append(x) for x in mask2);
Data=OPCUAset(varid,InstType.varSet,data.copy(),mask2.copy()) Data=OPCUAset(varid,InstType.varSet,data.copy(),mask2.copy())
......
...@@ -48,7 +48,7 @@ class i2cbitbang1(hwdev): ...@@ -48,7 +48,7 @@ class i2cbitbang1(hwdev):
# ADC_address=dev.Register_W<<1; #Write # ADC_address=dev.Register_W<<1; #Write
ADC_address=address<<1;#dev.Register_W<<1; #Write ADC_address=address<<1;#dev.Register_W<<1; #Write
logging.info(str(("I2Cbb set",hex(ADC_address),value))) logging.debug(str(("I2Cbb set",hex(ADC_address),value)))
SetI2C(DIRdev,1,DIRpin,[1]) #Input = high SetI2C(DIRdev,1,DIRpin,[1]) #Input = high
SetI2C(CLKdev,1,CLKpin,[1]) #Should be high for start SetI2C(CLKdev,1,CLKpin,[1]) #Should be high for start
...@@ -94,7 +94,7 @@ class i2cbitbang1(hwdev): ...@@ -94,7 +94,7 @@ class i2cbitbang1(hwdev):
ADC_address=1+(reg_address<<1); #Read ADC_address=1+(reg_address<<1); #Read
logging.info(str(("I2Cbb get",hex(ADC_address),value))) logging.debug(str(("I2Cbb get",hex(ADC_address),value)))
SetI2C(DIRdev,1,DIRpin,[1]) #Input = high SetI2C(DIRdev,1,DIRpin,[1]) #Input = high
SetI2C(CLKdev,1,CLKpin,[1]) #Should be high for start bit SetI2C(CLKdev,1,CLKpin,[1]) #Should be high for start bit
...@@ -124,7 +124,8 @@ class i2cbitbang1(hwdev): ...@@ -124,7 +124,8 @@ class i2cbitbang1(hwdev):
SetI2C(CLKdev,1,CLKpin,[1]) SetI2C(CLKdev,1,CLKpin,[1])
GetI2C(SDAdev,1,SDApin,ack) GetI2C(SDAdev,1,SDApin,ack)
# print(ack[0]) # print(ack[0])
b=(b<<1)+ack[0]; if ack[0] is None: b=None
elif not b is None: b=(b<<1)+ack[0];
SetI2C(CLKdev,1,CLKpin,[0]) SetI2C(CLKdev,1,CLKpin,[0])
# print("RXbyte",hex(b)); # print("RXbyte",hex(b));
SetI2C(SDAdev,1,SDApin,[0]) SetI2C(SDAdev,1,SDApin,[0])
...@@ -139,7 +140,7 @@ class i2cbitbang1(hwdev): ...@@ -139,7 +140,7 @@ class i2cbitbang1(hwdev):
# if not(RXbyte()==0x80): return False; # if not(RXbyte()==0x80): return False;
for i in range(len(value)): for i in range(len(value)):
value[i]=RXbyte(last=(i==len(value)-1)) value[i]=RXbyte(last=(i==len(value)-1))
logging.debug(str(("si status:",hex(status),[hex(v) for v in value])))#should be 0x80 logging.debug(str(("si status:",hex(status),[hex(v) for v in value])))#should be 0x80 - will fail for None!!
#stop #stop
#SetI2C(DIRdev,1,DIRpin,[0]) #low #SetI2C(DIRdev,1,DIRpin,[0]) #low
SetI2C(CLKdev,1,CLKpin,[1]) SetI2C(CLKdev,1,CLKpin,[1])
......
...@@ -93,7 +93,9 @@ class spibitbang1(hwdev): ...@@ -93,7 +93,9 @@ class spibitbang1(hwdev):
for cnt in range(8*(ADC_bytes+1)): for cnt in range(8*(ADC_bytes+1)):
GetI2C(SDOdev,1,SDOpin,ret_value) #enable GetI2C(SDOdev,1,SDOpin,ret_value) #enable
# logging.debug("Got bit"+str((ret_value))) # logging.debug("Got bit"+str((ret_value)))
for i in range(N): value[i]=(value[i]<<1)+ ret_value[i] for i in range(N):
if ret_value is None: value[i]=None
elif not value[i] is None: value[i]=(value[i]<<1)+ ret_value[i]
SetI2C(CLKdev,1,CLKpin,[1]) SetI2C(CLKdev,1,CLKpin,[1])
SetI2C(CLKdev,1,CLKpin,[0]) #read after falling edge SetI2C(CLKdev,1,CLKpin,[0]) #read after falling edge
SetI2C(CSdev,1,CSpin,[1]) #disable SetI2C(CSdev,1,CSpin,[1]) #disable
......
...@@ -87,7 +87,10 @@ class spibitbang2(hwdev): ...@@ -87,7 +87,10 @@ class spibitbang2(hwdev):
SetI2C(CLKdev,1,CLKpin,[0]) SetI2C(CLKdev,1,CLKpin,[0])
SetI2C(CLKdev,1,CLKpin,[1]) #read after rising SetI2C(CLKdev,1,CLKpin,[1]) #read after rising
GetI2C(SDOdev,1,SDOpin,ret_value) GetI2C(SDOdev,1,SDOpin,ret_value)
for i in range(N): value[i]=(value[i]<<1)+ ret_value[i] # for i in range(N): value[i]=(value[i]<<1)+ ret_value[i]
for i in range(N):
if ret_value is None: value[i]=None
elif not value[i] is None: value[i]=(value[i]<<1)+ ret_value[i]
SetI2C(CLKdev,1,CLKpin,[0]) SetI2C(CLKdev,1,CLKpin,[0])
SetI2C(CSdev,1,CSpin,[1]) #disable SetI2C(CSdev,1,CSpin,[1]) #disable
return True; return True;
......
...@@ -168,10 +168,19 @@ class yamlreader(yamlconfig): ...@@ -168,10 +168,19 @@ class yamlreader(yamlconfig):
width=(v.get('width',8)-1)//8+1 width=(v.get('width',8)-1)//8+1
endian=v.get('endian','>'); endian=v.get('endian','>');
logging.debug(str(("OPCset",width,data))) logging.debug(str(("OPCset",width,data)))
notvalid=[(d is None) for d in data[::width]]
cnt=int(len(data)//width)
assert(cnt==len(notvalid))
# print(notvalid)
for x in range(len(data)):
if data[x] is None: data[x]=0;
if dtype=="boolean": if dtype=="boolean":
data2=[d==1 for d in data]; data2=[d==1 for d in data];
convert=v.get("convert_unit") convert=v.get("convert_unit")
if convert: data2=[eval("convert_unit."+convert)(d) for d in data2] if convert:
data2=[eval("convert_unit."+convert)(d) for d in data2]
for x in range(cnt):
if notvalid[x]: data2[x]=False;
elif (dtype in ['uint8','uint16','uint32','uint64','double']): elif (dtype in ['uint8','uint16','uint32','uint64','double']):
data=bytearray(data) data=bytearray(data)
if width<=1: if width<=1:
...@@ -188,9 +197,10 @@ class yamlreader(yamlconfig): ...@@ -188,9 +197,10 @@ class yamlreader(yamlconfig):
logging.warn("OPCset"+v['name']+" unsupported width!"+str(width)) logging.warn("OPCset"+v['name']+" unsupported width!"+str(width))
return; return;
elif dtype=="string": elif dtype=="string":
cnt=int(len(data)/width)
# data2=[(bytearray(data[i*width:(i+1)*width]).decode("utf-8")) for i in range(cnt)] # data2=[(bytearray(data[i*width:(i+1)*width]).decode("utf-8")) for i in range(cnt)]
data2=[bytearray(data)[i*width:(i+1)*width].decode("utf-8",errors='ignore') for i in range(cnt)] data2=[bytearray(data)[i*width:(i+1)*width].decode("utf-8",errors='ignore') for i in range(cnt)]
for x in range(cnt):
if notvalid[x]: data2[x]="";
else: else:
logging.warn("OPCset unsupported type"); logging.warn("OPCset unsupported type");
return; return;
...@@ -203,7 +213,8 @@ class yamlreader(yamlconfig): ...@@ -203,7 +213,8 @@ class yamlreader(yamlconfig):
data2=[(d*scale) for d in data2] data2=[(d*scale) for d in data2]
convert=v.get("convert_unit") convert=v.get("convert_unit")
if convert: data2=[eval("convert_unit."+convert)(d) for d in data2] if convert: data2=[eval("convert_unit."+convert)(d) for d in data2]
for x in range(cnt):
if notvalid[x]: data2[x]=float('nan')
var1=v.get('OPCR') var1=v.get('OPCR')
if not(var1): var1=v.get('OPCW') if not(var1): var1=v.get('OPCW')
if not(var1): if not(var1):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment