diff --git a/config/APSCTTR.yaml b/config/APSCTTR.yaml index ac79008c7565016b5c9b98bfca5f0a4830d7152e..0ce975bc55a3117df21f74afc4ec1c8ed9283e1a 100644 --- a/config/APSCTTR.yaml +++ b/config/APSCTTR.yaml @@ -8,7 +8,7 @@ drivers: - name: I2C_CLK type: i2c_dev #I2C devices parent: I2C - status: APSCT_I2C_error + status: APSCTTR_I2C_error - name: SPIbb1 type: spibitbang2 #SPI bitbang via GPIO expander: CLK, SDI,SDO,CS parent: I2C_CLK @@ -110,7 +110,7 @@ device_registers: variables: - - name: APSCT_I2C_error + - name: APSCTTR_I2C_error description: When >0 indicates an I2C error driver: I2C_CLK rw: ro #server RW variable, not linked to IO @@ -122,7 +122,7 @@ variables: dtype: boolean dim: 1 - - name: APSCT_ID + - name: APSCT_PCB_ID description: Unique PCB ID driver: I2C_CLK devreg: ROM.ID @@ -130,7 +130,7 @@ variables: rw: ro dtype: uint32 - - name: APSCT_version + - name: APSCT_PCB_version description: Version number driver: I2C_CLK devreg: ROM.Version @@ -237,7 +237,7 @@ variables: dtype: uint8 debug: True - - name: APSCT_temperature + - name: APSCT_TEMP description: Temperature sensor on RCU driver: I2C_CLK devreg: VSENSE.Temp @@ -263,7 +263,7 @@ methods: driver: I2C_CLK debug: True instructions: - - APSCT_I2C_error : 0 + - APSCTTR_I2C_error : 0 - APSCT_IO1_GPIO1 : Update - APSCT_IO1_GPIO2 : Update - APSCT_IO2_GPIO1 : Update @@ -278,8 +278,8 @@ methods: driver: I2C_CLK debug: True instructions: - - APSCT_ID : Update - - APSCT_version : Update + - APSCT_PCB_ID : Update + - APSCT_PCB_version : Update - APSCT_PWR_on: Update - APSCT_PWR_PLL_200MHz_on: Update - APSCT_PLL_200MHz_locked: Update @@ -293,7 +293,7 @@ methods: driver: I2C_CLK description: Configure clock. Monitored using APSCT_PWR_on, APSCT_PLL_error and APSCT_PLL_locked instructions: - - APSCT_I2C_error : 0 + - APSCTTR_I2C_error : 0 - IO1.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI - IO1.CONF2: 0x00 - IO2.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI @@ -312,7 +312,7 @@ methods: driver: I2C_CLK description: Configure clock. Monitored using APSCT_PWR_on, APSCT_PLL_error and APSCT_PLL_locked instructions: - - APSCT_I2C_error : 0 + - APSCTTR_I2C_error : 0 - IO1.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI - IO1.CONF2: 0x00 - IO2.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI @@ -331,7 +331,7 @@ methods: driver: I2C_CLK description: Switch clock off. Monitored using APSCT_PWR_on instructions: - - APSCT_I2C_error : 0 + - APSCTTR_I2C_error : 0 - IO1.GPIO1: 0x00 - IO1.GPIO2: 0x00 - IO2.GPIO1: 0x00 diff --git a/config/APSPUTR.yaml b/config/APSPUTR.yaml index ed17c84ee6d433fd5b808ade0524a261df2b86a0..24c33e05070d130d3863824f5f698629d95503ef 100644 --- a/config/APSPUTR.yaml +++ b/config/APSPUTR.yaml @@ -8,7 +8,7 @@ drivers: - name: I2C_PU type: i2c_dev #I2C devices parent: I2C - status: APSPU_I2C_error + status: APSPUTR_I2C_error #This is the I2C devices in the RCU device_registers: @@ -40,7 +40,7 @@ device_registers: variables: - - name: APSPU_I2C_error + - name: APSPUTR_I2C_error driver: I2C_PU rw: ro #server RW variable, not linked to IO dtype: uint8 @@ -50,7 +50,7 @@ variables: rw: ro #server variable, not linked to IO dtype: boolean - - name: APSPU_ID + - name: APSPU_PCB_ID description: Unique PCB ID driver: I2C_PU devreg: ROM.ID @@ -58,7 +58,7 @@ variables: rw: ro dtype: uint32 - - name: APSPU_version + - name: APSPU_PCB_version description: Version number driver: I2C_PU devreg: ROM.Version @@ -95,14 +95,16 @@ variables: scale: smbus_2bytes_to_float monitor: true - - name: [APSPU_FAN1_RMS,APSPU_FAN2_RMS,APSPU_FAN3_RMS] + - name: [APSPU_FAN1_RPM,APSPU_FAN2_RPM,APSPU_FAN3_RPM] driver: I2C_PU devreg: [MAX.TACH1,MAX.TACH2,MAX.TACH3] - bitoffset: 5 - width: 11 +# bitoffset: 5 + width: 16 rw: ro dtype: double - scale: 1.52588e-5 #FAN_TACHS/TACH_COUNT_FREQ/TACH_PERIODS = 1/8192/16 *2 +# scale: 1.52588e-5 #FAN_TACHS/TACH_COUNT_FREQ/TACH_PERIODS = 1/8192/16 *2 (bitoffset=5) - not working correctly + scale: 4.7684e-7 #FAN_TACHS/TACH_COUNT_FREQ/TACH_PERIODS = 1/8192/16 /16 (bitoffset=0) + convert_unit: period2RPM monitor: true methods: @@ -110,10 +112,10 @@ methods: driver: I2C_PU debug: True instructions: - - APSPU_ID : Update - - APSPU_version : Update + - APSPU_PCB_ID : Update + - APSPU_PCB_version : Update - - name: APSPU_FanOn + - name: APSPU_FAN_monitor_on driver: I2C_PU instructions: - MAX.GLOBAL : 0x02; #Run monitor diff --git a/config/RECVTR.yaml b/config/RECVTR.yaml index d052398a152d5d774150655ccc54495e1cc34197..19abb896d650f73a4acda75bc034b9a1a0306b66 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,5] #start,number of RCUs, error count to disable I2C (14 for LTS?) - status: RCU_I2C_error + status: RECVTR_I2C_error - name: I2C_HBAT type: hba1 #Special driver to manage HBAT1s. parent: I2C_RCU @@ -221,7 +221,7 @@ variables: dtype: boolean dim: 32 - - name: RCU_I2C_error + - name: RECVTR_I2C_error description: 0=Good, >0 communication error driver: I2C_RCU rw: ro #server RW variable, not linked to IO @@ -276,7 +276,7 @@ variables: mask: RCU_mask debug: True - - name: RCU_LED_red_off + - name: RCU_LED_red_on driver: I2C_RCU description: LED 1 devreg: IO2.GPIO2 @@ -284,10 +284,11 @@ variables: width: 1 rw: rw dtype: boolean + convert_unit: bool_invert dim: 32 mask: RCU_mask - - name: RCU_LED_green_off + - name: RCU_LED_green_on driver: I2C_RCU description: LED 2 devreg: IO2.GPIO2 @@ -295,21 +296,22 @@ variables: width: 1 rw: rw dtype: boolean + convert_unit: bool_invert dim: 32 mask: RCU_mask - - name: RCU_temperature + - name: RCU_TEMP description: RCU Temperature (Celsius) driver: I2C_RCU devreg: AN.Temp width: 23 - scale: 4.21e-3 + scale: 3.827e-3 #T=DATAOUT * Vref/12.25/32. Vreg=1.5 V convert_unit: Kelvin2Celsius rw: ro dtype: double dim: 32 monitor: true - mask: RCU_I2C_error + mask: RECVTR_I2C_error - name: RCU_PWR_3V3 description: RCU 3.3V voltage (V) @@ -321,7 +323,7 @@ variables: dtype: double dim: 32 monitor: true - mask: RCU_I2C_error + mask: RECVTR_I2C_error - name: RCU_PWR_1V8 description: RCU 1.8V voltage (V) @@ -333,7 +335,7 @@ variables: dtype: double dim: 32 monitor: true - mask: RCU_I2C_error + mask: RECVTR_I2C_error - name: RCU_PWR_2V5 description: RCU 2.5V voltage (V) @@ -345,7 +347,7 @@ variables: dtype: double dim: 32 monitor: true - mask: RCU_I2C_error + mask: RECVTR_I2C_error - name: RCU_PWR_ANT_VOUT description: RCU antenna voltage (V) @@ -358,7 +360,7 @@ variables: dim: 96 dim2: [3,32] monitor: true - mask: RCU_I2C_error + mask: RECVTR_I2C_error - name: RCU_PWR_ANT_VIN description: Voltage on antenna output of RCU (V). Controlled by ANT_PWR_ON. @@ -371,7 +373,7 @@ variables: dim: 96 dim2: [3,32] monitor: true - mask: RCU_I2C_error + mask: RECVTR_I2C_error - name: RCU_PWR_ANT_IOUT description: Current drawn on antenna output of RCU (A) @@ -384,7 +386,7 @@ variables: dim: 96 dim2: [3,32] monitor: true - mask: RCU_I2C_error + mask: RECVTR_I2C_error - name: RCU_PWR_DIGITAL_on description: RCU digital power enable. Controlled by calling RCU_on/RCU_off @@ -407,7 +409,7 @@ variables: dtype: boolean dim: 32 monitor: true - mask: RCU_I2C_error + mask: RECVTR_I2C_error - name: RCU_PWR_ANALOG_on description: RCU analog power enable. Controlled by RCU_on/off @@ -470,7 +472,7 @@ variables: mask: ANT_mask wait: 100 #ms - - name: RCU_ID + - name: RCU_PCB_ID description: Unique PCB ID driver: I2C_RCU devreg: ROM.ID @@ -480,7 +482,7 @@ variables: dim: 32 mask: RCU_mask - - name: RCU_version + - name: RCU_PCB_version description: RCU version number driver: I2C_RCU devreg: ROM.Version @@ -611,7 +613,7 @@ methods: driver: I2C_RCU mask: RCU_mask instructions: - - RCU_I2C_error: 0 + - RECVTR_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) #LED green=on=low @@ -642,10 +644,10 @@ methods: - RCU_PWR_DIGITAL_on: Update #Read value and update the OPC-UA variable - RCU_PWR_ANALOG_on: Update - RCU_PWR_ANT_on: Update - - RCU_ID: Update - - RCU_version: Update - - RCU_LED_red_off: Update - - RCU_LED_green_off: Update + - RCU_PCB_ID: Update + - RCU_PCB_version: Update + - RCU_LED_red_on: Update + - RCU_LED_green_on: Update - RCU_attenuator_dB: Update - RCU_band_select: Update - RCU_ADC_locked: Update @@ -689,7 +691,7 @@ methods: driver: I2C_RCU mask: RCU_mask instructions: - - RCU_I2C_error: 0 + - RECVTR_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/config/UNB2TR.yaml b/config/UNB2TR.yaml index 84d2d6af76f0378e71e4f1a6f555f813454003a5..2e5416bd3ebfd84a580465b6957a948dcad05050 100644 --- a/config/UNB2TR.yaml +++ b/config/UNB2TR.yaml @@ -11,37 +11,37 @@ drivers: type: i2c_array parent: I2C1 parameters: [0,1,10] - status: UNB2_I2C_bus_error + status: UNB2TR_I2C_bus_error - name: switch_PS type: i2c_array2 parent: I2C1 parameters: [0,1, 4,4] - status: UNB2_I2C_bus_PS_error + status: UNB2TR_I2C_bus_PS_error - name: switch_FP type: i2c_array2 parent: I2C1 parameters: [0,1, 5,5] - status: UNB2_I2C_bus_FP_error + status: UNB2TR_I2C_bus_FP_error - name: switch_QSFP type: i2c_array2 #An array of similar devices connected to an I2C switch parent: I2C1 parameters: [0,1, 0,3, 0,3, 6,7] #Parameters: APSCT_Switch, main switch, 2nd switch, 2nd switch - status: UNB2_I2C_bus_QSFP_error + status: UNB2TR_I2C_bus_QSFP_error - name: switch_DDR4 type: i2c_array2 parent: I2C1 parameters: [0,1, 0,3, 4,4] - status: UNB2_I2C_bus_DDR4_error + status: UNB2TR_I2C_bus_DDR4_error - name: switch_FPGA_PS type: i2c_array2 parent: I2C1 parameters: [0,1, 0,3, 5,5] - status: UNB2_I2C_bus_FPGA_PS_error + status: UNB2TR_I2C_bus_FPGA_PS_error - name: GPIO type: gpio @@ -90,32 +90,32 @@ device_registers: variables: #When I2C bus timeout, bus_error set to False. Can we set to True again to retry. - - name: UNB2_I2C_bus_error + - name: UNB2TR_I2C_bus_error driver: switch_UNB2 rw: ro dtype: uint8 dim: 2 - - name: UNB2_I2C_bus_FP_error + - name: UNB2TR_I2C_bus_FP_error driver: switch_UNB2 rw: hidden dtype: uint8 dim: 2 - - name: UNB2_I2C_bus_QSFP_error + - name: UNB2TR_I2C_bus_QSFP_error driver: switch_QSFP rw: ro dtype: uint8 dim: 48 - - name: UNB2_I2C_bus_DDR4_error + - name: UNB2TR_I2C_bus_DDR4_error driver: switch_QSFP rw: ro dtype: uint8 dim: 8 - - name: UNB2_I2C_bus_FPGA_PS_error + - name: UNB2TR_I2C_bus_FPGA_PS_error driver: switch_FPGA_PS rw: ro dtype: uint8 dim: 8 - - name: UNB2_I2C_bus_PS_error + - name: UNB2TR_I2C_bus_PS_error driver: switch_PS rw: ro dtype: uint8 @@ -133,15 +133,16 @@ variables: dtype: boolean dim: 2 - - name: UNB2_PWR_off + - name: UNB2_PWR_on driver: GPIO mask: UNB2_mask width: 1 rw: rw dtype: boolean + convert_unit: bool_invert dim: 2 - - name: UNB2_Front_Panel_LED + - name: UNB2_Front_Panel_LED_colour description: bit 0=Red, 1=Blue, 2=Green mask: UNB2_mask driver: switch_FP @@ -152,7 +153,7 @@ variables: dtype: uint8 dim: 2 - - name: UNB2_EEPROM_Serial_Number + - name: UNB2_PCB_version driver: switch_UNB2 devreg: 0x50.0 width: 80 #10 characters @@ -160,7 +161,7 @@ variables: dtype: string dim: 2 - - name: UNB2_EEPROM_Unique_ID + - name: UNB2_PCB_ID driver: switch_UNB2 devreg: 0x50.0xFC width: 32 @@ -328,22 +329,28 @@ variables: dim: 48 monitor: true - methods: - name: UNB2TR_Init #Called after startup to load. driver: switch_UNB2 debug: True instructions: - - UNB2_EEPROM_Unique_ID: Update - + - UNB2TR_I2C_error: 0 + - UNB2_PCB_ID: Update + - UNB2_PCB_version: Update + - UNB2_Front_Panel_LED_colour: Update + - UNB2_PWR_on: Update - name: UNB2_on mask: UNB2_mask instructions: - FP_IO.CONF: 0xff #TODO: setup correctly - - UNB2_Front_Panel_LED: 1 + - UNB2_PWR_on: 1 + - UNB2_Front_Panel_LED_colour: 1 + - UNB2_PCB_ID: Update + - UNB2_PCB_version: Update - name: UNB2_off mask: UNB2_mask instructions: - - UNB2_Front_Panel_LED: 2 + - UNB2_PWR_on: 0 +# - UNB2_Front_Panel_LED_colour: 2 diff --git a/i2cserv/i2c_dev.py b/i2cserv/i2c_dev.py index aebf7ba9db29403e3a9ca2d7abb5f75036b1a462..2d59a6cea8f5b5571d102f44c040ea160efa9a5e 100644 --- a/i2cserv/i2c_dev.py +++ b/i2cserv/i2c_dev.py @@ -99,15 +99,20 @@ class i2c_dev(hwdev): def OPCUASetVariable(self,varid,var1,data,mask): logging.info(str(("Set Var",var1['name'],data[:32],mask))) - if (var1['rw']=='variable') or not(var1.get('devreg')): - if varid==self.I2Cmaskid: + if varid==self.I2Cmaskid: + logging.info("Set I2Cmask"); + if (len(data)==1) and (len(mask)>1): data=[data[0]]*len(mask); if len(mask)==0: mask=[True]*len(data); if len(data)!=len(mask): - logging.warn("Trying to set I2C OK with wrong mask length!") + logging.warn("Trying to set I2C OK with wrong mask length! %i-%i"%(len(data),len(mask))) + return [] + if len(self.I2Cmask)!=len(mask): + logging.warn("Trying to set I2C OK with wrong mask length! %i-%i"%(len(data),len(mask))) return [] for x,m in enumerate(mask): if m: self.I2Cmask[x]=data[x]; - return [OPCUAset(self.I2Cmaskid,InstType.varSet,self.I2Cmask.copy(),[])] + return [OPCUAset(self.I2Cmaskid,InstType.varSet,self.I2Cmask.copy(),[])] + if (var1['rw']=='variable') or not(var1.get('devreg')): return [OPCUAset(varid,InstType.varSet,data,mask)]; oldmask=self.I2Cmask.copy() data,mask2=self.SetGetVarValueMask(var1,data,mask); diff --git a/i2cserv/i2cbitbang1.py b/i2cserv/i2cbitbang1.py index db4704255fb239c13a3b9209050db441961a5aad..47c9a945330863c784b500ac97900e49e58b2810 100644 --- a/i2cserv/i2cbitbang1.py +++ b/i2cserv/i2cbitbang1.py @@ -139,7 +139,7 @@ class i2cbitbang1(hwdev): # if not(RXbyte()==0x80): return False; for i in range(len(value)): value[i]=RXbyte(last=(i==len(value)-1)) - print("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 #stop #SetI2C(DIRdev,1,DIRpin,[0]) #low SetI2C(CLKdev,1,CLKpin,[1]) diff --git a/opcuaserv/convert_unit.py b/opcuaserv/convert_unit.py index 599033d6aa1a6cc3754d15447223b6ff0a5c65e6..41bbc10cc276da47c6271870805ccbad91e34596 100644 --- a/opcuaserv/convert_unit.py +++ b/opcuaserv/convert_unit.py @@ -1,6 +1,9 @@ def Kelvin2Celsius(T): return T-273.15; -def period2RMS(T): +def period2RPM(T): if T==0: return 0. return 60./T; + +def bool_invert(T): + return not(T); diff --git a/opcuaserv/yamlreader.py b/opcuaserv/yamlreader.py index 6be87499895b68272e596e1e0201b658fd7cb9ea..c5c8953c0905aa1b4f4aa341f5c11675f69f9f1b 100644 --- a/opcuaserv/yamlreader.py +++ b/opcuaserv/yamlreader.py @@ -4,7 +4,7 @@ import time from yamlconfig import * import logging from .smbus_float import * -from .convert_unit import * +from opcuaserv import convert_unit def bytes2int(bts): x=0; for b in bts: @@ -24,7 +24,7 @@ class yamlreader(yamlconfig): self.yamlfile=yamlfile; yamlconfig.__init__(self,yamlfile) self.server=i2cserver; - self.timecount=0; + self.timecount=1000; #0 start a 0, 1000 first point immediate self.monitorvarcnt=0; self.statusid=self.getvarid(yamlfile+"_translator_busy"); self.statusOPC=None @@ -116,6 +116,8 @@ class yamlreader(yamlconfig): scale=v.get('scale',1.) data=[int(d/scale) for d in data] if (dtype=="boolean"): + convert=v.get("convert_unit") + if convert: data=[eval("convert_unit."+convert)(d) for d in data] data2=bytearray(data*1); elif (dtype in ['uint8','uint16','uint32','uint64','double']): if width<=1: @@ -168,6 +170,8 @@ class yamlreader(yamlconfig): logging.debug(str(("OPCset",width,data))) if dtype=="boolean": data2=[d==1 for d in data]; + convert=v.get("convert_unit") + if convert: data2=[eval("convert_unit."+convert)(d) for d in data2] elif (dtype in ['uint8','uint16','uint32','uint64','double']): data=bytearray(data) if width<=1: @@ -198,7 +202,7 @@ class yamlreader(yamlconfig): scale=float(scale) data2=[(d*scale) for d in data2] convert=v.get("convert_unit") - if convert: data2=[eval(convert)(d) for d in data2] + if convert: data2=[eval("convert_unit."+convert)(d) for d in data2] var1=v.get('OPCR') if not(var1): var1=v.get('OPCW') diff --git a/start.sh b/start.sh old mode 100644 new mode 100755 diff --git a/testRCUL.py b/testRCUL.py index 9512ebdc92909a7d9d742c2d7c55f894557d2010..aa8b1ae24e6c9e79cdddb252f8beb613f7b92f80 100644 --- a/testRCUL.py +++ b/testRCUL.py @@ -38,7 +38,7 @@ def GetVal(name,N=1): return data[N3*RCUNR:N3*(RCUNR+1)],var1 -data,var1=GetVal('RCU_ID'); +data,var1=GetVal('RCU_PCB_ID'); ID=("%.2x%.2x%.2x%.2x" % (data[0],data[1],data[2],data[3])) @@ -63,7 +63,7 @@ def Check(D,Dmin,Dmax): return True if True: - data,var1=GetVal('RCU_temperature'); + 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();