def get_structure(self): log.log('get_structure function called') self.structure = [] f = './temp/ini/parameters.ini' if not os.path.isfile(f): return i = IniParser() i.read(f) self.structure.append(('mixer', i.get('Mixer', 'Volume'))) f = './temp/ini/base.ini' if not os.path.isfile(f): return i = IniParser() i.read(f) if i.getint('General', 'WeighingConveyer') > 0: self.structure.append(('weighing conv', i.getint('General', 'WeighingConveyer'))) if i.getint('Structure', 'Lifts') > 0: self.structure.append(('lifts', i.getint('Structure', 'Lifts'))) if i.getint('Structure', 'Conveyers') > 0: self.structure.append(('convs', i.getint('Structure', 'Conveyers'))) if i.getint('Structure', 'Reservoirs') > 0: self.structure.append(('reservoirs', i.getint('Structure', 'Reservoirs'))) for sec in ('Aggregate_Bin', 'Cement_Bin', 'Water_Bin', 'Admixture_Bin'): silos = 0 #goes through up to 10 possible bins for num in range(1, 10): pom = i.getint('%s%i' % (sec, num), 'Silos', 0) if pom > silos: silos = pom #endfor abr = sec.split('_')[0] self.structure.append(('%s' % abr.lower(), '%i -> %i -> %i' % (silos, i.getint(abr, 'Bins'), i.getint(abr, 'Scales')))) #endfor x = i.get('BinaryInput_Signals', 'I_Bin1CEMclosed', 'x').strip() if not x in ('x', '255'): self.structure.append(('cement_bin1 limit switch signal', x)) x = i.get('BinaryInput_Signals', 'I_Bin2CEMclosed', 'x').strip() if not x in ('x', '255'): self.structure.append(('cement_bin2 limit switch signal', x)) if i.getint('Hardware', 'IND-1') > 2: self.structure.append(('hardware', 'old')) else: self.structure.append(('hardware', 'new')) x = i.get('Hardware', 'PointerCounts', 'x').strip() self.structure.append(('pointercounts', x))
def get_coefficients(self): log.log('get_coefficients function called') self.coefficients = {} converter = 8192 if self.mj in ('mj04', 'mj22', 'mj36'): converter = 4096 l = [] f = './temp/ini/base.ini' if not os.path.isfile(f): return i = IniParser() i.read(f) for s in i.options('AnalogInput_Signals'): if 'scale' in s.lower() and i.get('AnalogInput_Signals', s) != 'x': l.append((s, i.getint('AnalogInput_Signals', s))) #endfor f = './temp/ini/parameters.ini' if not os.path.isfile(f): return i = IniParser() i.read(f) for s, a in l: self.coefficients[s] = i.getfloat(s, 'Range') #endfor f = './temp/ini/settings.ini' if not os.path.isfile(f): return i = IniParser() i.read(f) for s, a in l: print s, a print self.coefficients[s] print i.getfloat('AnalogInput_Coefficients', 'Coefficient%i' % a) print type(self.coefficients[s]) print type(i.getfloat('AnalogInput_Coefficients', 'Coefficient%i' % a)) capacity = self.coefficients[s] difference = (i.getfloat('AnalogInput_Coefficients', 'Coefficient%i' % a) / (capacity/converter) - 1) * 100 offset = i.getint('AnalogInput_Offsets', 'Offset%i' % a) self.coefficients[s] = (capacity, difference, offset)
def get_little_amounts(self): log.info('little amounts function called') silo = {} self.little_amounts_fails = {} doba = None vaha = None navazeno = None analog = None adaptivita = None pozadavek = None zasobnik = 99 # can delete this line after three month (bacuse of error in info txt from Piestany) fn = 'control.log' for l in give_lines(fn, 3): if 'poddavkovani ' in l.lower(): zasobnik = int(l.split()[-1]) vaha = None navazeno = None pozadavek = None elif 'dobaotevreni ' in l.lower(): pom = float(l.split()[-1]) if pom > 3 or pom < 0: continue # filtrace demetskych hodnot v milisekundach a zapornych hodnot doba = pom elif 'mezistav1 ' in l.lower(): vaha = float(l.split()[-1]) elif 'NejblizsiCil2' in l and vaha: pozadavek = float(l.split()[-1]) - vaha elif 'PrumernaHodnotaAI[CisloAnalogu] - VychoziVaha' in l: analog = float(l.split()[-1]) elif 'frakcenamereno2 ' in l.lower() and vaha: navazeno = float(l.split()[-1]) - vaha #endif if doba and navazeno: log.info('%i, %0.2f, %i' % (navazeno, doba, zasobnik)) if navazeno < 30 or navazeno > 500: log.info('little amount fail: %i, %0.2f, %i' % (navazeno, doba, zasobnik)) if not zasobnik in self.little_amounts_fails: self.little_amounts_fails[zasobnik] = [] #endif self.little_amounts_fails[zasobnik].append('%i, %0.2f' % (navazeno, doba)) doba = None continue #endif if analog: adaptivita = navazeno - analog + vaha if not zasobnik in silo: silo[zasobnik] = [] silo[zasobnik].append((doba, navazeno, pozadavek, adaptivita)) doba = None vaha = None navazeno = None analog = None adaptivita = None #endif #endfor #log.info('%s' % silo) self.silo = {} self.little_amounts_error = False f = './temp/ini/adapt.ini' if not os.path.isfile(f): return adapt = IniParser() adapt.read(f) f = './temp/ini/parameters.ini' if not os.path.isfile(f): return parameters = IniParser() parameters.read(f) for k in silo: self.little_amounts_error = adapt.has_option('Aggregate', 'VelocityOfFilling1-%s' % k) param_velocity = 0 param_offset = 0 if parameters.has_option('Aggregate_Bin1_Silo%s' % k, 'Velocity_Base'): param_velocity = parameters.getint('Aggregate_Bin1_Silo%s' % k, 'Velocity_Base') param_offset = parameters.getfloat('Aggregate_Bin1_Silo%s' % k, 'Additional_Time') else: self.little_amounts_error = True #endif x = 0 sez = {} while x < 1.5: if not x in sez: sez[x] = [] for doba, navazeno, pozadavek, adaptivita in silo[k]: if doba-x == 0: continue #I dont know why sez[x].append(navazeno/(doba - x)) #endfor x = x + 0.01 #endwhile minimum = None for x in sorted(sez): sqr_sum = 0 avg = 0 dev = 0 avg = sum(sez[x]) * 1.0 / len(sez[x]) for velocity in sez[x]: sqr_sum += ((velocity - avg) ** 2) / len(sez[x]) #endfor dev = sqr_sum ** 0.5 if not minimum or dev < minimum: #print dev minimum = dev self.silo[k] = (x, avg, len(sez[x]), dev, param_velocity, param_offset)