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

This commit is contained in:
xin
2025-03-31 13:53:01 +08:00
parent 62a5415e97
commit 8820b28ab8
206 changed files with 19735 additions and 572 deletions

View File

@ -7,6 +7,7 @@ import setWavelenth from "./components/menubox/SetWavelenth.vue";
import SetName from "./components/menubox/SetName.vue";
import SetWorkmode from "./components/menubox/SetWorkmode.vue";
import setCalibrate from "./components/menubox/SetCalibrate.vue";
import setWavelenthCoeff from "./components/menubox/SetWavelenthcoeff.vue";
import Greet from "./components/Greet.vue";
import EventBus from "./eventBus.js";
import {$ref} from "vue3-json-editor/dist/vue3-json-editor.cjs.js";
@ -67,6 +68,9 @@ export default {
this.$refs.Commancompent.GetSenSorInfo();
this.showModal();
}
if(command.name=="Weavelenth")
{
if (!this.isinAdvanceMode()) return;
@ -76,6 +80,16 @@ export default {
// this.$refs.Commancompent.GetSenSorInfo();
this.showModal();
}
if(command.name=="Weavelenthcoeff")
{
if (!this.isinAdvanceMode()) return;
this.modaltitle="设置波长";
this.modalcomponent=setWavelenthCoeff
await this.$nextTick();
// this.$refs.Commancompent.GetSenSorInfo();
this.showModal();
}
if (command.name=="Calibrate")
{
if (!this.isinAdvanceMode()) return;

View File

@ -1,7 +1,7 @@
import {invoke} from "@tauri-apps/api/tauri";
import CommanDeffine from "../serportdefine.js";
import EventBus from "../../eventBus.js";
let dev_info={};
async function Dev_Opt() {
var Command={command:"start_opt"};
let data={
@ -29,6 +29,11 @@ async function Dev_Opt() {
}
async function Set_Gain(gain)
{
//todo 增益设置
}
async function Get_Data_from_dev(Datatype) {
let drection=Datatype;
@ -67,6 +72,7 @@ async function Get_Data_from_dev(Datatype) {
{
message=await invoke("sendtoport_andgetreturn",data);
}
return message.data
}
@ -103,7 +109,7 @@ async function Get_Date_on_Derction(drection,shuttertimes,autoremovedark=false,
}
data.data.collect_times=avgnumber;
let message=await invoke("sendtoport_andgetreturn",data);
await EnsureNotWorking();
await EnsureNotWorking(Number(shuttertimes)/2);
//获取数据 UPDN
@ -136,6 +142,7 @@ async function Get_Date_on_Derction(drection,shuttertimes,autoremovedark=false,
{
message=await invoke("sendtoport_andgetreturn",data);
}
message.data.data.length=dev_info.bandnum;
return message.data
}
@ -163,7 +170,7 @@ async function Get_Dark_Data(drection,shuttertimes,avgnumber=1) {
data.data.collect_times=Number(avgnumber);
let message=await invoke("sendtoport_andgetreturn",data);
await EnsureNotWorking();
await EnsureNotWorking(Number(shuttertimes)/2);
//获取数据 UPDN
data = {
@ -220,7 +227,7 @@ async function Get_Flat_Data(drection,shuttertimes,avgnumber=1) {
data.data.collect_times=Number(avgnumber);
let message=await invoke("sendtoport_andgetreturn",data);
await EnsureNotWorking();
await EnsureNotWorking(Number(shuttertimes)/2);
@ -271,6 +278,7 @@ async function Get_Device_Info() {
return {error:"error"};
}
let json=JSON.parse(message.content);
dev_info=json;
return json;
}
@ -285,7 +293,7 @@ async function Get_Device_Info() {
async function EnsureNotWorking(){
async function EnsureNotWorking(waittime=1000){
let data={
data:{
command:"get_caiji_state"
@ -304,7 +312,7 @@ async function EnsureNotWorking(){
info:ret.info
}
EventBus.emit('setprogressbar',dataforprocess);
await delay(1000);
await delay(waittime);
message=await invoke("sendtoport_andgetreturn",data);
if (message.content=="g time no data retrun")
@ -325,13 +333,31 @@ function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function Set_Dev_Type(Devtype)
{
let message=await invoke("setdevtype",{devtype:Devtype});
return message;
}
async function Set_Weave_Coeff(specnumber,a0,a1,a2,a3){
var Command={};
Command.specnumber=Number(specnumber);
Command.a0=Number(a0);
Command.a1=Number(a1);
Command.a2=Number(a2);
Command.a3=Number(a3);
await invoke("set_weave_coeff",Command);
}
@ -343,7 +369,10 @@ export default {
Get_Device_Info,
Get_Dark_Data,
Get_Flat_Data,
Get_Data_from_dev
Get_Data_from_dev,
Set_Dev_Type,
Set_Gain,
Set_Weave_Coeff

View File

@ -5,11 +5,15 @@ import EventBus from "../eventBus.js";
import SerialportMethod from "./SerialPort/SerialportMethod.js";
import { tr } from "element-plus/es/locales.mjs";
import { type } from "vue3-json-editor/dist/vue3-json-editor.cjs.js";
let sensorinfo={};
export default {
async onDevchange(){
console.log(this.sensor_typeforset)
SerialportMethod.Set_Dev_Type(this.sensor_typeforset);
this.saveconfig();
},
async onshuttimechange(time){
@ -133,7 +137,7 @@ export default {
let that=this;
var i=0;
var aa=await invoke("getportnames");
//var aa=await invoke("getportnames");
invoke("getportnames").then((message) => {
message.forEach(function (port) {
console.log(port.path);
@ -295,6 +299,7 @@ export default {
let datatoshow=await SerialportMethod.Get_Date_on_Derction(drection,shuttertimes,this.autoremovedark,avgnumber);
if (this.dataprocessconfig.useSG)
{
datatoshow.data= await invoke("sg_smooth",{data:datatoshow.data,window:31,order:7});
@ -423,6 +428,7 @@ export default {
let coeffweave2=this.Devinfo.bochangxishu.a1;
let coeffweave3=this.Devinfo.bochangxishu.a2;
let coeffweave4=this.Devinfo.bochangxishu.a3;
let bandnum=this.Devinfo.bandnum;
//获取数据 UPDN
data = {
data: {
@ -441,10 +447,11 @@ export default {
this.dataup=datatoshowup;
let lenthofdataup=datatoshowup.data.length;
let dataforshowup=[];
for (var i=0;i<lenthofdataup;i++)
{
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
dataforshowup.push([weave,datatoshowup.data[2048-i-1]]);
dataforshowup.push([weave,datatoshowup.data[bandnum-i-1]]);
}
this.datainfoup.infolist=[];
this.datainfoup.hasrecive=true;
@ -482,7 +489,7 @@ export default {
for (var i=0;i<lenthofdatadown;i++)
{
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
dataforshowdown.push([weave,datatoshowdown.data[2048-i-1]]);
dataforshowdown.push([weave,datatoshowdown.data[bandnum-i-1]]);
}
this.datainfodown.hasrecive=true;
this.datainfodown.infolist=[];
@ -528,22 +535,29 @@ export default {
datatype:"json"
}
let that = this;
let message=await invoke("sendtoport_andgetreturn",data);
if (message.datatype==108)
{
return false;
}
let json=JSON.parse(message.content);
// let message=await invoke("sendtoport_andgetreturn",data);
// if (message.datatype==108)
// {
// return false;
// }
// let json=JSON.parse(message.content);
let json = await SerialportMethod.Get_Device_Info();
this.Devinfo=json;
if (typeof(this.Devinfo.sensor_type)==undefined)
let aaa=typeof(this.Devinfo.sensor_type);
if (aaa=="undefined")
{
this.Devinfo.sensor_type="IRIS-IS11";
this.Devinfo.fiber_type="Dual";
}
if (this.Devinfo.sensor_type=="JZ-IS11")
if (this.Devinfo.sensor_type=="IRIS-Sensor")
{
this.UPStr="DN"
EventBus.emit('setplotname',{up:"DN"});
if(typeof(this.Devinfo.fiber_type)=="undefined")
{
this.Devinfo.fiber_type="Single";
}
@ -558,9 +572,10 @@ export default {
let coeffweave2=this.Devinfo.bochangxishu.a1;
let coeffweave3=this.Devinfo.bochangxishu.a2;
let coeffweave4=this.Devinfo.bochangxishu.a3;
let BANDNUM=this.Devinfo.bandnum;
var wevaconfig={
min:coeffweave1*0*0*0+coeffweave2*0*0+coeffweave3*0+coeffweave4,
max:coeffweave1*2048*2048*2048+coeffweave2*2048*2048+coeffweave3*2048+coeffweave4
max:coeffweave1*(BANDNUM-1)*(BANDNUM-1)*(BANDNUM-1)+coeffweave2*(BANDNUM-1)*(BANDNUM-1)+coeffweave3*(BANDNUM-1)+coeffweave4
}
EventBus.emit('plotsetwavelength',wevaconfig);

View File

@ -141,7 +141,8 @@ export default {
<BNavItemDropdown text="设置" right>
<BDropdownItem @click="onmenuclick('Set','Workmode')">工作模式</BDropdownItem>
<BDropdownItem @click="onmenuclick('Set','DevInfo')">设备信息</BDropdownItem>
<BDropdownItem @click="onmenuclick('Set','Weavelenth')">波长系数</BDropdownItem>
<!-- <BDropdownItem @click="onmenuclick('Set','Weavelenth')">波长系数</BDropdownItem> -->
<BDropdownItem @click="onmenuclick('Set','Weavelenthcoeff')">波长设定</BDropdownItem>
<BDropdownItem @click="onmenuclick('Set','Calibrate')">定标</BDropdownItem>
</BNavItemDropdown>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,640 @@
<script>
import SerialportMethod from "../SerialPort/SerialportMethod.js";
import * as echarts from "echarts";
import EventBus from "../../eventBus.js";
import {dialog, fs} from "@tauri-apps/api";
import {invoke} from "@tauri-apps/api/tauri";
import SerilporDefine from "../serportdefine.js";
export default {
name: "SetCalibrate",
data(){
return {
shutter_time_up:1,
shutter_time_down:1,
option_up:{},
option_down:{},
option_lamp:{},
Devinfo:{
work_mode:0,
},
DataUP:{shutter_time:0,value_lable:0},
DataDown:{shutter_time:0,value_lable:0},
LampData:{value_lable:0},
caijicishu:[1,1],
upGain:{gain:[],shutter_time:0},
downGain:{gain:[],shutter_time:0},
}
},
mounted() {
//100ms 后执行
setTimeout(() => {
this.initChart();
}, 100);
// setTimeout(() => {
// this.readFileAndParse()
// }, 1000);
// this.initChart();
},
methods: {
updateCalifile(){
let aa=invoke("sendcalibratetodev",{
gain:this.upGain.gain,
shutter:this.upGain.shutter_time,
direction:SerilporDefine.Derection.Up
});
console.log(aa);
let aa1=invoke("sendcalibratetodev",{
gain:this.downGain.gain,
shutter:this.downGain.shutter_time,
direction:SerilporDefine.Derection.Down
});
console.log(aa1);
},
async readFileAndParse() {
var options= {
defaultPath: "../",
directory: false,
title: "请选择保存路径",
}
var pathofdir=await dialog.open(options);
try {
// 读取文件内容
const data = await fs.readTextFile(pathofdir);
// 解析文件内容
const lines = data.split('\n');
const valueLine = lines.shift(); // 读取第一行
const [key, value] = valueLine.split('='); // 解析第一行内容
const valueVar = parseFloat(value); // 将 value 转换为数字
const weaveValues = [];
const valueValues = [];
// 解析剩余行的内容
for (const line of lines) {
if (line.trim() !== '') { // 排除空行
const [weave, val] = line.split(' ').map(Number); // 将每一行的两个值转换为数字
weaveValues.push(weave*1000);
valueValues.push(val);
}
}
let coeffweave1=this.Devinfo.bochangxishu.a0;
let coeffweave2=this.Devinfo.bochangxishu.a1;
let coeffweave3=this.Devinfo.bochangxishu.a2;
let coeffweave4=this.Devinfo.bochangxishu.a3;
let lenthofdata=this.Devinfo.bandnum;
let weavetarget=[];
for (var i=0;i<lenthofdata;i++)
{
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
weavetarget.push(weave);
}
let valuetarget= await invoke("interpolate_spline_at_points",{
x:weaveValues,
y:valueValues,
xTarget:weavetarget
});
// console.log(valuetarget);
this.LampData={weave:weavetarget,value:valuetarget,value_lable:valueVar};
var dataforshow=[];
for (var i=0;i<lenthofdata;i++)
{
dataforshow.push([weavetarget[i],valuetarget[i]]);
}
var char_lamp=echarts.getInstanceByDom(this.$refs.chart_lamp);
this.option_lamp.series[0].data=dataforshow;
char_lamp.setOption(this.option_lamp);
} catch (err) {
console.error('Error reading file:', err);
}
},
async OPT_devic(dire) {
var shuttertime = await SerialportMethod.Dev_Opt();
if (dire == 0) this.shutter_time_up = shuttertime;
else this.shutter_time_down = shuttertime;
},
async initChart() {
this.Devinfo= await SerialportMethod.Get_Device_Info();
var coeff=[];
coeff[0]=this.Devinfo.bochangxishu.a0;
coeff[1]=this.Devinfo.bochangxishu.a1;
coeff[2]=this.Devinfo.bochangxishu.a2;
coeff[3]=this.Devinfo.bochangxishu.a3;
let bandnum=this.Devinfo.bandnum;
const chartDom_up = this.$refs.chart_up;
let chart_up = echarts.init(chartDom_up, null, {renderer: 'svg'});
let chart_down = echarts.init(this.$refs.chart_down, null, {renderer: 'svg'});
let chart_lamp = echarts.init(this.$refs.chart_lamp, null, {renderer: 'svg'});
chart_up.resize();
chart_down.resize();
chart_lamp.resize();
this.option_up = {
// ECharts 配置选项
xAxis: {
type: 'value',
boundaryGap: false,// 显示连续的刻度
min: 0,
max: 1100,
dataZoom: [
{
type: 'inside', // 内置数据区域缩放
start: 0, // 初始缩放范围的起始位置0%
end: 100 // 初始缩放范围的结束位置100%
}
],
triggerEvent: true
},
animation: false,
yAxis:[ {
type: 'value',
//min:0,
},
{
type: 'value',
//min:0,
}
],
tooltip: {
trigger: 'axis',
},
axisPointer: {
link: {xAxisIndex: 'all'},
label: {
backgroundColor: '#777'
}
},
grid: {
left: '5%',
right: '5%',
bottom: '10%',
top: '5%'
},
// visualMap: [
// {
// type: 'continuous',
// }
// ],
dataZoom: [
{
type: 'inside', // 内置数据区域缩放包括滚轮缩放
xAxisIndex: [0], // 对应 x
filterMode: 'none' // 不过滤数据
},
{
type: 'inside', // 内置数据区域缩放包括滚轮缩放
yAxisIndex: [0], // 对应 y
filterMode: 'none', // 不过滤数据
//width :15
}
],
legend: {
data: ['DN'], // 图例名称
show: true ,// 显示图例
//selectedMode: 'multiple', // 图例的选择模式默认开启图例开关可选singlemultiple
},
series: [
{
data: [[1, 150], [2, 230], [3, 224], [4, 218], [5, 135], [6, 147], [7, 260]], // 使用二维数组表示数据点的坐标
type: 'line',
name: 'DN',
symbol: 'none', // 不显示数据点
smooth: false, // 不使用平滑处理
// step: 'start' // 设置 step 类型的起始位置
}
// ,
// {
// data: [[1, 150], [2, 230], [3, 224], [4, 218], [5, 135], [6, 147], [7, 260]], // 使用二维数组表示数据点的坐标
// type: 'line',
// name: 'data',
// symbol: 'none', // 不显示数据点
// smooth: false, // 不使用平滑处理
// yAxisIndex: 1,
// // step: 'start' // 设置 step 类型的起始位置
// }
]
};
this.option_up.xAxis.max =coeff[3];
bandnum=bandnum-1;
this.option_up.xAxis.min = bandnum*bandnum*bandnum*coeff[0]+bandnum*bandnum*coeff[1]+bandnum*coeff[2]+coeff[3];
this.option_lamp = JSON.parse(JSON.stringify(this.option_up));
this.option_down = JSON.parse(JSON.stringify(this.option_up));
chart_up.setOption(this.option_up);
chart_down.setOption(this.option_down);
this.option_lamp.legend.data = ['Lamp'];
this.option_lamp.series[0].name = 'Lamp';
chart_lamp.setOption(this.option_lamp);
},
async Get_Data_direction(dire) {
let coeffweave1=this.Devinfo.bochangxishu.a0;
let coeffweave2=this.Devinfo.bochangxishu.a1;
let coeffweave3=this.Devinfo.bochangxishu.a2;
let coeffweave4=this.Devinfo.bochangxishu.a3;
if (dire == "UP") {
var data = await SerialportMethod.Get_Date_on_Derction(dire,this.shutter_time_up,true,Number(this.caijicishu[0]))
this.DataUP=data;
this.DataUP.value_lable=0
//获取波长系数
var lenthofdata=data.data.length;
let dataforshow=[];
for (var i=0;i<lenthofdata;i++)
{
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
dataforshow.push([weave,data.data[i]]);
}
this.option_up.series[0].data = dataforshow;
var chart_up = echarts.getInstanceByDom(this.$refs.chart_up);
chart_up.setOption(this.option_up);
// console.log(dataforshow);
}else if(dire=="DOWN")
{
var data = await SerialportMethod.Get_Date_on_Derction(dire,this.shutter_time_down,true,Number(this.caijicishu[0]))
this.DataDown=data;
this.DataDown.value_lable=0
//获取波长系数
var lenthofdata=data.data.length;
let dataforshow=[];
for (var i=0;i<lenthofdata;i++)
{
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
dataforshow.push([weave,data.data[i]]);
}
this.option_down.series[0].data = dataforshow;
var chart_down = echarts.getInstanceByDom(this.$refs.chart_down);
chart_down.setOption(this.option_down);
// console.log(dataforshow);
}
this.computCalibrate()
},
async computCalibrate(){
if(this.upGain.shutter_time!=0)
{
let coeffweave1=this.Devinfo.bochangxishu.a0;
let coeffweave2=this.Devinfo.bochangxishu.a1;
let coeffweave3=this.Devinfo.bochangxishu.a2;
let coeffweave4=this.Devinfo.bochangxishu.a3;
var uprandiance=[];
if(this.DataUP.data.length!=0)
{
for (var i=0;i<this.DataUP.data.length;i++)
{
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
var data=this.DataUP.data[i]*this.upGain.gain[i]*this.upGain.shutter_time/this.DataUP.shutter_time;
uprandiance.push([weave,data]);
}
var series=
{
data: [[1, 150], [2, 230], [3, 224], [4, 218], [5, 135], [6, 147], [7, 260]], // 使用二维数组表示数据点的坐标
type: 'line',
name: 'Radiance',
symbol: 'none', // 不显示数据点
smooth: false, // 不使用平滑处理
yAxisIndex: 1,
// step: 'start' // 设置 step 类型的起始位置
}
series.data=uprandiance;
if(this.option_up.series.length==1)
{
this.option_up.series.push(series);
this.option_up.legend.data.push('Radiance');
}else{
this.option_up.series[1]=series;
}
var chart_up = echarts.getInstanceByDom(this.$refs.chart_up);
chart_up.setOption(this.option_up);
//this.option_up.series
}
}
if(this.downGain.shutter_time!=0)
{
let coeffweave1=this.Devinfo.bochangxishu.a0;
let coeffweave2=this.Devinfo.bochangxishu.a1;
let coeffweave3=this.Devinfo.bochangxishu.a2;
let coeffweave4=this.Devinfo.bochangxishu.a3;
var downrandiance=[];
if(this.DataDown.data.length!=0)
{
for (var i=0;i<this.DataDown.data.length;i++)
{
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
var data=this.DataDown.data[i]*this.downGain.gain[i]*this.upGain.shutter_time/this.DataDown.shutter_time;
downrandiance.push([weave,data]);
}
var series=
{
data: [[1, 150], [2, 230], [3, 224], [4, 218], [5, 135], [6, 147], [7, 260]], // 使用二维数组表示数据点的坐标
type: 'line',
name: 'Radiance',
symbol: 'none', // 不显示数据点
smooth: false, // 不使用平滑处理
yAxisIndex: 1,
// step: 'start' // 设置 step 类型的起始位置
}
series.data=downrandiance;
if(this.option_down.series.length==1)
{
this.option_down.series.push(series);
this.option_down.legend.data.push('Radiance');
}else{
this.option_down.series[1]=series;
}
var chart_down = echarts.getInstanceByDom(this.$refs.chart_down);
chart_down.setOption(this.option_down);
//this.option_up.series
}
}
},
async SaveGaindata(){
if(this.upGain.shutter_time!=0)
{
console.log(this.upGain.gain);
let data={
gain:this.upGain.gain,
shutter:this.upGain.shutter_time,
direction:true,
filepath:"./calibratefile/upgain.bin"
}
await invoke("savecalibratefile",data);
// await invoke("sendcalibratetodev",{
// gain:this.upGain.gain,
// shutter:this.upGain.shutter_time,
// direction:true
// });
}
if(this.downGain.shutter_time!=0)
{
await invoke("savecalibratefile",{
gain:this.downGain.gain,
shutter:this.downGain.shutter_time,
direction:true,
filepath:"./calibratefile/downgain.bin"
});
}
},
async Start_Comput_Coeff(){
let lampData=this.LampData.value;
let lampLabel=this.LampData.value_lable;
let UpData=this.DataUP.data;
let UpLabel=this.DataUP.value_lable;
let UpShutter=this.DataUP.shutter_time;
let DownData=this.DataDown.data;
let DownLabel=this.DataDown.value_lable;
let DownShutter=this.DataDown.shutter_time;
if (lampLabel==0)
{
alert("请先导入灯数据");
return;
}
if (DownShutter==0||UpShutter==0)
{
alert("请先采集数据");
return;
}
if (UpLabel==0||DownLabel==0)
{
alert("请填写对应的Value");
return;
}
let gainofup=[];
let gainofdown=[];
for (var i=0;i<UpData.length;i++)
{
let upDn=UpData[i];
let downDn=DownData[i];
let lampup=lampData[i]*UpLabel/lampLabel;
let lampdown=lampData[i]*DownLabel/lampLabel;
let gainup=lampup/upDn;
//判断upDN是否为0 如果是0 则gainup为前一个值 如果是第一个 则为1
if (upDn==0)
{
if (i==0)
{
gainup=1;
}else{
gainup=gainofup[i-1];
}
}
let gaindown=lampdown/downDn;
//判断downDn是否为0 如果是0 则gainup为前一个值 如果是第一个 则为1
if (downDn==0)
{
if (i==0)
{
gaindown=1;
}else{
gaindown=gainofdown[i-1];
}
}
gainofup.push(gainup);
gainofdown.push(gaindown);
}
this.upGain.gain=gainofup;
this.upGain.shutter_time=UpShutter;
this.downGain.gain=gainofdown;
this.downGain.shutter_time=DownShutter;
this.computCalibrate()
this.SaveGaindata();
}
}
}
</script>
<template>
<div class="container" style="width: 100%;height: 100%;max-width:100%;margin: 0px;padding: 0px">
<div class="row linebox">
<!-- 按钮区域-->
<div class="col-2 buttonme">
<b-button variant="secondary" pill class="siglebt" @click="readFileAndParse()">导入灯数据</b-button>
</div>
<!-- ///中间区域-->
<div class="col-9 centerme">
<div class="chart-container" id="charmian_lamp" ref="chart_lamp" ></div>
</div>
<!-- ///尾部区域-->
<div class="col-1 tailme">
<b-form-floating-label style="margin: auto" v-show="LampData.value_lable!==0">value:{{LampData.value_lable}}</b-form-floating-label>
</div>
</div>
<!-- 中建行 -->
<div class="row linebox">
<!-- 按钮区域-->
<div class="col-2 buttonme" style="padding: 0px" size="sm">
<b-input-group append="ms">
<b-input-group-prepend>
<b-button variant="secondary" style="margin: auto" @click="OPT_devic(0)">OPT</b-button>
</b-input-group-prepend>
<b-form-input v-model="shutter_time_up"></b-form-input>
</b-input-group>
<b-input-group append="次">
<b-input-group-prepend>
<b-button variant="secondary" style="margin: auto" @click="Get_Data_direction('UP')">采集向上数据</b-button>
</b-input-group-prepend>
<b-form-input v-model="caijicishu[0]"></b-form-input>
</b-input-group>
</div>
<!-- ///中间区域-->
<div class="col-9 centerme">
<div class="chart-container" id="charmian_up" ref="chart_up" ></div>
</div>
<!-- ///尾部区域-->
<div class="col-1 tailme">
<b-form-floating-label style="margin: auto" v-show="DataUP.shutter_time!==0">Shutter_Time:{{DataUP.shutter_time}}</b-form-floating-label>
<b-input-group prepend="Lamp_Value" size="sm" v-show="DataUP.shutter_time!==0">
</b-input-group>
<b-form-input v-model="DataUP.value_lable"></b-form-input>
</div>
</div>
<!-- 向下 -->
<div class="row linebox">
<!-- 按钮区域-->
<div class="col-2 buttonme">
<b-input-group append="ms">
<b-input-group-prepend>
<b-button variant="secondary" style="margin: auto" @click="OPT_devic(1)"> OPT</b-button>
</b-input-group-prepend>
<b-form-input v-model="shutter_time_down"></b-form-input>
</b-input-group>
<b-input-group append="次">
<b-input-group-prepend>
<b-button variant="secondary" @click="Get_Data_direction('DOWN')">采集向下数据</b-button>
</b-input-group-prepend>
<b-form-input v-model="caijicishu[1]"></b-form-input>
</b-input-group>
</div>
<!-- ///中间区域-->
<div class="col-9 centerme">
<div class="chart-container" id="charmian_up" ref="chart_down" ></div>
</div>
<!-- ///尾部区域-->
<div class="col-1 tailme">
<b-form-floating-label style="margin: auto" v-show="DataDown.shutter_time!==0">Shutter_Time:{{DataDown.shutter_time}}</b-form-floating-label>
<b-input-group prepend="Lamp_Value" size="sm" v-show="DataDown.shutter_time!==0">
</b-input-group>
<b-form-input v-model="DataDown.value_lable"></b-form-input>
</div>
</div>
</div>
<p style="position:absolute ;bottom: 10px;width: 100%;height: 30px" >
<b-button @click="updataName" style="position:absolute;left: 20px ">导入已有文件</b-button>
<b-button @click="Start_Comput_Coeff()" style="position:absolute; left: 150px ">计算</b-button>
<b style="position:absolute; left: 250px;border: #0f0f0f 1px solid; margin: auto">adsfsdsadfsdf</b>
<b-button @click="updateCalifile" style="position:absolute;right: 20px ">设置</b-button>
</p>
</template>
<style scoped>
.linebox{
width: 100%;
height: 30%;
margin: 0px;
padding: 0px;
border-bottom:1px solid #d2dede;
max-width: 100%;
}
.buttonme{
background-color: #f8f9fa;
padding-top: 0px;
padding-bottom: 0px;
padding: 0px;
border-right: 1px solid #d2dede;
align-content: center;
}
.centerme{
padding-top: 0px;
padding-bottom: 0px;
padding: 0px;
border-right: 1px solid #d2dede;
}
.tailme{
background-color: #f8f9fa;
margin: auto;
}
.chart-container{
width: 100%;
height:100%;
}
</style>

View File

@ -123,9 +123,10 @@ export default {
}
]
};
let bandnum=this.Devinfo.bandnum-1;
this.option.xAxis.max =coeff[3];
this.option.xAxis.min = 2048*2048*2048*coeff[0]+2048*2048*coeff[1]+2048*coeff[2]+coeff[3];
this.option.xAxis.min = bandnum*bandnum*bandnum*coeff[0]+bandnum*bandnum*coeff[1]+bandnum*coeff[2]+coeff[3];
chart.setOption(this.option);
chart.dispatchAction({

View File

@ -0,0 +1,881 @@
<script>
import { invoke } from "@tauri-apps/api/tauri";
import * as echarts from "echarts";
import SensorMethod from "../SerialPort/SerialportMethod.js";
import { Checkbox } from "@arco-design/web-vue";
export default {
name: "SetWavelenth",
data() {
return {
option: {},
optiondown: {},
Devinfo: {
work_mode: 0,
bochangxishu: {
a0: 0,
a1: 0,
a2: 0,
a3: 0
},
bochangxishu2: {
a0: 0,
a1: 0,
a2: 0,
a3: 0
},
fiber_type: "Dual"
},
WeavePeaksDeffine: [
0,
253.652,
296.728,
302.150,
313.155,
334.148,
365.015,
404.656,
407.783,
435.833,
546.074,
576.960,
579.066,
696.543,
706.722,
714.704,
727.294,
738.393,
750.387,
763.511,
772.376,
794.818,
800.616,
811.531,
826.452,
842.465,
852.144,
866.794,
912.297,
922.450
],
shutter_time_up: 1,
shutter_time_down: 1,
sensor_gain_up: 0,
sensor_gain_down: 0,
Data: {},
DataDown: {},
Peaks: [],
PeaksDown: []
}
},
async mounted() {
let that = this;
//await
await setTimeout(function () {
that.GetSenSorInfo();
// 这里是你要在100毫秒后执行的代码
}, 100);
await setTimeout(function () {
that.GetSenSorInfo();
// 这里是你要在100毫秒后执行的代码
that.initChart();
}, 1000);
},
unmounted() {
window.removeEventListener('resize', this.echartresize);
},
methods: {
async GetSenSorInfo() {
// var Command = { command: "get_sensor_info" };
// let data = {
// data: Command,
// datatype: "json"
// }
// let message = await invoke("sendtoport_andgetreturn", data);
this.Devinfo = await SensorMethod.Get_Device_Info();
this.sensor_gain_down = this.Devinfo.sensor_gain_down;
if (typeof (this.Devinfo.fiber_type) == "string") {
this.fiber_type = this.Devinfo.fiber_type;
}
if (this.Devinfo.fiber_type == "Single") {
this.shutter_time_up = this.Devinfo.shutter_time;
} else if (this.Devinfo.fiber_type == "Dual") {
this.sensor_gain_up = this.Devinfo.sensor_gain_up;
this.shutter_time_down = this.Devinfo.shutter_time_down;
this.shutter_time_up = this.Devinfo.shutter_time_up;
}
},
async OPT_devic() {
var shuttertime = await SensorMethod.Dev_Opt();
this.shutter_time_up = shuttertime;
},
async initChart() {
await this.$nextTick();
const chartDom = this.$refs.chart_weavelenth;
// chartDom.style.width = '100%';
// chartDom.style.height = '100%';
let height = chartDom.offsetHeight;
let width = chartDom.clientWidth;
let chart = echarts.init(chartDom);
var coeff = [];
coeff[0] = this.Devinfo.bochangxishu.a0;
coeff[1] = this.Devinfo.bochangxishu.a1;
coeff[2] = this.Devinfo.bochangxishu.a2;
coeff[3] = this.Devinfo.bochangxishu.a3;
this.option = {
// ECharts 配置选项
xAxis: {
type: 'value',
boundaryGap: false,// 显示连续的刻度
min: 0,
max: 510,
dataZoom: [
{
type: 'inside', // 内置数据区域缩放
start: 0, // 初始缩放范围的起始位置0%
end: 100 // 初始缩放范围的结束位置100%
}
]
},
animation: false,
yAxis: {
type: 'value',
//min:0,
},
grid: {
left: '5%',
right: '5%',
bottom: '10%',
top: '5%'
},
dataZoom: [
{
type: 'inside', // 内置数据区域缩放,包括滚轮缩放
xAxisIndex: [0], // 对应 x 轴
filterMode: 'none' // 不过滤数据
},
{
type: 'inside', // 内置数据区域缩放,包括滚轮缩放
yAxisIndex: [0], // 对应 y 轴
filterMode: 'none' // 不过滤数据
}
],
// legend: {
// data: ['曲线'], // 图例名称
// show: true ,// 显示图例
// //selectedMode: 'multiple', // 图例的选择模式。默认开启图例开关可选singlemultiple
// },
series: [
{
data: [[1, 150], [2, 230], [3, 224], [4, 218], [5, 135], [6, 147], [7, 260]], // 使用二维数组表示数据点的坐标
type: 'line',
symbol: 'none', // 不显示数据点
smooth: false, // 不使用平滑处理
//step: 'start' // 设置 step 类型的起始位置
}
]
};
this.option.xAxis.max = coeff[3];
let bandsum = this.Devinfo.bandsum;
this.option.xAxis.min = bandsum * bandsum * bandsum * coeff[0] + bandsum * bandsum * coeff[1] + bandsum * coeff[2] + coeff[3];
if (this.option.xAxis.max < this.option.xAxis.min) {
let temp = this.option.xAxis.min;
this.option.xAxis.min = this.option.xAxis.max;
this.option.xAxis.max = temp;
}
chart.setOption(this.option);
chart.dispatchAction({
type: 'resize',
// 可以指定宽和高,如果不指定则默认取容器的大小
// width: '新的宽度',
// height: '新的高度'
});
if (this.fiber_type == "Dual") {
this.optiondown = JSON.parse(JSON.stringify(this.option));
coeff[0] = this.Devinfo.bochangxishu2.a0;
coeff[1] = this.Devinfo.bochangxishu2.a1;
coeff[2] = this.Devinfo.bochangxishu2.a2;
coeff[3] = this.Devinfo.bochangxishu2.a3;
this.optiondown.xAxis.max = coeff[3];
this.optiondown.xAxis.min = bandsum * bandsum * bandsum * coeff[0] + bandsum * bandsum * coeff[1] + bandsum * coeff[2] + coeff[3];
if (this.optiondown.xAxis.max < this.optiondown.xAxis.min) {
let temp = this.optiondown.xAxis.min;
this.optiondown.xAxis.min = this.optiondown.xAxis.max;
this.optiondown.xAxis.max = temp;
}
let chart_down = echarts.init(this.$refs.chart_weavelenth_down);
chart_down.setOption(this.optiondown);
chart_down.dispatchAction({
type: 'resize',
// 可以指定宽和高,如果不指定则默认取容器的大小
// width: '新的宽度',
// height: '新的高度'
});
}
let that = this;
chart.resize();
window.addEventListener('resize', function () {
that.echartresize();
});
},
echartresize() {
console.log("resize")
const chartDom = this.$refs.chart;
let chart_up = echarts.getInstanceByDom(this.$refs.chart_weavelenth);
let chart_down = echarts.getInstanceByDom(this.$refs.chart_weavelenth_down);
chart_up.resize();
chart_down.resize();
},
async findpeak(specindex) {
if (specindex == 0) {
let dataforpeak = this.Data.data;
var peaks = await invoke("find_peek", { data: dataforpeak, minheigh: 5000 });
console.log(peaks);
let peaksforshow = [];
let coeffweave1 = this.Devinfo.bochangxishu.a0;
let coeffweave2 = this.Devinfo.bochangxishu.a1;
let coeffweave3 = this.Devinfo.bochangxishu.a2;
let coeffweave4 = this.Devinfo.bochangxishu.a3;
this.Peaks = [];
let peakformatch = [];
peaks.forEach(element => {
var weave = coeffweave1 * element[0] * element[0] * element[0] + coeffweave2 * element[0] * element[0] + coeffweave3 * element[0] + coeffweave4;
peaksforshow.push([weave, element[1], element[0]]);
this.Peaks.push([weave, element[1], element[0], false, 0])
peakformatch.push(element[0]);
});
peakformatch.sort(function (a, b) {
return a - b;
});
let weaveformatch = this.WeavePeaksDeffine.slice(1, this.WeavePeaksDeffine.length);
this.matchSpectrumPeaks(peakformatch, weaveformatch, { minMatchRatio: 0.8,
maxGap: 1})
//peaks 按照第一列重新排序
this.Peaks.sort(function (a, b) {
return a[2] - b[2];
});
let chartpeak =
{
data: peaksforshow, // 使用二维数组表示数据点的坐标
type: 'scatter',
label: {
show: true,
position: 'top',
formatter: function (params) {
return params.value[2]
}
}
}
if (this.option.series.length < 2) {
this.option.series.push(chartpeak);
}
else {
this.option.series[1] = chartpeak;
}
var chart_up = echarts.getInstanceByDom(this.$refs.chart_weavelenth);
chart_up.setOption(this.option);
}
else if (specindex == 1) {
let dataforpeak = this.DataDown.data;
var peaks = await invoke("find_peek", { data: dataforpeak, minheigh: 500 });
console.log(peaks);
let peaksforshow = [];
let coeffweave1 = this.Devinfo.bochangxishu2.a0;
let coeffweave2 = this.Devinfo.bochangxishu2.a1;
let coeffweave3 = this.Devinfo.bochangxishu2.a2;
let coeffweave4 = this.Devinfo.bochangxishu2.a3;
this.PeaksDown = [];
peaks.forEach(element => {
var weave = coeffweave1 * element[0] * element[0] * element[0] + coeffweave2 * element[0] * element[0] + coeffweave3 * element[0] + coeffweave4;
peaksforshow.push([weave, element[1], element[0]]);
this.PeaksDown.push([weave, element[1], element[0], false, 0])
});
this.PeaksDown.sort(function (a, b) {
return a[2] - b[2];
});
let chartpeak =
{
data: peaksforshow, // 使用二维数组表示数据点的坐标
type: 'scatter',
label: {
show: true,
position: 'top',
formatter: function (params) {
return params.value[2]
}
}
}
if (this.optiondown.series.length < 2) {
this.optiondown.series.push(chartpeak);
}
else {
this.optiondown.series[1] = chartpeak;
}
var chart_up = echarts.getInstanceByDom(this.$refs.chart_weavelenth_down);
chart_up.setOption(this.optiondown);
}
},
ReplotWeaveInfo(spectralnumber) {
let orgoption = {};
let Peaksnow = [];
if (spectralnumber == 0) {
orgoption = this.option;
Peaksnow = this.Peaks;
} else if (spectralnumber == 1) {
orgoption = this.optiondown;
Peaksnow = this.PeaksDown;
}
if (orgoption.series.length < 2) {
return;
}
let peaksforshow = [];
Peaksnow.forEach(element => {
if (element[3] == true || element[4] != 0) {
var weave = element[0];
if (element[1] > 3500) {
peaksforshow.push([weave, element[1] - 500, element[4]]);
} else {
peaksforshow.push([weave, element[1] + 500, element[4]]);
}
}
});
let chartpeak =
{
data: peaksforshow, // 使用二维数组表示数据点的坐标
type: 'scatter',
label: {
show: true,
position: 'top',
formatter: function (params) {
return "波长:" + params.value[2]
}
}
}
if (orgoption.series.length < 3) {
orgoption.series.push(chartpeak);
} else {
orgoption.series[2] = chartpeak;
}
if (spectralnumber == 0) {
var chart_up = echarts.getInstanceByDom(this.$refs.chart_weavelenth);
chart_up.setOption(orgoption);
} else if (spectralnumber == 1) {
var chart_up = echarts.getInstanceByDom(this.$refs.chart_weavelenth_down);
chart_up.setOption(orgoption);
}
},
async GetDataDrection(specindex) {
if (specindex == 0) {
var ret = await SensorMethod.Dev_Opt(80, 2);
this.shutter_time_up=ret;
// this.shutter_time_up = ret.shuttertimes;
// this.sensor_gain_up = ret.gain;
this.GetOneData();
}
else if (specindex == 1) {
var ret = await SensorMethod.Dev_Opt_Two(80, 3);
this.shutter_time_down = ret.shuttertimes;
this.sensor_gain_down = ret.gain;
this.GetOneDatadown();
}
},
async GetOneDatadown() {
let coeffweave1 = this.Devinfo.bochangxishu2.a0;
let coeffweave2 = this.Devinfo.bochangxishu2.a1;
let coeffweave3 = this.Devinfo.bochangxishu2.a2;
let coeffweave4 = this.Devinfo.bochangxishu2.a3;
await SensorMethod.Set_Gain(this.sensor_gain_down);
// await SensorMethod.Get_Date_on_Derction("UP", this.shutter_time_down, false, 1)
var data = await SensorMethod.Get_Date_on_Derction("DOWN", this.shutter_time_down, false, 1)
this.DataDown = data; //获取波长系数
var lenthofdata = data.data.length;
let dataforshow = [];
for (var i = 0; i < lenthofdata; i++) {
var weave = coeffweave1 * i * i * i + coeffweave2 * i * i + coeffweave3 * i + coeffweave4;
dataforshow.push([weave, data.data[i]]);
}
this.optiondown.series[0].data = dataforshow;
var chart_up = echarts.getInstanceByDom(this.$refs.chart_weavelenth_down);
chart_up.setOption(this.optiondown);
// console.log(dataforshow);
},
async GetOneData() {
let coeffweave1 = this.Devinfo.bochangxishu.a0;
let coeffweave2 = this.Devinfo.bochangxishu.a1;
let coeffweave3 = this.Devinfo.bochangxishu.a2;
let coeffweave4 = this.Devinfo.bochangxishu.a3;
await SensorMethod.Set_Gain(this.sensor_gain_up);
var data = await SensorMethod.Get_Date_on_Derction("UP", this.shutter_time_up, false, 1)
this.Data = data; //获取波长系数
var lenthofdata = data.data.length;
let dataforshow = [];
for (var i = 0; i < lenthofdata; i++) {
var weave = coeffweave1 * i * i * i + coeffweave2 * i * i + coeffweave3 * i + coeffweave4;
dataforshow.push([weave, data.data[i]]);
}
this.option.series[0].data = dataforshow;
var chart_up = echarts.getInstanceByDom(this.$refs.chart_weavelenth);
chart_up.setOption(this.option);
// this.GetOneDatadown()
// console.log(dataforshow);
},
async CompuWeaveLenth(spectralnumber) {
let orgdata = [];
if (spectralnumber == 0) {
orgdata = this.Peaks;
} else if (spectralnumber == 1) {
orgdata = this.PeaksDown;
}
let Xdata = [];
let Ydata = [];
orgdata.forEach(element => {
if (element[3] == true) {
Xdata.push(Number(element[2]));
Ydata.push(Number(element[4]));
}
});
if (Xdata.length < 4) {
alert("至少选择4个峰");
return;
}
let result = await invoke("compute_weave_coeff", { x: Xdata, y: Ydata });
if (spectralnumber == 0) {
this.Devinfo.bochangxishu.a0 = result[3];
this.Devinfo.bochangxishu.a1 = result[2];
this.Devinfo.bochangxishu.a2 = result[1];
this.Devinfo.bochangxishu.a3 = result[0];
let coeff = [];
coeff[0] = this.Devinfo.bochangxishu.a0;
coeff[1] = this.Devinfo.bochangxishu.a1;
coeff[2] = this.Devinfo.bochangxishu.a2;
coeff[3] = this.Devinfo.bochangxishu.a3;
this.option.xAxis.max = coeff[3];
let bandsum = this.Devinfo.bandsum;
this.option.xAxis.min = bandsum * bandsum * bandsum * coeff[0] + bandsum * bandsum * coeff[1] + bandsum * coeff[2] + coeff[3];
if (this.option.xAxis.max < this.option.xAxis.min) {
let temp = this.option.xAxis.min;
this.option.xAxis.min = this.option.xAxis.max;
this.option.xAxis.max = temp;
}
var chart_up = echarts.getInstanceByDom(this.$refs.chart_weavelenth);
chart_up.setOption(this.option);
} else if (spectralnumber == 1) {
this.Devinfo.bochangxishu2.a0 = result[3];
this.Devinfo.bochangxishu2.a1 = result[2];
this.Devinfo.bochangxishu2.a2 = result[1];
this.Devinfo.bochangxishu2.a3 = result[0];
let coeff = [];
coeff[0] = this.Devinfo.bochangxishu2.a0;
coeff[1] = this.Devinfo.bochangxishu2.a1;
coeff[2] = this.Devinfo.bochangxishu2.a2;
coeff[3] = this.Devinfo.bochangxishu2.a3;
this.optiondown.xAxis.max = coeff[3];
let bandsum = this.Devinfo.bandsum;
this.optiondown.xAxis.min = bandsum * bandsum * bandsum * coeff[0] + bandsum * bandsum * coeff[1] + bandsum * coeff[2] + coeff[3];
if (this.optiondown.xAxis.max < this.optiondown.xAxis.min) {
let temp = this.optiondown.xAxis.min;
this.optiondown.xAxis.min = this.optiondown.xAxis.max;
this.optiondown.xAxis.max = temp;
}
var chart_up = echarts.getInstanceByDom(this.$refs.chart_weavelenth_down);
chart_up.setOption(this.optiondown);
}
},
async Set_Weave_Coeff() {
SensorMethod.Set_Weave_Coeff(0, this.Devinfo.bochangxishu.a0, this.Devinfo.bochangxishu.a1, this.Devinfo.bochangxishu.a2, this.Devinfo.bochangxishu.a3);
if (this.Devinfo.fiber_type == "Dual")
SensorMethod.Set_Weave_Coeff(1, this.Devinfo.bochangxishu2.a0, this.Devinfo.bochangxishu2.a1, this.Devinfo.bochangxishu2.a2, this.Devinfo.bochangxishu2.a3);
},
/**
* 光谱峰自动匹配函数
* @param {number[]} detectedPeaks - 检测到的峰位置数组(单位:像素或通道号)
* @param {number[]} referencePeaks - 参考峰波长数组单位nm
* @param {Object} [options] - 可选参数
* @param {number} [options.tolerance=5] - 初始匹配容差(像素)
* @param {number} [options.minMatches=3] - 要求的最小匹配数
* @returns {number[]} 匹配成功的检测峰索引数组按referencePeaks顺序对应
*/
async matchSpectrumPeaks(detected, reference, options = {}) {
console.log("detectedPeaks");
console.log(detected);
console.log("referencePeaks");
console.log(reference);
const {
ratioTolerance = 0.15, // 比例允许误差±15%
minPeakDistance = 5, // 忽略间距过小的峰
debug = true
} = options;
// 1. 生成参考峰的所有可能三点组合
const refTriplets = [];
for (let i = 0; i < reference.length - 2; i++) {
const a = reference[i], b = reference[i+1], c = reference[i+2];
const ratio = (c - b) / (b - a);
refTriplets.push({ a, b, c, ratio, index: i });
if (debug) console.log(`参考组合#${i}: [${a},${b},${c}] 比例=${ratio.toFixed(3)}`);
}
// 2. 预处理检测峰(合并过近的峰)
const filteredPeaks = detected.filter((p, i) =>
i === 0 || p - detected[i-1] > minPeakDistance
);
// 3. 在检测峰中寻找最佳匹配
let bestMatch = null;
for (let i = 0; i < filteredPeaks.length - 2; i++) {
const da = filteredPeaks[i], db = filteredPeaks[i+1], dc = filteredPeaks[i+2];
const detRatio = (dc - db) / (db - da);
// 与所有参考组合对比
for (const ref of refTriplets) {
const ratioError = Math.abs(detRatio - ref.ratio) / ref.ratio;
if (ratioError < ratioTolerance) {
const scale = (db - da) / (ref.b - ref.a); // 计算缩放因子
const confidence = 1 - ratioError;
if (!bestMatch || confidence > bestMatch.confidence) {
bestMatch = {
refTriplet: [ref.a, ref.b, ref.c],
detTriplet: [da, db, dc],
scale,
ratioError,
confidence,
refIndex: ref.index,
detIndex: i
};
}
}
}
}
// 4. 结果验证与扩展
if (bestMatch) {
if (debug) {
console.log(`最佳匹配:
参考峰[${bestMatch.refTriplet.join(',')}] 比例=${((bestMatch.refTriplet[2]-bestMatch.refTriplet[1])/(bestMatch.refTriplet[1]-bestMatch.refTriplet[0])).toFixed(3)}
检测峰[${bestMatch.detTriplet.join(',')}] 比例=${((bestMatch.detTriplet[2]-bestMatch.detTriplet[1])/(bestMatch.detTriplet[1]-bestMatch.detTriplet[0])).toFixed(3)}
缩放因子=${bestMatch.scale.toFixed(2)} 置信度=${(bestMatch.confidence*100).toFixed(1)}%`);
}
// 扩展验证其他峰
const predictedAll = reference.map(w =>
bestMatch.detTriplet[0] + (w - bestMatch.refTriplet[0]) * bestMatch.scale
);
return { ...bestMatch, predictedAll };
}
return null;
}
}
}
</script>
<template>
<div class="weavecontainer" style="width:100%;height: 100% !important;margin: 0px;padding: 20px">
<div class="row" style="height: 100%">
<div class="col-2" style="height: 100%;">
<BCard header="sensor 1" header-text-variant="white" header-tag="header" header-bg-variant="dark"
style="max-width: 20rem">
<BCardText><b-input-group class="my-1">
<BInputGroupPrepend is-text class="myinputprepend">a0</BInputGroupPrepend>
<b-form-input type="number" step="0.00000000000001" v-model="Devinfo.bochangxishu.a0"></b-form-input>
</b-input-group>
<b-input-group class="my-1">
<BInputGroupPrepend is-text class="myinputprepend">a1</BInputGroupPrepend>
<b-form-input type="number" step="0.00000000000001" v-model="Devinfo.bochangxishu.a1"></b-form-input>
</b-input-group>
<b-input-group class="my-1">
<BInputGroupPrepend is-text class="myinputprepend">a2</BInputGroupPrepend>
<b-form-input type="number" step="0.00000000000001" v-model="Devinfo.bochangxishu.a2"></b-form-input>
</b-input-group>
<b-input-group class="my-1">
<BInputGroupPrepend is-text class="myinputprepend">a3</BInputGroupPrepend>
<b-form-input type="number" step="0.00000000000001" v-model="Devinfo.bochangxishu.a3"></b-form-input>
</b-input-group>
</BCardText>
</BCard>
<BCard header="sensor 2" header-text-variant="white" header-tag="header" header-bg-variant="dark"
style="max-width: 20rem" v-if="fiber_type == 'Dual'">
<BCardText><b-input-group class="my-1">
<BInputGroupPrepend is-text class="myinputprepend">a0</BInputGroupPrepend>
<b-form-input type="number" step="0.00000000000001" v-model="Devinfo.bochangxishu2.a0"></b-form-input>
</b-input-group>
<b-input-group class="my-1">
<BInputGroupPrepend is-text class="myinputprepend">a1</BInputGroupPrepend>
<b-form-input type="number" step="0.00000000000001" v-model="Devinfo.bochangxishu2.a1"></b-form-input>
</b-input-group>
<b-input-group class="my-1">
<BInputGroupPrepend is-text class="myinputprepend">a2</BInputGroupPrepend>
<b-form-input type="number" step="0.00000000000001" v-model="Devinfo.bochangxishu2.a2"></b-form-input>
</b-input-group>
<b-input-group class="my-1">
<BInputGroupPrepend is-text class="myinputprepend">a3</BInputGroupPrepend>
<b-form-input type="number" step="0.00000000000001" v-model="Devinfo.bochangxishu2.a3"></b-form-input>
</b-input-group>
</BCardText>
</BCard>
<p style="position:absolute ;bottom: 10px;width: 100%;height: 30px">
<b-button @click="Set_Weave_Coeff" style="position:absolute;left: 20px ">设置</b-button>
<b-button @click="GetSenSorInfo" style="position:absolute;right: 20px ">恢复</b-button>
</p>
</div>
<div class="col-10" style="height: 100%;">
<div style="height: 100%;width: 100%;">
<div class="row linbox" :style="fiber_type == 'Dual' ? 'height: 50%' : 'height: 100%'">
<b-button @click="findpeak(0)"
style="position:absolute;right: 20%;margin-top:5px;z-index: 10;width: 60px; ">寻峰</b-button>
<b-button @click="GetDataDrection(0)"
style="position:absolute;right: 20%;margin-top:5%; z-index: 10; ;width: 60px ">采集</b-button>
<a-tag style="position:absolute;right: 20%;margin-top:10%; z-index: 10; ;width: 80px ">{{
shutter_time_up.toFixed(2) }} ms</a-tag>
<a-tag style="position:absolute;right: 20%;margin-top:13%; z-index: 10; ;width: 80px ">{{
sensor_gain_up.toFixed(2) }} </a-tag>
<b-button @click="CompuWeaveLenth(0)"
style="position:absolute;right: 20%;margin-top:15%; z-index: 10; ;width: 60px ">计算</b-button>
<div class="chart-container" ref="chart_weavelenth"></div>
<div style="width: 20%; overflow: auto;height:80%;">
<a-row style="border-top: 1px solid ;border-bottom: 1px solid ;border-color: gray;">
<a-col :span="8" style="font-size:small; text-align: center;">像素</a-col>
<a-col :span="4" style="font-size:small;text-align: center;">启用</a-col>
<a-col :span="10" style="font-size:small;text-align: center;">波长</a-col>
</a-row>
<a-row v-for="peak in Peaks" :key="peak[2]"
style="font-size: small;text-align: center;border-bottom: 1px solid ;border-color: gray;">
<a-col :span="8" style="font-size:small; text-align: center;">{{ peak[2] }}</a-col>
<a-col :span="4" style="font-size:small;text-align: center;"> <a-checkbox
v-model="peak[3]"></a-checkbox></a-col>
<a-col :span="12" style="font-size:small;text-align: center;">
<!-- <a-input v-model="peak[4]" @change="ReplotWeaveInfo(0)"></a-input> -->
<select style="width: 100%;" placeholder="Please select ..." allow-create
@change="ReplotWeaveInfo(0)" v-model="peak[4]">
<option v-for="item in WeavePeaksDeffine" :key="item" :value="item">
{{ item }}
</option>
</select>
</a-col>
</a-row>
</div>
</div>
<div class="row linbox" v-if="fiber_type == 'Dual'">
<b-button @click="findpeak(1)"
style="position:absolute;right: 20%;margin-top:5px; z-index: 10; ;width: 60px ">寻峰</b-button>
<b-button @click="GetDataDrection(1)"
style="position:absolute;right: 20%;margin-top:5%; z-index: 10; ;width: 60px ">采集</b-button>
<a-tag style="position:absolute;right: 20%;margin-top:13%; z-index: 10; ;width: 80px ">{{
sensor_gain_down.toFixed(2) }} </a-tag>
<a-tag style="position:absolute;right: 20%;margin-top:10%; z-index: 10; ;width: 80px ">{{
shutter_time_down.toFixed(2) }} ms</a-tag>
<b-button @click="CompuWeaveLenth(1)"
style="position:absolute;right: 20%;margin-top:15%; z-index: 10; ;width: 60px ">计算</b-button>
<!-- <b-button @click="findpeak(1)" style="position:absolute;right: 20%;margin-top:20%; z-index: 10; ;width: 60px ">寻峰</b-button> -->
<div class="chart-container" ref="chart_weavelenth_down"></div>
<div style="width: 20%; overflow: auto;height:80%;">
<a-row style="border-top: 1px solid ;border-bottom: 1px solid ;border-color: gray;">
<a-col :span="8" style="font-size:small; text-align: center;">像素</a-col>
<a-col :span="4" style="font-size:small;text-align: center;">启用</a-col>
<a-col :span="10" style="font-size:small;text-align: center;">波长</a-col>
</a-row>
<a-row v-for="peak in PeaksDown" :key="peak[2]"
style="font-size: small;text-align: center;border-bottom: 1px solid ;border-color: gray;">
<a-col :span="8" style="font-size:small; text-align: center;">{{ peak[2] }}</a-col>
<a-col :span="4" style="font-size:small;text-align: center;"> <a-checkbox
v-model="peak[3]"></a-checkbox></a-col>
<a-col :span="12" style="font-size:small;text-align: center;">
<!-- <a-input v-model="peak[4]"></a-input> -->
<a-select style="width: 100%;" placeholder="Please select ..." allow-create
@change="ReplotWeaveInfo(1)" v-model="peak[4]">
<a-option v-for="item in WeavePeaksDeffine" :key="item" :value="item">
{{ item }}
</a-option>
</a-select>
</a-col>
</a-row>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<style scoped>
.linbox {
/* / width: 100vw; */
height: 50%;
margin: 0px;
padding: 0px;
border-bottom: 1px solid #d2dede;
position: static;
}
.col-2 {
background-color: #f8f9fa;
padding-top: 0px;
padding-bottom: 0px;
padding: 0px;
border-right: 1px solid #d2dede;
position: relative;
}
.col-10 {
padding: 0px;
position: relative;
}
.chart-container {
background-color: #f8f9fa;
width: 80%;
height: 100%;
}
.container {
background-color: #f8f9fa;
width: 100%;
height: 100%;
max-width: 100%;
}
</style>

View File

@ -6,7 +6,7 @@ import {ref} from 'vue';
import Mycard from "./mycard.vue";
import EventBus from "../eventBus.js";
import {fs} from "@tauri-apps/api";
import SerialportMethod from "./SerialPort/SerialportMethod.js";
export default {
name: "siderleft",
components: {Mycard},
@ -87,7 +87,8 @@ export default {
isenable:false,
begin:"00:00",
end:"23:59",
}
},
continuessave:false,
}
},
async mounted() {
@ -113,6 +114,10 @@ export default {
this.Dispatcher.begin=configdata.Dispatcher.begin
if (typeof(configdata.Dispatcher.end)!="undefined")
this.Dispatcher.end=configdata.Dispatcher.end
if (typeof(configdata.sensor_typeforset)!="undefined")
this.sensor_typeforset=configdata.sensor_typeforset
await SerialportMethod.Set_Dev_Type(this.sensor_typeforset);;
var ports = this.listSerialPorts();
@ -170,9 +175,10 @@ export default {
<BAccordionItem title="高级设置" v-show="isSpecialmodeshow">
<!-- 设备切换 a-select -->
<b-input-group prepend="设备切换" size="sm" style="width: 100%">
<b-form-select v-model="sensor_typeforset" style="padding-right: 8px" :update="onDevchange()">
<b-form-select v-model="sensor_typeforset" style="padding-right: 8px" @change="onDevchange" :disabled="SerialInfo.isopen" >
<b-form-select-option value="IRIS-IS11">高光谱传感器</b-form-select-option>
<b-form-select-option value="JZ-IS11">IS11</b-form-select-option>
<b-form-select-option value="IS3">IS3</b-form-select-option>
<b-form-select-option value="IS11">IS11</b-form-select-option>
</b-form-select>
</b-input-group>
@ -252,7 +258,8 @@ export default {
<b-form-select-option value="DOWN" v-if="Devinfo.sensor_type=='IRIS-IS11'" >{{ DOWNStr }}</b-form-select-option>
<b-form-select-option value="DARK" v-if="Devinfo.sensor_type=='IRIS-IS11'">DARK</b-form-select-option>
<b-form-select-option value="ALL" v-if="Devinfo.sensor_type=='IRIS-IS11'">ALL</b-form-select-option>
<b-form-select-option value="RAD_UP" v-if="Devinfo.sensor_type=='IRIS-IS11'">RAD_UP</b-form-select-option>
<b-form-select-option value="RAD_UP">RAD_UP</b-form-select-option>
<!-- <b-form-select-option value="RAD_UP" v-if="Devinfo.sensor_type=='IRIS-IS11'">RAD_UP</b-form-select-option> -->
<b-form-select-option value="RAD_DOWN" v-if="Devinfo.sensor_type=='IRIS-IS11'">RAD_DOWN</b-form-select-option>
<b-form-select-option value="REF" v-if="Devinfo.sensor_type=='IRIS-IS11'">REF</b-form-select-option>
@ -284,16 +291,18 @@ export default {
<b-input-group style="margin-bottom: 2px;width: 100%;margin-left: auto;margin-right: auto;align-items: center;" size="sm" >
<b-button @click="ContinueCelect(-1)" :disabled="iscollecting || !SerialInfo.isopen"
style="min-width:80%;margin: auto;" v-show="!continuecaiji">
连续保存
style="min-width:60%;margin: auto;" v-show="!continuecaiji">
连续
<!-- 连续采集-->
</b-button>
<b-button @click="ContinueCelect(-1)" :disabled=" !SerialInfo.isopen"
style="min-width:80%;margin: auto;" v-show="continuecaiji">
停止保存
style="min-width:60%;margin: auto;" v-show="continuecaiji">
停止
<!-- 连续采集-->
</b-button>
<b-input-group-append>
保存<input type="checkbox" style="margin: 10px" v-model="continuessave" :disabled="continuecaiji"/>
</b-input-group-append>

View File

@ -17,6 +17,7 @@ export default {
configdata.useSG=this.dataprocessconfig.useSG;
configdata.usehighpass=this.dataprocessconfig.usehighpass;
configdata.Dispatcher=this.Dispatcher;
configdata.sensor_typeforset=this.sensor_typeforset;
fs.writeFile("config.json", JSON.stringify(configdata));
EventBus.emit('showbox', {title: "系统", body: "保存配置成功",interval:10});
this.isSpecialmodeshow=true;
@ -111,8 +112,11 @@ export default {
await this.GetoneData("",Number(this.caijiavgNumber));
var aa={code:"Space"}
await this.handlekeydown(aa);
await delay(50);
if(this.continuessave)
{ await this.handlekeydown(aa);
await delay(50);
}
// if (this.cajitimesjiange>0)
// await delay(this.cajitimesjiange*1000-50);
//等待期间每一秒检查一次是否停止
@ -180,7 +184,7 @@ export default {
//datatosave 保存
console.log(this.datatosave)
var data={};
if (this.caijidirection=="UP"||this.caijidirection=="DARK")
if (this.caijidirection=="UP"||this.caijidirection=="DARK"||this.caijidirection=="RAD_UP")
{
data =this.dataup;
}else {
@ -277,7 +281,7 @@ export default {
else
{
var datatosave={};
if (this.caijidirection=="UP")
if (this.caijidirection=="UP"||this.caijidirection=="RAD_UP")
{
datatosave=this.dataup;
@ -359,7 +363,7 @@ export default {
}else{
filepath=this.Pathtosave;
}
filepath=this.pathofdir+"/"+this.Filename+this.nowNumber+"_"+this.caijidirection+".csv";
await fs.writeFile( filepath, strcsv);
eventBus.emit('showbox', {title: "系统", body: "保存数据 "+ filepath+" OK",interval:10});
}else