retrieve + save

server_dataclass
esea_info 2 years ago
parent 60d5a40b6a
commit 73933a72a3
  1. 3
      01.py
  2. 2
      app.py
  3. 91
      awrams.py

@ -45,3 +45,6 @@ def removeMask(byt:bytes):
pass
dd = removeMask(aaa)
print(dd.hex())
zz =[ 1,2,3,4]
print( ';'.join(zz) )

@ -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,):

@ -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 '''
print( " call back for Lw Rs .................. " )
# for w in wavelength:
# print(w)
print("=================================")
for s in spectrum:
print(s)
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
self.save()
# 保存 进一步处理
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):
@ -352,7 +384,6 @@ class AwramsHandle(object):
return ret
pass
pass
class Acfg:

Loading…
Cancel
Save