修复连续采集时没有时间间隔导致通讯失败从而导致无有法正常连续采集的问题 修改如下

This commit is contained in:
xin
2024-09-27 16:16:03 +08:00
parent 6d47134dac
commit e8d98f155d
37 changed files with 2361 additions and 257 deletions

View File

@ -1,7 +1,7 @@
use super::is11base;
use super::super::mydefine::*;
use lazy_static::lazy_static;
use chrono::{self, Datelike, Timelike};
use chrono::{self, format, Datelike, Timelike};
use std::thread;
#[derive(PartialEq)]
enum WorkStat {
@ -12,6 +12,7 @@ enum WorkStat {
}
use std::{
sync::{Arc, Mutex},
};
@ -19,7 +20,15 @@ struct is11_dev_data {
sensor_info: is11base::STRSensorInfo,
shuttertime: i32,
stat: WorkStat,
percent: i32,
workname: String,
hasdark: bool,
hasflat: bool,
removedark: bool,
computeflat: bool,
average_number_data: u32,
average_number_dark: u32,
average_number_flat: u32,
}
@ -28,7 +37,16 @@ lazy_static! {
sensor_info: is11base::STRSensorInfo::default(),
shuttertime: 0,
stat: WorkStat::IDLE,
percent: 0,
workname: "noting".to_string(),
hasdark: false,
hasflat: false,
removedark: false,
computeflat: true,
average_number_data: 1,
average_number_dark: 1,
average_number_flat: 1,
}));
}
@ -64,6 +82,7 @@ pub fn opt_sensor(percent: i32) -> i32 {
}
dev_stat.stat=WorkStat::OPTING;
dev_stat.percent=0;
dev_stat.workname="opting".to_string();
drop(dev_stat); //释放锁
thread::spawn(move || {
@ -73,6 +92,9 @@ pub fn opt_sensor(percent: i32) -> i32 {
dev_statnow.stat=WorkStat::IDLE;
dev_statnow.shuttertime=shuttertime;
dev_statnow.workname="finish".to_string();
dev_statnow.percent=100;
dev_statnow.hasdark=false;
dev_statnow.hasflat=false;
}
);
@ -83,22 +105,22 @@ pub fn opt_sensor(percent: i32) -> i32 {
}
pub fn get_now_stat()->(String,String){
pub fn get_now_stat()->(String,String,i32){
let mut dev_stat=DEV_STAT.lock().unwrap();
match dev_stat.stat {
WorkStat::IDLE => {
return ("finish".to_string(),dev_stat.workname.clone());
return ("finish".to_string(),dev_stat.workname.clone(),100);
},
WorkStat::WOKING => {
return ("working".to_string(),dev_stat.workname.clone());
return ("working".to_string(),dev_stat.workname.clone(),dev_stat.percent);
},
WorkStat::STOP => {
return ("finish".to_string(),dev_stat.workname.clone());
return ("finish".to_string(),dev_stat.workname.clone(),dev_stat.percent);
},
WorkStat::OPTING => {
return ("opting".to_string(),dev_stat.workname.clone());
return ("opting".to_string(),dev_stat.workname.clone(),dev_stat.percent);
},
}
@ -106,17 +128,36 @@ pub fn get_now_stat()->(String,String){
}
pub fn collect(shuttertime:u32){
pub fn collect(shuttertime:u32,removedark:bool,computeflat:bool){
let mut dev_stat=DEV_STAT.lock().unwrap();
if dev_stat.stat != WorkStat::IDLE {
return ;
}
let averagenumber=dev_stat.average_number_data;
dev_stat.stat=WorkStat::WOKING;
dev_stat.percent=0;
dev_stat.workname="采集中".to_string();
drop(dev_stat); //释放锁
thread::spawn(move || {
let data=is11base::is11_get_data(shuttertime as i32);
let mut datasum:Vec<u32>=vec![0;2048];
for _i in 0..averagenumber {
let data=is11base::is11_get_data(shuttertime as i32);
for i in 0..2048 {
datasum[i]=datasum[i]+data[i] as u32;
}
let mut dev_stat=DEV_STAT.lock().unwrap();
let info=format!("采集中,{}%",_i as f32/averagenumber as f32*100 as f32*0.9);
dev_stat.workname=info;
dev_stat.percent=((_i+1) as f32/averagenumber as f32*100 as f32*0.9) as i32;
drop(dev_stat); //释放锁
}
let data=datasum.iter().map(|x| *x as f32/averagenumber as f32).collect::<Vec<f32>>();
let mut dev_stat=DEV_STAT.lock().unwrap();
let _lenth=data.len();
println!("data len={}",_lenth);
@ -137,8 +178,41 @@ pub fn collect(shuttertime:u32){
tempis11data.datatype=0;
let mut data1=DATA_IS11.lock().unwrap();
let darkdata=DARK_DATA.lock().unwrap();
*data1=tempis11data;
if removedark && dev_stat.hasdark {
for i in 0.._lenth {
data1.data[i]=data1.data[i]-darkdata.data[i];
}
}
if computeflat && dev_stat.hasflat {
let flatdata=FLAT_DATA.lock().unwrap();
for i in 0.._lenth {
let temp=flatdata.data[i]-darkdata.data[i];
if temp<=0.0 {
data1.data[i]=10000.0;
}else{
data1.data[i]=data1.data[i]/temp*10000.0;
}
if data1.data[i]<0.0 {
data1.data[i]=0.0;
}
if data1.data[i]>15000.0 {
data1.data[i]=15000.0;
}
// data1.data[i]=data1.data[i]/(flatdata.data[i]-darkdata.data[i])*10000.0;
}
}
dev_stat.stat=WorkStat::IDLE;
dev_stat.percent=100;
dev_stat.workname="finish".to_string();
});
@ -154,12 +228,27 @@ pub fn collcect_dark(shuttertime:u32)
if dev_stat.stat != WorkStat::IDLE {
return ;
}
let averagenumber=dev_stat.average_number_dark;
dev_stat.stat=WorkStat::WOKING;
dev_stat.workname="采集中".to_string();
dev_stat.percent=0;
dev_stat.workname="采集Dark中".to_string();
drop(dev_stat); //释放锁
thread::spawn(move || {
let mut datasum:Vec<u32>=vec![0;2048];
for _i in 0..averagenumber {
let data=is11base::is11_get_data(shuttertime as i32);
for i in 0..2048 {
datasum[i]=datasum[i]+data[i] as u32;
}
let mut dev_stat=DEV_STAT.lock().unwrap();
let info=format!("采集Dark中,{}%",_i as f32/averagenumber as f32*100 as f32*0.9);
dev_stat.workname=info;
dev_stat.percent=((_i+1) as f32/averagenumber as f32*100 as f32*0.9) as i32;
drop(dev_stat); //释放锁
}
let data=datasum.iter().map(|x| *x as f32/averagenumber as f32).collect::<Vec<f32>>();
let data=is11base::is11_get_data(shuttertime as i32);
let mut dev_stat=DEV_STAT.lock().unwrap();
let _lenth=data.len();
println!("data len={}",_lenth);
@ -182,7 +271,9 @@ pub fn collcect_dark(shuttertime:u32)
let mut data1=DARK_DATA.lock().unwrap();
*data1=tempis11data;
dev_stat.stat=WorkStat::IDLE;
dev_stat.percent=100;
dev_stat.workname="finish".to_string();
dev_stat.hasdark=true;
});
@ -194,12 +285,26 @@ pub fn collcect_flat(shuttertime:u32)
if dev_stat.stat != WorkStat::IDLE {
return ;
}
let averagenumber=dev_stat.average_number_flat;
dev_stat.stat=WorkStat::WOKING;
dev_stat.percent=0;
dev_stat.workname="采集中".to_string();
drop(dev_stat); //释放锁
thread::spawn(move || {
let mut datasum:Vec<u32>=vec![0;2048];
for _i in 0..averagenumber {
let data=is11base::is11_get_data(shuttertime as i32);
for i in 0..2048 {
datasum[i]=datasum[i]+data[i] as u32;
}
let mut dev_stat=DEV_STAT.lock().unwrap();
let info=format!("采集白板中,{}%",_i as f32/averagenumber as f32*100 as f32*0.9);
dev_stat.workname=info;
dev_stat.percent=((_i+1) as f32/averagenumber as f32*100 as f32*0.9) as i32;
drop(dev_stat); //释放锁
}
let data=datasum.iter().map(|x| *x as f32/averagenumber as f32).collect::<Vec<f32>>();
let data=is11base::is11_get_data(shuttertime as i32);
let mut dev_stat=DEV_STAT.lock().unwrap();
let _lenth=data.len();
println!("data len={}",_lenth);
@ -222,7 +327,9 @@ pub fn collcect_flat(shuttertime:u32)
let mut data1=FLAT_DATA.lock().unwrap();
*data1=tempis11data;
dev_stat.stat=WorkStat::IDLE;
dev_stat.percent=100;
dev_stat.workname="finish".to_string();
dev_stat.hasflat=true;
});
}
@ -230,4 +337,31 @@ pub fn collcect_flat(shuttertime:u32)
pub fn get_data()->IS11DataStruct{
let data1=DATA_IS11.lock().unwrap();
return data1.clone();
}
pub fn get_data_flat()->IS11DataStruct{
let data1=FLAT_DATA.lock().unwrap();
return data1.clone();
}
pub fn get_data_dark()->IS11DataStruct{
let data1=DARK_DATA.lock().unwrap();
return data1.clone();
}
pub fn get_is_computeref()->bool{
let dev_stat=DEV_STAT.lock().unwrap();
return dev_stat.computeflat;
}
pub fn set_shutter_time(shuttertime:u32){
let mut dev_stat=DEV_STAT.lock().unwrap();
dev_stat.shuttertime=shuttertime as i32;
dev_stat.hasdark=false;
dev_stat.hasflat=false;
}
pub fn set_average_number(arverage_number_data:u32,arverage_number_dark:u32,arverage_number_flat:u32){
let mut dev_stat=DEV_STAT.lock().unwrap();
dev_stat.average_number_data=arverage_number_data;
dev_stat.average_number_dark=arverage_number_dark;
dev_stat.average_number_flat=arverage_number_flat;
}