|
|
|
@ -145,7 +145,7 @@ class YiwinFrame( wx.Frame ): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.uart = Uart() |
|
|
|
|
# self.viper = Viper() |
|
|
|
|
# self.oscar = Viper() |
|
|
|
|
self.dataplot = DataPlot() |
|
|
|
|
self.plot_pure_water() |
|
|
|
|
|
|
|
|
@ -418,6 +418,7 @@ class YiwinFrame( wx.Frame ): |
|
|
|
|
if not self.uart.connect(): |
|
|
|
|
raise MyException(f" 串口不可用 ") |
|
|
|
|
if self.uart.IsOpen(): |
|
|
|
|
self.alterStatus_0(" COM port OK.") |
|
|
|
|
self.uart.disconnect() |
|
|
|
|
self.uart_thread = Multithread() |
|
|
|
|
pass |
|
|
|
@ -425,60 +426,80 @@ class YiwinFrame( wx.Frame ): |
|
|
|
|
def OnDeviceSN(self, e)-> None: |
|
|
|
|
self.__OnDeviceStop() |
|
|
|
|
log.info(f"OnDeviceSN: 获取device sn ", __name__, "", "") |
|
|
|
|
# self.mt = Mythead() |
|
|
|
|
self.oscar.set_cfg(self.syscfg) |
|
|
|
|
self.oscar.set_serial() |
|
|
|
|
# self.oscar.set_modbus(self.syscfg['register']['SNAddress'], self.syscfg['register']['SNLen']) |
|
|
|
|
try: |
|
|
|
|
self.oscar.sn_uart_thread( self.get_device_sn ) |
|
|
|
|
except Exception as e: |
|
|
|
|
self.alterStatus_0(e ) |
|
|
|
|
self.popDialog( e ) |
|
|
|
|
self.alterStatus_0(" SN 匹配一致" ) |
|
|
|
|
pass |
|
|
|
|
self.alterStatus_0( "正在获取 SN....") |
|
|
|
|
if self.myoscar.oscar.register is None: |
|
|
|
|
raise MyException(f" 请先打开串口,再试") |
|
|
|
|
|
|
|
|
|
self.myoscar.oscar.rawWavelength =None |
|
|
|
|
|
|
|
|
|
self.uart.set_modbus( |
|
|
|
|
self.myoscar.oscar.register.slaveaddress |
|
|
|
|
,self.myoscar.oscar.register.functioncode |
|
|
|
|
,self.myoscar.oscar.register.SNAddress |
|
|
|
|
,self.myoscar.oscar.register.SNLen) |
|
|
|
|
self.uart_thread.remove_tasks() |
|
|
|
|
self.uart_thread.add_task( self.__device_sn, args=() ) |
|
|
|
|
self.uart_thread.sequently_execute_tasks() |
|
|
|
|
self.myoscar.oscar.register.snBuf = self.res |
|
|
|
|
self.myoscar.get_device_sn_from_buf() |
|
|
|
|
self.alterStatus_0( f" SN : {self.myoscar.oscar.deviceSN} ") |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def __device_sn(self)-> None: |
|
|
|
|
self.res =b'' |
|
|
|
|
self.uart.disconnect() |
|
|
|
|
self.uart.connect() |
|
|
|
|
self.uart.write() |
|
|
|
|
self.res = self.uart.OneMeasure() |
|
|
|
|
|
|
|
|
|
def get_device_sn(self,sn): |
|
|
|
|
self.device_sn = sn |
|
|
|
|
if self.device_sn != self.ui_sn: |
|
|
|
|
log.error( f" 设备SN {self.device_sn} 与系统设置 {self.ui_sn}不一致 错误 " ) |
|
|
|
|
pass |
|
|
|
|
else: |
|
|
|
|
log.info(" sn 匹配成功 ! ") |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def OnDeviceWL(self, e)-> None: |
|
|
|
|
self.__OnDeviceStop() |
|
|
|
|
log.info(f"OnDeviceWL: 获得device wavelength ... ", __name__, "", "") |
|
|
|
|
if self.device_sn != '': |
|
|
|
|
self.oscar.set_cfg( self.syscfg ) |
|
|
|
|
self.oscar.set_serial() |
|
|
|
|
try: |
|
|
|
|
self.oscar.wl_uart_thread( self.get_device_wl ) |
|
|
|
|
except Exception as e: |
|
|
|
|
self.alterStatus_0(e ) |
|
|
|
|
self.popDialog( e ) |
|
|
|
|
self.alterStatus_0(" 获取波长成功!" ) |
|
|
|
|
else: |
|
|
|
|
self.popDialog('请获取设备序列号SN信息再试') |
|
|
|
|
pass |
|
|
|
|
self.alterStatus_0( "正在获取波长....") |
|
|
|
|
if self.myoscar.oscar.register is None: |
|
|
|
|
raise MyException(f" 请先打开串口,再试") |
|
|
|
|
if not self.myoscar.devicesn_ok: |
|
|
|
|
raise MyException(f"设备SN {self.myoscar.oscar.deviceSN} 与系统SN {self.myoscar.oscar.SN} 不匹配") |
|
|
|
|
|
|
|
|
|
self.uart_thread.remove_tasks() |
|
|
|
|
|
|
|
|
|
self.res = b'' |
|
|
|
|
for i in range(self.myoscar.oscar.register.count): |
|
|
|
|
log.debug(f" -> i {i}", __name__,"OnDeviceWL") |
|
|
|
|
self.uart.set_modbus( self.myoscar.oscar.register.slaveaddress,self.myoscar.oscar.register.functioncode |
|
|
|
|
,self.myoscar.oscar.register.WLBeginAddress + i*122, 122 ) |
|
|
|
|
log.debug(f" command -> {self.uart.command.hex()} ") |
|
|
|
|
self.uart_thread.add_task( self.__device_wl, args=() ) |
|
|
|
|
self.uart_thread.sequently_execute_tasks() |
|
|
|
|
# 处理self.res, 将self.res 返回 myviper |
|
|
|
|
self.myoscar.oscar.register.wavelengthBuf = self.res |
|
|
|
|
self.myoscar.get_raw_wavelength_from_buf() |
|
|
|
|
|
|
|
|
|
def __device_wl(self, )-> None: |
|
|
|
|
self.uart.disconnect() |
|
|
|
|
self.uart.connect() |
|
|
|
|
self.uart.write() |
|
|
|
|
tmp = self.uart.OneMeasure() |
|
|
|
|
self.res = self.res + tmp[3:len(tmp)-2] |
|
|
|
|
|
|
|
|
|
def get_device_wl(self, wl_buf): |
|
|
|
|
if len(wl_buf) != 0: |
|
|
|
|
self.output_wavelength = wl_buf |
|
|
|
|
self.output_wl_ndarray = np.array(self.output_wavelength) |
|
|
|
|
else: |
|
|
|
|
log.error( " 获取设备波长出错 " ) |
|
|
|
|
raise MyException( " 获取设备波长出错 " ) |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def OnDeviceLog(self, e)-> None: |
|
|
|
|
self.__OnDeviceStop() |
|
|
|
|
log.info( f"OnDeviceLog: 采集数据 定时器采集", __name__, "", "" ) |
|
|
|
|
# !!!! 判断是否有波长和sn |
|
|
|
|
if self.output_wavelength == []: |
|
|
|
|
self.alterStatus_0( " 没有设备波长信息,请获取设备波长") |
|
|
|
|
self.popDialog( " 没有设备波长信息,请获取设备波长") |
|
|
|
|
raise MyException(" 没有设备波长信息,请获取设备波长") |
|
|
|
|
self.alterStatus_0( "开始采集数据....") |
|
|
|
|
if self.myoscar.oscar.register is None: |
|
|
|
|
self.alterStatus_0( " 请先打开串口,再试") |
|
|
|
|
raise MyException(f" 请先打开串口,再试") |
|
|
|
|
if not self.myoscar.devicesn_ok: |
|
|
|
|
self.alterStatus_0( " 设备SN 与系统不匹配") |
|
|
|
|
raise MyException(f"设备SN 与系统不匹配") |
|
|
|
|
if self.myoscar.oscar.rawWavelength is None: |
|
|
|
|
raise MyException(f"没有波长信息") |
|
|
|
|
|
|
|
|
|
## 获取纯水标定文件 |
|
|
|
|
self.__read_cal_file() |
|
|
|
|
|
|
|
|
|
self.__OnDeviceLog() |
|
|
|
|
|
|
|
|
|
# 如何整点获取,如何快速获取 |
|
|
|
@ -486,33 +507,29 @@ class YiwinFrame( wx.Frame ): |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def __OnDeviceLog(self,)-> None: |
|
|
|
|
self.alterStatus_0(" 开始采集数据....") |
|
|
|
|
self.device_data = b'' |
|
|
|
|
self.mt = Mythead() |
|
|
|
|
self.oscar.set_cfg( self.syscfg ) |
|
|
|
|
self.oscar.set_serial() |
|
|
|
|
try: |
|
|
|
|
self.oscar.log_uart_thread( self.get_device_data ) |
|
|
|
|
except Exception as e: |
|
|
|
|
print(e) |
|
|
|
|
self.alterStatus_0(e ) |
|
|
|
|
self.popDialog( e ) |
|
|
|
|
pass |
|
|
|
|
self.uart_thread.remove_tasks() |
|
|
|
|
|
|
|
|
|
self.res = b'' |
|
|
|
|
for i in range(self.myoscar.oscar.register.count): |
|
|
|
|
log.debug(f" -> i {i}", __name__,"OnDeviceWL") |
|
|
|
|
self.uart.set_modbus( self.myoscar.oscar.register.slaveaddress,self.myoscar.oscar.register.functioncode |
|
|
|
|
,self.myoscar.oscar.register.DataBeginAddress + i*122, 122 ) |
|
|
|
|
log.debug(f" command -> {self.uart.command.hex()} ") |
|
|
|
|
self.uart_thread.add_task( self.__device_log, args=() ) |
|
|
|
|
self.uart_thread.sequently_execute_tasks() |
|
|
|
|
# 处理self.res, 将self.res 返回 myviper |
|
|
|
|
self.myoscar.oscar.register.intensityBuf = self.res |
|
|
|
|
self.myoscar.get_raw_intensity_from_buf() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __device_log(self, )-> None: |
|
|
|
|
# self.res =b'' |
|
|
|
|
self.uart.disconnect() |
|
|
|
|
self.uart.connect() |
|
|
|
|
self.uart.write() |
|
|
|
|
tmp = self.uart.OneMeasure() |
|
|
|
|
self.res = self.res + tmp[3:len(tmp)-2] |
|
|
|
|
|
|
|
|
|
def get_device_data( self,tm, data_buf ): |
|
|
|
|
if len(data_buf) != 0: |
|
|
|
|
self.device_data = self.oscar.convert_buf_2_float( data_buf ,8 ) |
|
|
|
|
self.plotpanel.clear_past() |
|
|
|
|
self.plotpanel.set_title_x_y( *self.plotpanel.measure_legend ) |
|
|
|
|
self.plotpanel.plot_one( |
|
|
|
|
tm |
|
|
|
|
, self.output_wl_ndarray |
|
|
|
|
,np.array(data_buf) |
|
|
|
|
) |
|
|
|
|
else: |
|
|
|
|
log.error( " 采集设备数据出错 " ) |
|
|
|
|
raise MyException(" 采集设备数据出错 ") |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def OnDeviceStop(self, e)-> None: |
|
|
|
|
self.__OnDeviceStop() |
|
|
|
|