diff --git a/01.py b/01.py index 8e21b84..52b53bd 100644 --- a/01.py +++ b/01.py @@ -44,4 +44,7 @@ def removeMask(byt:bytes): return buf pass dd = removeMask(aaa) -print(dd.hex()) \ No newline at end of file +print(dd.hex()) + +zz =[ 1,2,3,4] +print( ';'.join(zz) ) \ No newline at end of file diff --git a/app.py b/app.py index 3f516fc..058bcf8 100644 --- a/app.py +++ b/app.py @@ -57,7 +57,7 @@ class MyApp(object): ''' 多个handle ''' self.awrams_handle = { } for k,v in self.cal_cfg.items(): - ah = AwramsHandle( deviceid=k, cfg=self.sensor_cfg[k], calcfg=v) + ah = AwramsHandle( deviceid=k, cfg=self.sensor_cfg[k], calcfg=v, rtv=self.retrieve) self.awrams_handle.update( {k:ah } ) def run_server(self,): diff --git a/awrams.py b/awrams.py index b47f9ff..c48e0ca 100644 --- a/awrams.py +++ b/awrams.py @@ -7,6 +7,7 @@ import struct import time from myRamses import RamsesFactoryHandle from tools.mylogger import log +from myconfig import TOKEN,NEWLINE @dataclass class InfoFrame(object): @@ -174,6 +175,7 @@ class AWRAMSData(object): deviceid:int =None configSensor:List[str] = None # 序列号 Lsky Esky Lwater configFunc:List[str] = None + currentPath:Path =None info_frame:InfoFrame = None data_frame:DataFrame = None # 数据只到分组成byte结束 ramsesFactoryHandle:List[RamsesFactoryHandle] = None # 多个工厂,每个工厂有自己的 标定文件及参数,工厂标记序列哈,只处理相同序列号的产品数据 @@ -199,12 +201,13 @@ class AWRAMSData(object): tmp_ramses_factory_handle = RamsesFactoryHandle( sn= self.configSensor[i], cfg=cfg ) self.ramsesFactoryHandle[i] = tmp_ramses_factory_handle - def set_data_frame( self, data_frame:List[bytes], func ): + def set_data_frame( self, data_frame:List[bytes], pth:Path, func ): """ @description : data_frame """ log.info(f" 处理 data_frame:List[bytes] ",__name__,"set_data_frame") self.data_frame = DataFrame() + self.currentPath= pth self.data_frame.set_data_bytes_list(data_frame ) # 对数据进行分组 split_by_sensor(self,) @@ -221,7 +224,6 @@ class AWRAMSData(object): self.spectrum.append (self.ramsesFactoryHandle[i].rf.data_after_cal) self.wavelength.append (self.ramsesFactoryHandle[i].rf.Wavelength) - # 补充IP解析数据 # 回调函数 @@ -232,13 +234,7 @@ class AWRAMSData(object): self.info_frame.set_info_frame(info_frame) #已经解析 pass - # def deal_data_frame(self,): - # """ - # 对数据进行分组 split_by_sensor(self,) - # 分组后的数据 传给RamseFactory 的 deal_raw_data_list, 返回平均值 - # """ - # # self.data_frame - # pass + class mycfg(object): sensor_cfg = { 2: {1: {'FUNC': 'Lsky', 'SN': '85B5'}, 2: {'FUNC': 'Esky', 'SN': '50ED'}, 3: {'FUNC': 'Lwater', 'SN': '852F'}} } @@ -259,12 +255,16 @@ class AWRAMS(object): configFunc:List[str] =None # 功能 Lsky Esky Lwater calibrationCfg:dict =None data : AWRAMSData =None - Lsky:List[float] =None # 无需记录原始波长,记录插值后的波长 - Esky:List[float] =None - Lwater:List[float] =None + wavelength:List[np.ndarray] =None + spectrum:List[np.ndarray] =None beginWavelength: float =None endWavelength: float =None + rowFactor:float =None wvInterval: float =None + newWavelength:np.ndarray=None + Lsky:np.ndarray =None # 无需记录原始波长,记录插值后的波长 + Esky:np.ndarray =None + Lwater:np.ndarray =None Lw:np.ndarray =None Rs:np.ndarray =None @@ -279,6 +279,15 @@ class AWRAMS(object): self.calibrationCfg = calcfg pass + def set_retrieve(self,rtv:dict): + self.beginWavelength= float(rtv["beginWL"]) + self.endWavelength= float(rtv["endWL"]) + self.wvInterval= float(rtv["interval"]) + self.rowFactor= float(rtv["0.026"]) + self.newWavelength=np.linspace(self.beginWavelength,self.endWavelength,self.wvInterval) + pass + + def config_awrams(self, cfg:dict): assert self.deviceid in cfg.keys(), f'>>>> Cannot get the configuration of device id {self.deviceid}' self.configSensor = [None,None,None] @@ -303,31 +312,54 @@ class AWRAMS(object): self.data.build_datafactory_by_configSensor( self.calibrationCfg) pass - def callback(self, wavelength:list, spectrum:list): + def callback( self, wavelength:list, spectrum:list ): ''' 处理返回的数据, 生成Lsky Esky Lwater Lw Rs ''' + log.info( " call back for Lw Rs , 插值, 计算, 保存.................. " ) + self.Lsky = np.interp( self.newWavelength, self.wavelength[0], self.spectrum[0]) + self.Esky = np.interp( self.newWavelength, self.wavelength[1], self.spectrum[1]) + self.Lwater = np.interp( self.newWavelength, self.wavelength[2], self.spectrum[2]) + self.Lw = self.Lwater - self.rowFactor * self.Lsky + self.Rs = self.Lw/self.Esky - print( " call back for Lw Rs .................. " ) - # for w in wavelength: - # print(w) - print("=================================") - - for s in spectrum: - print(s) - + self.save() - pass + # 保存 进一步处理 + def save(self, mode=0): + ''' 保存在原文件所在目录 ''' + pth = self.data.currentPath + save_fpath = pth.joinpath("res.csv") + ret = "" + ret = ret + str(self.deviceid)+"_"+pth.parts[-1] + TOKEN + self.list2str(list(self.newWavelength)) + ret = ret + NEWLINE + "Lsky" + TOKEN + self.list2str( list(self.Lsky) ) + ret = ret + NEWLINE + "Esky" + TOKEN + self.list2str( list(self.Esky) ) + ret = ret + NEWLINE + "Lwater" + TOKEN + self.list2str( list(self.Lwater) ) + ret = ret + NEWLINE + "Lw" + TOKEN + self.list2str( list(self.Lw) ) + ret = ret + NEWLINE + "Rs" + TOKEN + self.list2str( list(self.Rs) ) + save_fpath.write_text( ret ) + pass + + def list2str( self, lst:list, token=";" ): + ''' 保存在原文件所在目录 ''' + ret= "" + for i in range(len(lst)): + if i == 0: + ret = ret + str(lst[i]) + else: + ret = ret + TOKEN + str(lst[i]) + pass class AwramsHandle(object): - def __init__(self, deviceid=2, cfg=None, calcfg=None): + def __init__(self, deviceid=2, cfg=None, calcfg=None, rtv=None): self.sensor_cfg = cfg self.calcfg = calcfg + self.retrieve = rtv self.device_id = deviceid - self.aw = AWRAMS( deviceid=self.device_id) - self.aw.set_cfg_calibration(self.calcfg) - - self.aw.config_awrams(self.sensor_cfg) + self.aw = AWRAMS( deviceid=self.device_id ) + self.aw.set_cfg_calibration( self.calcfg ) + self.aw.set_retrieve( self.retrieve) + self.aw.config_awrams( self.sensor_cfg ) pass @@ -341,7 +373,7 @@ class AwramsHandle(object): if bf.name != "info.bin": bytes_list.append( self.read_bin(bf) ) # print(f"++++++++++ {bytes_list}" ) - self.aw.data.set_data_frame( bytes_list, self.aw.callback ) + self.aw.data.set_data_frame( bytes_list, pth, self.aw.callback ) # 目录也要传过去 pass def read_bin(self,fpath: Path): @@ -351,7 +383,6 @@ class AwramsHandle(object): ret = file.read() return ret pass - pass