def getdata(self): """Read the whole set of data registers once""" sl = self self.gdb['state'] = 'disabled' #disable button while reading self.master.update() resp = 0 if not self.jmprButton['text'][-1]=="N": #check for jumper util.DEVICE_ID = long(self.did.get()) util.JMP = 0 else: util.DEVICE_ID = ds['id'] s['port'] = int(self.com.get()[-1])-1 ser = modbus.openConn(s) if ser: resp = modbus.getData(ser) ser.close() if resp: util.errlvl=1 print resp self.volr.set("%.2f"%resp[3]) #read and split response self.energyr.set("%.3f"%resp[4]) self.massr.set("%.2f"%resp[5]) self.vftotal.set("%.0f"%resp[6]) self.hetotal.set("%.0f"%resp[7]) self.cetotal.set("%.0f"%resp[8]) self.mftotal.set("%.0f"%resp[9]) self.ltemp.set("%.2f"%resp[10]) self.rtemp.set("%.2f"%resp[11]) print ":::" print str(log.LOGEN) if log.LOGEN == 1: #log? print "logging!" l = log.log(str(resp[3:12])[1:-1].strip()) if not l: self.logB() log.REEN = 0 self.repeatButton['text'] = "Off" else: #if util.repeat and log.REEN: # self.getdata() if util.errlvl<=3: util.errlvl+=1 self.getdata() else: self.gdb['state'] = 'normal' #restore get button return False if util.repeat and log.REEN and util.errlvl<4: #repeat this function every util.repeat sec if cont log print "sleeping for" + str(util.repeat) thread = Thread(target=self.sleeptimer,args=(util.repeat,)) thread.start() #spawn thread for util.repeat secs while thread.is_alive(): #while thread is alive, do nothing self.master.update() if not log.REEN: #if repeat turned off, stop right away break if log.REEN: #once thread ends, if still logging, take getdata self.getdata() self.gdb['state'] = 'normal'
def defaultstwo(self): """set defaults 2 on the meter""" util.errlvl=4 #error on first error resp = 0 s['port'] = int(self.com.get()[-1])-1 ser = modbus.openConn(s) if ser: try: resp = modbus.writeReg(ser,modbus.fc['reset'],int(modbus.reg['defaults two']),0) ser.close() except: return False
def resetvf(self): """reset volume flow""" util.errlvl=4 #error on first error resp = 0 s['port'] = int(self.com.get()[-1])-1 ser = modbus.openConn(s) if ser: try: resp = modbus.writeReg(ser,modbus.fc['reset'],int(modbus.reg['reset flow total']),0) ser.close() except Exception, e: print "exception: "+str(e) return False
def resetce(self): """Reset cooling energy""" util.errlvl=4 #error on first error resp = 0 s['port'] = int(self.com.get()[-1])-1 ser = modbus.openConn(s) if ser: try: resp = modbus.writeReg(ser,modbus.fc['reset'],int(modbus.reg['reset cooling total']),0) ser.close() except: return False if resp: self.cetotal.set("0.0")
def readunits(self): """retrieves unit settings from meter""" util.errlvl=4 self.retreive['state'] = 'disabled' #prevent multiple presses self.master.update() #prob extranious resp = 0 if not self.jmprButton['text'][-1]=="N": #jumper status util.DEVICE_ID = long(self.did.get()) util.JMP = 0 else: util.DEVICE_ID = ds['id'] s['port'] = int(self.com.get()[-1])-1 #COM port num ser = modbus.openConn(s) if ser: print "getting units.." resp = modbus.getUnits(ser) ser.close() if resp: print "units: " readunits = resp[6:26] print readunits chunks = len(readunits) numsize = 2 units=[readunits[i:i+numsize] for i in range(0,chunks,numsize)] print units self.pot.set(self.po['values'][int(units[6],16)%3]) self.fru.set(self.fr['values'][int(units[0],16)%3]) self.eru.set(self.er['values'][(int(units[1],16)-3)%4]) self.mfru.set(self.mf['values'][(int(units[2],16)-7)%2]) self.ftu.set(self.ft['values'][(int(units[3],16)-9)%3]) selection = (int(units[4],16)-12) if selection==5: self.etu.set(self.et['values'][3]) else: self.etu.set(self.et['values'][selection%3]) self.mtu.set(self.mt['values'][(int(units[5],16)-15)%2]) self.tou.set(self.to['values'][int(units[7],16)%2]) self.met.set(self.me['values'][int(units[8],16)]) per=str(int(units[9],16)) #since 2 digits must specify hex self.peg.set(per) self.ppg.set(per) self.mediaf(util.root) if not resp: print "units failed" self.retreive['state'] = 'enabled'
def apply(self): util.errlvl=4 data = dict() data['baudrate'] = long(self.br.get()) data['slave id'] = long(self.did.get()) data['parity'] = self.parity['values'].index(self.par.get()) data['flow rate units'] = self.fr['values'].index(self.fru.get()) data['energy rate units'] = self.er['values'].index(self.eru.get())+3 data['mass flow rate units'] = self.mf['values'].index(self.mfru.get())+7 data['flow total units'] = self.ft['values'].index(self.ftu.get())+9 data['energy total units'] = self.et['values'].index(self.etu.get())+12 if data['energy total units']==15: data['energy total units'] = 17 data['mass total units'] = self.mt['values'].index(self.mtu.get())+15 data['pulse output'] = self.po['values'].index(self.pot.get()) data['pulse output source'] = self.pulos['values'].index(self.pos.get()) data['temperature units'] = self.to['values'].index(self.tou.get()) data['media type'] = self.me['values'].index(self.me.get()) if self.esb["state"]=="normal": data['per cent'] = long(self.peg.get()) elif self.didi["state"]=="normal": data['per cent'] = long(self.ppg.get()) else: data['per cent'] = 10 #Check for jumper and setup comm if not self.jmprButton['text'][-1]=="N": util.DEVICE_ID = data['slave id'] #util.PARITY = 'NOE'[data['parity']] #util.BAUDRATE = data['baudrate'] util.JMP = 0 else: util.DEVICE_ID = ds['id'] s['parity'] = ds['parity'] s['baud'] = ds['baud'] #set defaults defaults.set("Settings","id",str(self.did.get())) defaults.set("Settings","br",str(self.br.get())) defaults.set("Settings","pa",str(self.parity['values'].index(self.par.get()))) defaults.set("Settings","fr",str(self.fr['values'].index(self.fru.get()))) defaults.set("Settings","er",str(self.er['values'].index(self.eru.get()))) defaults.set("Settings","mf",str(self.mf['values'].index(self.mfru.get()))) defaults.set("Settings","ft",str(self.ft['values'].index(self.ftu.get()))) defaults.set("Settings","et",str(self.et['values'].index(self.etu.get()))) defaults.set("Settings","mt",str(self.mt['values'].index(self.mtu.get()))) defaults.set("Settings","po",str(self.po['values'].index(self.pot.get()))) defaults.set("Settings","pulos",str(self.pulos['values'].index(self.pulos.get()))) defaults.set("Settings","to",str(self.to['values'].index(self.tou.get()))) defaults.set("Settings","me",str(default["me"])) defaults.set("Settings","peg",str(default["peg"])) defaults.set("Settings","ppg",str(default["ppg"])) s['port'] = int(self.com.get()[-1])-1 ser = modbus.openConn(s) if ser: #setup to write self.pbar.grid() #place progress bar where apply button is self.applyButton.grid_remove() #hide apply button self.pbar.start(50) self.retreive['state'] = 'disabled' #grey out all buttons b/c not threadsafe self.rvf['state'] = 'disabled' self.rmf['state'] = 'disabled' self.rthe['state'] = 'disabled' self.rce['state'] = 'disabled' self.gdb['state'] = 'disabled' self.logPathButton['state'] = 'disabled' if not self.jmprButton['text'][-1]=="N": util.JMP = 0 #if jumper off,use custom comm settings self.master.update() modbus.setup(self.master,ser,data) ser.close() self.pbar.stop() #restore gui self.pbar.grid_remove() self.applyButton.grid() self.retreive['state'] = 'enabled' self.rvf['state'] = 'enabled' self.rmf['state'] = 'enabled' self.rthe['state'] = 'enabled' self.rce['state'] = 'enabled' self.gdb['state'] = 'enabled' self.logPathButton['state'] = 'enabled'