import os import struct import time from pathlib import Path from PyQt5.QtCore import QTimer import numpy from Agreement.CS.skio.define import AOdataPacket, DIdataPacket, AIdataPacket, HSdataPacket from Agreement.CS.skio.manage import SkIO from utils.WorkModels import PointModel class IOMapping: def __init__(self, path, uri): super().__init__() self.skio = SkIO() self.skio.setup(uri, Path(os.path.join(path, 'demo'))) self.D_index = None self.AO_index = None self.AI_index = None self.current_value = [] # self.current_value1 = None # self.current_value2 = None # self.current_value3 = None # self.current_value4 = None self.Packet_serial_No = 0x00000000 self.setupvalue() def setupvalue(self): self.DO_index = set() self.DI_index = set() self.AO_index = set() self.AI_index = set() self.DO_dic = {} self.DI_dic = {} self.AO_dic = {} self.AI_dic = {} self.dic = {} for i in PointModel.select(): if i.sig_type in ('DO-24V', 'DO-48V', 'DO'): self.DO_index.add(int(i.reg)) if i.sig_type in ('DI-24V', 'DI-48V', 'DI'): self.DI_index.add(int(i.reg)) # if i.sig_type == 'AO' or i.sig_type == 'PT100' or i.sig_type == 'TC/T' or i.sig_type == 'RTD' or i.sig_type == 'TC': if i.sig_type == 'AO' or i.sig_type == 'PT100' or i.sig_type == 'TC/T' or i.sig_type == 'RTD' or i.sig_type == 'TC/K': self.AO_index.add(int(i.reg)) if i.sig_type == 'AI': self.AI_index.add(int(i.reg)) self.DO_index = sorted(list(self.DO_index)) self.DI_index = sorted(list(self.DI_index)) self.AO_index = sorted(list(self.AO_index)) self.AI_index = sorted(list(self.AI_index)) self.ALL_index = list(set(self.DO_index + self.DI_index + self.AO_index + self.AI_index)) for i in self.DO_index: self.DO_dic[i] = set() for j in PointModel.select().where(PointModel.reg == i): if j.sig_type in ('DO-24V', 'DO-48V', 'DO'): self.DO_dic[i].add(int(j.channel)) for i in self.DI_index: self.DI_dic[i] = set() for j in PointModel.select().where(PointModel.reg == i): if j.sig_type in ('DI-24V', 'DI-48V', 'DI'): self.DI_dic[i].add(int(j.channel)) for i in self.AO_index: self.AO_dic[i] = set() for j in PointModel.select().where(PointModel.reg == i): # if j.sig_type == 'AO' or j.sig_type == 'PT100' or j.sig_type == 'TC/T' or j.sig_type == 'RTD' or j.sig_type == 'TC': if j.sig_type == 'AO' or j.sig_type == 'PT100' or j.sig_type == 'TC/T' or j.sig_type == 'RTD' or j.sig_type == 'TC/K': self.AO_dic[i].add(int(j.channel)) for i in self.AI_index: self.AI_dic[i] = set() for j in PointModel.select().where(PointModel.reg == i): if j.sig_type == 'AI': self.AI_dic[i].add(int(j.channel)) for i in self.ALL_index: self.dic[i] = set() for j in PointModel.select().where(PointModel.reg == i): self.dic[i].add(int(j.channel)) try: for z in range(max(self.ALL_index)): if z in [i-1 for i in self.ALL_index]: self.current_value.append([0 for x in range(max(self.dic[z+1]))]) else: self.current_value.append([0 for x in range(8)]) except: return # if self.DO_index == []: # self.current_value1 = [] # else: # self.current_value1 = [self.current_value[i - 1][min(self.DO_dic[i])-1:max(self.DO_dic[i])] for i in self.DO_index] # if self.DI_index == []: # self.current_value2 = [] # else: # self.current_value2 = [self.current_value[i - 1][min(self.DI_dic[i])-1:max(self.DI_dic[i])] for i in self.DI_index] # if self.AO_index == []: # self.current_value3 = [] # else: # self.current_value3 = [self.current_value[i - 1][min(self.AO_dic[i])-1:max(self.AO_dic[i])] for i in self.AO_index] # if self.AI_index == []: # self.current_value4 = [] # else: # self.current_value4 = [self.current_value[i - 1][min(self.AI_dic[i])-1:max(self.AI_dic[i])] for i in self.AI_index] self.force_value = {point.sig_name: None for point in PointModel.all_points()} self.force_value_stact = {point.sig_name: False for point in PointModel.all_points()} # def setupvalue(self): # self.D_index = set() # self.AO_index = set() # self.AI_index = set() # self.AOR_index = set() # for i in PointModel.select(): # if i.sig_type in ('DO-24V', 'DO-48V', 'DI-24V', 'DI-48V', 'DO', 'DI'): # self.D_index.add(int(i.reg)) # if i.sig_type == 'AO' or i.sig_type == 'PT100' or i.sig_type == 'TC/T': # if '热电偶' in i.slot or 'RTD' in i.slot: # self.AOR_index.add(int(i.reg)) # continue # self.AO_index.add(int(i.reg)) # if i.sig_type == 'AI': # self.AI_index.add(int(i.reg)) # self.D_index = sorted(list(self.D_index)) # self.AO_index = sorted(list(self.AO_index)) # self.AI_index = sorted(list(self.AI_index)) # self.AOR_index = sorted(list(self.AOR_index)) # self.ALL_index = self.D_index + self.AO_index + self.AI_index # try: # for z in range(max(self.ALL_index)): # if z in [i - 1 for i in self.AO_index]: # self.current_value.append([0 for x in range(32)]) # elif z in [i - 1 for i in self.AOR_index]: # self.current_value.append([0 for x in range(16)]) # else: # self.current_value.append([0 for x in range(8)]) # except: # return # if self.D_index == []: # self.current_value1 = [] # else: # self.current_value1 = [self.current_value[i - 1] for i in self.D_index] # if self.AO_index == []: # self.current_value2 = [] # else: # self.current_value2 = [self.current_value[i - 1] for i in (self.AO_index + self.AOR_index)] # if self.AI_index == []: # self.current_value3 = [] # else: # self.current_value3 = [self.current_value[i - 1] for i in self.AI_index] # self.force_value = {point.sig_name: None for point in PointModel.all_points()} # self.force_value_stact = {point.sig_name: False for point in PointModel.all_points()} # 写AO def setAOcurrent(self): # if self.current_value2 == None: # return data1 = [] lis = [self.current_value[i - 1][min(self.AO_dic[i])-1:max(self.AO_dic[i])] for i in self.AO_index] for i in lis: for j in i: # print(j) data1.append(j) # print(data1) data = AOdataPacket(1, 640, self.Packet_serial_No, data1) self.skio.AOwrite(data) self.Packet_serial_No += 1 for i in zip(lis, list(self.AO_index)): self.current_value[int(i[-1]) - 1][min(self.AO_dic[i[-1]])-1:max(self.AO_dic[i[-1]])] = i[0] self.write_storeData(tim=time.time(), data=self.current_value) # 写DO def setDIcurrent(self): # if self.current_value1 == None: # return DO_index = [self.DO_index[-1], self.DO_index[0]] data1 = [self.current_value[i - 1][min(self.DO_dic[i])-1:max(self.DO_dic[i])] for i in self.DO_index] data1 = [data1[-1],data1[0]] print(data1) data = DIdataPacket(2, 64, self.Packet_serial_No, data1) self.skio.DIwrite(data) self.Packet_serial_No += 1 for i in zip(data1, list(DO_index)): self.current_value[int(i[-1]) - 1][min(self.DO_dic[i[-1]])-1:max(self.DO_dic[i[-1]])] = i[0] self.write_storeData(tim=time.time(), data=self.current_value) # 读AI def upAIcurrent(self): # # if self.current_value3 == None: # # return # data = AIdataPacket(3, 0, self.Packet_serial_No) # data1 = self.skio.AIread(data) # data2 = list(map(int, average(data1))) # data3 = [] # for i in range(len(data2)): # if i % 8 != 0: # continue # data3.append(data2[i:i+8]) # # self.current_value3 = [data1[-1][0:8], data1[-1][8:16], data1[-1][16:24]] # self.current_value4 = data3 # self.Packet_serial_No += 1 # for i in zip(self.current_value4, list(self.AI_index)): # self.current_value[int(i[-1]) - 1][min(self.AI_dic[i[-1]])-1:max(self.AI_dic[i[-1]])] = i[0] # if self.current_value3 == None: # return data = AIdataPacket(3, 0, self.Packet_serial_No) data1 = self.skio.AIread(data) data2 = [float(x) for x in average(data1)] data2 = getRealAI(data2) # data2 = list(data1[0]) # average data3 = [] # for i in range(len(data2)): # if i % 8 != 0: # continue # data3.append(data2[i:i+8]) # print(data1,'data1') # print(data2,'data2') # print(data3,'data3') # self.current_value3 = [data1[-1][0:8], data1[-1][8:16], data1[-1][16:24]] self.current_value4 = data2 self.Packet_serial_No += 1 # print(self.AI_index, self.AI_dic, type(data2)) for i in zip(self.current_value4, list(self.AI_index)): # print(i,999999) self.current_value[int(i[-1]) - 1][min(self.AI_dic[i[-1]])-1:max(self.AI_dic[i[-1]])] = self.current_value4 # 读DI def upDIcurrent(self): # # if self.current_value1 == None: # # return # data = AIdataPacket(4, 0, self.Packet_serial_No) # data1 = self.skio.DIread(data) # data2 = list(map(int, average(data1))) # data3 = [] # for i in range(len(data2)): # if i % 4 != 0: # continue # data3.append(data2[i:i + 4]) # self.current_value2 = data3 # self.Packet_serial_No += 1 # for i in zip(self.current_value2, list(self.DI_index)): # self.current_value[int(i[-1]) - 1][min(self.DI_dic[i[-1]])-1:max(self.DI_dic[i[-1]])] = i[0] # # for i in zip(self.current_value2, list(self.DI_index)): # # self.current_value[int(i[-1]) - 1] = i[0] # if self.current_value1 == None: # return data = AIdataPacket(4, 0, self.Packet_serial_No) data1 = self.skio.DIread(data) data2 = data1[0] # print(data2, len(data2), 'qweqwe') data3 = [] for i in range(len(data2)): if i % 4 != 0: continue data3.append(data2[i:i + 4]) self.current_value2 = data3 self.Packet_serial_No += 1 # print(i) # print(self.DI_dic) D_index = [self.DI_index[-1], self.DI_index[0]] # print(data3) for i in zip(self.current_value2, list(D_index)): self.current_value[int(i[-1]) - 1][min(self.DI_dic[i[-1]])-1:max(self.DI_dic[i[-1]])] = i[0] # for i in zip(self.current_value2, list(self.DI_index)): # self.current_value[int(i[-1]) - 1] = i[0] def High_speed_test(self, type, x): """下发高速实验命令开始""" if self.current_value == []: return # self.current_value.append(type) lis = self.current_value # print(lis[9][11:18]) H_List = [] H_List+=(lis[9][10:18]) # print(lis[9][11:18]) H_List+=(lis[10][10:18]) # print(lis[10][11:18]) H_List+=(lis[1][0:8]) # print(lis[1][0:8]) H_List+=(lis[2][0:8]) # print(lis[2][0:8]) H_List+=(lis[7][0:16]) # print(lis[7][0:16]) H_List+=(lis[10][0:4]) print(lis[10][0:4]) H_List+=(lis[11][4:8]) print(lis[11][4:8]) H_List.append(type) print(len(H_List)) # if len(l2) < 12: # print(len(lis)) data = HSdataPacket(7, 4, self.Packet_serial_No, H_List) # num = self.Packet_serial_No + 1 # self.skio.start_high_speed_test(data, num) self.skio.start_high_speed_test(data) self.Packet_serial_No = self.Packet_serial_No + 1 def receive_data(self): """接受高速实验数据""" data = self.skio.receive_data() # data = self.skio.receive_data()[0] # self.Packet_serial_No = self.skio.receive_data()[1] return data def readall(self): if self.current_value == []: return self.upAIcurrent() self.upDIcurrent() self.write_storeData(tim=time.time(), data=self.current_value) def read(self, name): # self.upAIcurrent() # self.upDIcurrent() point = PointModel.get(PointModel.sig_name == name) if point.offset: return get_bit_val(self.current_value[int(point.reg) - 1][int(point.channel) - 1], point.offset) else: return self.current_value[int(point.reg) - 1][int(point.channel) - 1] def write(self, name, value): point = PointModel.get(PointModel.sig_name == name) if point.sig_type in ('DO-24V', 'DO-48V', 'DO'): val = self.current_value[int(point.reg) - 1][int(point.channel) - 1] value = set_bit_val(byte=val, val=int(value), index=int(point.offset)) elif point.sig_type == 'AO': value = float(value) elif point.sig_type == 'TC/K': value = TC_K(value) elif point.sig_type == 'TC/T': value = TC_T(value) elif point.sig_type == 'TC/E': value = TC_E(value) elif point.sig_type == 'PT100': value = pt100_t2r(value) self.current_value[int(point.reg) - 1][int(point.channel) - 1] = value if point.sig_type in ('DO-24V', 'DO-48V', 'DO'): self.setDIcurrent() elif point.sig_type == 'AO' or point.sig_type == 'PT100' or point.sig_type == 'TC/T' or point.sig_type == 'TC/K': self.setAOcurrent() return value def runWrite(self, name, value): point = PointModel.get(PointModel.sig_name == name) if point.sig_type in ('DO-24V', 'DO-48V', 'DO'): val = self.current_value[int(point.reg) - 1][int(point.channel) - 1] value = set_bit_val(byte=val, val=int(value), index=int(point.offset)) elif point.sig_type == 'AO': var = value highValue = float(point.rhi) lowValue = float(point.rlo) var = self.getRealAO(var, highValue, lowValue) value = float(var) elif point.sig_type == 'TC/K': value = TC_K(value) elif point.sig_type == 'TC/T': value = TC_T(value) elif point.sig_type == 'TC/E': value = TC_E(value) elif point.sig_type == 'PT100': value = pt100_t2r(value) print(value, 'test') self.current_value[int(point.reg) - 1][int(point.channel) - 1] = value # if point.sig_type in ('DO-24V', 'DO-48V', 'DO'): # elif point.sig_type == 'AO' or point.sig_type == 'PT100' or point.sig_type == 'TC/T' or point.sig_type == 'TC/K': # self.setDIcurrent() # self.setAOcurrent() return value def getRealAO(self,x,highValue, lowValue): if highValue: return (16 * (x - lowValue) + 4 * (highValue-lowValue))/(1000 * (highValue - lowValue)) else: return x/1000 def doWrite(self): self.setDIcurrent() self.setAOcurrent() def GS_write(self, name, value, type): print(name, value, type, 3333333333333333333333) try: point = PointModel.get(PointModel.sig_name == name) except Exception as e: print(list(name),2222222222222222222222) return e if point.sig_type in ('DO-24V', 'DO-48V','DO'): val = self.current_value[int(point.reg) - 1][int(point.channel) - 1] value = set_bit_val(byte=val, val=int(value), index=int(point.offset)) elif point.sig_type == 'AO': highValue = float(point.rhi) lowValue = float(point.rlo) var = self.getRealAO(value, highValue, lowValue) value = float(var) elif point.sig_type == 'TC/K': value = TC_K(value) elif point.sig_type == 'TC/T': value = TC_T(value) elif point.sig_type == 'TC/E': value = TC_E(value) elif point.sig_type == 'PT100': value = pt100_t2r(value) self.current_value[int(point.reg) - 1][int(point.channel) - 1] = value def start_gather(self,parent): from PyQt5.QtCore import QTimer data = AIdataPacket(5, 0, self.Packet_serial_No) self.skio.start_gather(data) print('低速开始') self.timer = QTimer(parent) self.timer.start(500) self.timer.timeout.connect(self.readall) # self.readall() self.Packet_serial_No += 1 def stop_gather(self): data = AIdataPacket(6, 0, self.Packet_serial_No) print(data, '低速结束') self.skio.stop_gather(data) try: self.timer.stop() except: pass self.Packet_serial_No += 1 def START_GS_experiment(self): """高速实验开始""" data = AIdataPacket(9, 0, self.Packet_serial_No) print(data, '高速开始') self.skio.stop_gather(data) self.Packet_serial_No += 1 def STOP_GS_experiment(self): """告诉实验停止""" data = AIdataPacket(10, 0, self.Packet_serial_No) self.skio.stop_gather(data) self.Packet_serial_No += 1 def write_storeData(self, tim, data): lis = [] # for key in self.DO_dic: # lis.append(struct.pack('Q' * len(self.DO_dic[key]), *data[key - 1][min(self.DO_dic[key])-1:max(self.DO_dic[key])])) # for key in self.DI_dic: # lis.append(struct.pack('Q' * len(self.DI_dic[key]), *data[key - 1][min(self.DI_dic[key])-1:max(self.DI_dic[key])])) # for key in self.AI_dic: # lis.append(struct.pack('d' * len(self.AI_dic[key]), *data[key - 1][min(self.AI_dic[key])-1:max(self.AI_dic[key])])) # for key in self.AO_dic: # lis.append(struct.pack('d' * len(self.AO_dic[key]), *data[key - 1][min(self.AO_dic[key])-1:max(self.AO_dic[key])])) for i in data: lis.append((struct.pack('d' * len(i), *i))) data1 = struct.pack('64s64s64s64s64s256s128s128s64s144s144s64s', *lis) self.skio.storeData.write(tim, data1) def getRealAO(x,highValue, lowValue): if highValue: return (16 * (x - lowValue) + 4 * (highValue-lowValue))/(1000 * (highValue - lowValue)) else: return x/1000 def get_bit_val(byte, index): """ 得到某个字节中某一位(Bit)的值 :param byte: 待取值的字节值 :param index: 待读取位的序号,从右向左0开始,0-7为一个完整字节的8个位 :returns: 返回读取该位的值,0或1 """ if byte & (1 << index): return 1 else: return 0 def set_bit_val(byte, index, val): """ 更改某个字节中某一位(Bit)的值 :param byte: 准备更改的字节原值 :param index: 待更改位的序号,从右向左0开始,0-7为一个完整字节的8个位 :param val: 目标位预更改的值,0或1 :returns: 返回更改后字节的值 """ if val: return byte | (1 << index) else: return byte & ~(1 << index) def pt100_t2r(t): """ PT100, 温度到电阻转换公式 从0℃~850℃: Rt=R0(1+A*t+B*t^2) 从-200℃~0℃: Rt=R0[1+A*t+Bt^2+C(t-100)*t^3] 式中: Rt----温度为t时的铂电阻的阻值 R0----温度为0时的铂电阻的阻值,即100Ω A=3.9083*10^(-3)℃^(-1) B=-5.775*10^(-7) ℃^(-2) C=-4.183*10^(-12) ℃^(-4) """ A = 3.9083 * (10 ** -3) B = -5.775 * (10 ** -7) C = -4.183 * (10 ** -12) R0 = 100 if 0 <= t <= 850: Rt = R0 * (1 + A * t + B * t * t) return Rt elif -200 <= t < 0: Rt = R0 * (1 + A * t + B * t * t + C * (t - 100) * t ** 3) return Rt else: raise ValueError("温度超范围 -200 ~ 800 度") def TC_T(t): ''' https://max.book118.com/html/2018/0907/8061021016001123.shtm RTD_T 热电偶 温度转电动势 计算函数 输入 : t (摄氏度) 输出 : e (毫伏) ''' if -270 <= t <= 0: a0 = 0.000_000_000_0 * 10 ** 0 a1 = 3.874_810_636_4 * 10 ** 1 a2 = 4.419_443_434_7 * 10 ** -2 a3 = 1.184_432_310_5 * 10 ** -4 a4 = 2.003_297_355_4 * 10 ** -5 a5 = 9.013_801_955_9 * 10 ** -7 a6 = 2.265_115_420_5 * 10 ** -8 a7 = 3.607_115_659_3 * 10 ** -10 a8 = 3.849_393_988_3 * 10 ** -12 a9 = 2.821_352_192_5 * 10 ** -14 a10 = 1.425_159_477_9 * 10 ** -16 a11 = 4.876_866_228_6 * 10 ** -19 a12 = 1.079_553_927_0 * 10 ** -21 a13 = 1.394_502_706_2 * 10 ** -24 a14 = 7.979_515_392_7 * 10 ** -28 result = sum([ a0 * t ** 0, a1 * t ** 1, a2 * t ** 2, a3 * t ** 3, a4 * t ** 4, a5 * t ** 5, a6 * t ** 6, a7 * t ** 7, a8 * t ** 8, a9 * t ** 9, a10 * t ** 10, a11 * t ** 11, a12 * t ** 12, a13 * t ** 13, a14 * t ** 14, ]) / 1000 elif 0 < t <= 400: a0 = 0.000_000_000_0 * 10 ** 0 a1 = 3.874_810_636_4 * 10 ** 1 a2 = 3.329_222_788_0 * 10 ** -2 a3 = 2.061_824_340_4 * 10 ** -4 a4 = -2.188_225_684_6 * 10 ** -6 a5 = 1.099_688_092_8 * 10 ** -8 a6 = -3.081_575_877_2 * 10 ** -11 a7 = 4.547_913_529_0 * 10 ** -14 a8 = -2.751_290_167_3 * 10 ** -17 result = sum([ a0 * t ** 0, a1 * t ** 1, a2 * t ** 2, a3 * t ** 3, a4 * t ** 4, a5 * t ** 5, a6 * t ** 6, a7 * t ** 7, a8 * t ** 8, ]) / 1000 return result - 0.011 def TC_E(t): '''TC/E 热电偶 温度转电动势 计算函数 输入 : t (摄氏度) 输出 : e (毫伏) ''' if -270 <= t <= 0: a0 = 0.000_000_000_0 * 10 ** 0 a1 = 5.866_550_870_8 * 10 ** 1 a2 = 4.541_097_712_4 * 10 ** -2 a3 = -7.799_804_868_6 * 10 ** -4 a4 = -2.580_016_084_3 * 10 ** -5 a5 = -5.945_258_305_7 * 10 ** -7 a6 = -9.321_405_866_7 * 10 ** -9 a7 = -1.028_760_553_4 * 10 ** -10 a8 = -8.037_012_362_1 * 10 ** -13 a9 = -4.397_949_739_1 * 10 ** -15 a10 = -1.641_477_635_5 * 10 ** -17 a11 = -3.967_361_951_6 * 10 ** -20 a12 = -5.582_732_872_1 * 10 ** -23 a13 = -3.465_784_201_3 * 10 ** -26 return sum([ a0 * t ** 0, a1 * t ** 1, a2 * t ** 2, a3 * t ** 3, a4 * t ** 4, a5 * t ** 5, a6 * t ** 6, a7 * t ** 7, a8 * t ** 8, a9 * t ** 9, a10 * t ** 10, a11 * t ** 11, a12 * t ** 12, a13 * t ** 13, ]) / 1000 elif 0 < t <= 100: a0 = 0.000_000_000_0 * 10 ** 0 a1 = 5.866_550_871_0 * 10 ** 1 a2 = 4.503_227_558_2 * 10 ** -2 a3 = 2.890_840_721_2 * 10 ** -5 a4 = -3.305_689_665_2 * 10 ** -7 a5 = 6.502_440_327_0 * 10 ** -10 a6 = -1.919_749_550_4 * 10 ** -13 a7 = -1.253_660_049_7 * 10 ** -15 a8 = 2.148_921_756_9 * 10 ** -18 a9 = -1.438_804_178_2 * 10 ** -21 a10 = 3.596_089_948_1 * 10 ** -25 return sum([ a0 * t ** 0, a1 * t ** 1, a2 * t ** 2, a3 * t ** 3, a4 * t ** 4, a5 * t ** 5, a6 * t ** 6, a7 * t ** 7, a8 * t ** 8, a9 * t ** 9, a10 * t ** 10, ]) / 1000 def TC_K(t): '''TC/T 热电偶 温度转电动势 计算函数 输入 : t (摄氏度) 输出 : e (毫伏) ''' if -270 <= t <= 0: a0 = 0.000_000_000_0 * 10 ** 0 a1 = 3.945_012_802_5 * 10 ** 1 a2 = 2.362_237_359_8 * 10 ** -2 a3 = -3.285_890_678_4 * 10 ** -4 a4 = -4.990_482_877_7 * 10 ** -6 a5 = -6.750_905_917_3 * 10 ** -8 a6 = -5.741_032_742_8 * 10 ** -10 a7 = -3.108_887_289_4 * 10 ** -12 a8 = -1.045_160_936_5 * 10 ** -14 a9 = -1.988_926_687_8 * 10 ** -17 a10 = -1.632_269_748_6 * 10 ** -20 return sum([ a0 * t ** 0, a1 * t ** 1, a2 * t ** 2, a3 * t ** 3, a4 * t ** 4, a5 * t ** 5, a6 * t ** 6, a7 * t ** 7, a8 * t ** 8, a9 * t ** 9, a10 * t ** 10, ]) / 1000 elif 0 < t <= 1300: a0 = -1.760_041_368_6 * 10 ** 1 a1 = 3.892_120_497_5 * 10 ** 1 a2 = 1.855_877_003_2 * 10 ** -2 a3 = -9.945_759_287_4 * 10 ** -5 a4 = 3.184_094_571_9 * 10 ** -7 a5 = -5.607_284_488_9 * 10 ** -10 a6 = 5.607_505_905_9 * 10 ** -13 a7 = -3.202_072_000_3 * 10 ** -16 # a8 = 9.715_114_715_2 * 10 ** -20 a9 = -1.210_472_127_5 * 10 ** -23 c0 = 1.185_976 * 10 ** 2 c1 = -1.183_432 * 10 ** -4 # return (sum([ # a0 * t ** 0 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), # a1 * t ** 1 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), # a2 * t ** 2 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), # a3 * t ** 3 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), # a4 * t ** 4 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), # a5 * t ** 5 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), # a6 * t ** 6 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), # a7 * t ** 7 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), # a8 * t ** 8 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), # a9 * t ** 9 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), # ]) + a0) / 1000 result = (((((((((a9 * t + a8) * t + a7) * t + a6) * t + a5) * t + a4) * t + a3) * t + a2) * t + a1) * t + a0) / 1000 if 0 < t <= 19: result += 0.02 elif 21 <= t <= 39 : result += 0.04 elif 40 <= t <= 49 : result += 0.05 elif 50 <= t <= 69 : result += 0.06 elif 70 <= t <= 79 : result += 0.07 elif 80 <= t <= 89 : result += 0.08 elif 90 <= t <= 99 : result += 0.09 elif 100 <= t <= 119 : result += 0.1 elif 120 <= t <= 149 : result += 0.11 elif 150 <= t <= 169 : result += 0.12 elif 170 <= t <= 179 : result += 0.11 elif 180 <= t <= 189 : result += 0.1 elif 190 <= t <= 199 : result += 0.08 elif 200 <= t <= 209 : result += 0.07 elif 210 <= t <= 219 : result += 0.06 elif 220 <= t <= 229 : result += 0.05 elif 230 <= t <= 239 : result += 0.03 elif 240 <= t <= 269 : result += 0.02 elif 270 <= t <= 299 : result += 0.01 return result def average(lis): c = numpy.array(lis) return list(c.mean(axis=0)) def getRealAI(data): # self.set_current_value() data_ = [] data_c = [] # for xList in data: # xList = list(xList) vList = data # print(vList) # vList = [xList[0:8], xList[8:16], xList[16:24], xList[24:32]] # for value in zip(vList, sorted(self.AI_index)): # print(sorted(self.AI_index)[0:3]) # print(value) for index, x in enumerate(vList): try: i = PointModel.get(PointModel.reg == 6, PointModel.channel == index + 1) # print(i) highValue = i.rhi lowValue = i.rlo z = (x * 1000 - 4) * (highValue - lowValue) / 16 + lowValue # print(z, x, x * 1000) data_c.append(z) except: data_c.append(x) # data_.append(data_c) # data_c = [] # print(data_, 5555555) return data_c