diff --git a/FP系列火焰光度计.pdf b/FP系列火焰光度计.pdf
new file mode 100644
index 0000000..aaaa49d
Binary files /dev/null and b/FP系列火焰光度计.pdf differ
diff --git a/口罩泄露定制款/Form/frm_Main.Designer.cs b/口罩泄露定制款/Form/frm_Main.Designer.cs
index 9153b06..4ef81d3 100644
--- a/口罩泄露定制款/Form/frm_Main.Designer.cs
+++ b/口罩泄露定制款/Form/frm_Main.Designer.cs
@@ -30,23 +30,23 @@
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frm_Main));
- System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea3 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
- System.Windows.Forms.DataVisualization.Charting.Legend legend3 = new System.Windows.Forms.DataVisualization.Charting.Legend();
- System.Windows.Forms.DataVisualization.Charting.Series series9 = new System.Windows.Forms.DataVisualization.Charting.Series();
- System.Windows.Forms.DataVisualization.Charting.Series series10 = new System.Windows.Forms.DataVisualization.Charting.Series();
- System.Windows.Forms.DataVisualization.Charting.Series series11 = new System.Windows.Forms.DataVisualization.Charting.Series();
- System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea4 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
- System.Windows.Forms.DataVisualization.Charting.Legend legend4 = new System.Windows.Forms.DataVisualization.Charting.Legend();
- System.Windows.Forms.DataVisualization.Charting.Series series12 = new System.Windows.Forms.DataVisualization.Charting.Series();
- System.Windows.Forms.DataVisualization.Charting.Series series13 = new System.Windows.Forms.DataVisualization.Charting.Series();
- System.Windows.Forms.DataVisualization.Charting.Series series14 = new System.Windows.Forms.DataVisualization.Charting.Series();
- System.Windows.Forms.DataVisualization.Charting.Series series15 = new System.Windows.Forms.DataVisualization.Charting.Series();
- System.Windows.Forms.DataVisualization.Charting.Series series16 = new System.Windows.Forms.DataVisualization.Charting.Series();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+ System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+ System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ System.Windows.Forms.DataVisualization.Charting.Series series3 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+ System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+ System.Windows.Forms.DataVisualization.Charting.Series series4 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ System.Windows.Forms.DataVisualization.Charting.Series series5 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ System.Windows.Forms.DataVisualization.Charting.Series series6 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ System.Windows.Forms.DataVisualization.Charting.Series series7 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ System.Windows.Forms.DataVisualization.Charting.Series series8 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle();
this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.timer_date = new System.Windows.Forms.Timer(this.components);
@@ -440,36 +440,36 @@
//
// chart_TSI
//
- chartArea3.AxisX.IsMarginVisible = false;
- chartArea3.AxisY2.Maximum = 100D;
- chartArea3.AxisY2.Minimum = 0D;
- chartArea3.Name = "ChartArea1";
- this.chart_TSI.ChartAreas.Add(chartArea3);
+ chartArea1.AxisX.IsMarginVisible = false;
+ chartArea1.AxisY2.Maximum = 100D;
+ chartArea1.AxisY2.Minimum = 0D;
+ chartArea1.Name = "ChartArea1";
+ this.chart_TSI.ChartAreas.Add(chartArea1);
this.chart_TSI.Dock = System.Windows.Forms.DockStyle.Fill;
- legend3.Name = "Legend1";
- this.chart_TSI.Legends.Add(legend3);
+ legend1.Name = "Legend1";
+ this.chart_TSI.Legends.Add(legend1);
this.chart_TSI.Location = new System.Drawing.Point(2, 2);
this.chart_TSI.Name = "chart_TSI";
- series9.BorderWidth = 5;
- series9.ChartArea = "ChartArea1";
- series9.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
- series9.Legend = "Legend1";
- series9.LegendText = "室内浓度";
- series9.Name = "室内浓度";
- series10.BorderWidth = 5;
- series10.ChartArea = "ChartArea1";
- series10.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
- series10.Legend = "Legend1";
- series10.Name = "口罩内浓度";
- series11.BorderWidth = 5;
- series11.ChartArea = "ChartArea1";
- series11.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
- series11.Legend = "Legend1";
- series11.Name = "泄露率";
- series11.YAxisType = System.Windows.Forms.DataVisualization.Charting.AxisType.Secondary;
- this.chart_TSI.Series.Add(series9);
- this.chart_TSI.Series.Add(series10);
- this.chart_TSI.Series.Add(series11);
+ series1.BorderWidth = 5;
+ series1.ChartArea = "ChartArea1";
+ series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
+ series1.Legend = "Legend1";
+ series1.LegendText = "室内浓度";
+ series1.Name = "室内浓度";
+ series2.BorderWidth = 5;
+ series2.ChartArea = "ChartArea1";
+ series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
+ series2.Legend = "Legend1";
+ series2.Name = "口罩内浓度";
+ series3.BorderWidth = 5;
+ series3.ChartArea = "ChartArea1";
+ series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
+ series3.Legend = "Legend1";
+ series3.Name = "泄露率";
+ series3.YAxisType = System.Windows.Forms.DataVisualization.Charting.AxisType.Secondary;
+ this.chart_TSI.Series.Add(series1);
+ this.chart_TSI.Series.Add(series2);
+ this.chart_TSI.Series.Add(series3);
this.chart_TSI.Size = new System.Drawing.Size(1134, 476);
this.chart_TSI.TabIndex = 0;
this.chart_TSI.Text = "chart_Tsi";
@@ -487,45 +487,45 @@
//
// chart2
//
- chartArea4.AxisX.IsMarginVisible = false;
- chartArea4.Name = "ChartArea1";
- this.chart2.ChartAreas.Add(chartArea4);
+ chartArea2.AxisX.IsMarginVisible = false;
+ chartArea2.Name = "ChartArea1";
+ this.chart2.ChartAreas.Add(chartArea2);
this.chart2.Dock = System.Windows.Forms.DockStyle.Fill;
- legend4.Name = "Legend1";
- this.chart2.Legends.Add(legend4);
+ legend2.Name = "Legend1";
+ this.chart2.Legends.Add(legend2);
this.chart2.Location = new System.Drawing.Point(3, 3);
this.chart2.Name = "chart2";
- series12.BorderWidth = 5;
- series12.ChartArea = "ChartArea1";
- series12.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
- series12.Legend = "Legend1";
- series12.LegendText = "室内浓度";
- series12.Name = "室内C02浓度";
- series13.BorderWidth = 5;
- series13.ChartArea = "ChartArea1";
- series13.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
- series13.Legend = "Legend1";
- series13.Name = "口罩内CO2浓度";
- series14.BorderWidth = 5;
- series14.ChartArea = "ChartArea1";
- series14.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
- series14.Legend = "Legend1";
- series14.Name = "室内O2浓度";
- series15.BorderWidth = 5;
- series15.ChartArea = "ChartArea1";
- series15.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
- series15.Legend = "Legend1";
- series15.Name = "温度";
- series16.BorderWidth = 5;
- series16.ChartArea = "ChartArea1";
- series16.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
- series16.Legend = "Legend1";
- series16.Name = "湿度";
- this.chart2.Series.Add(series12);
- this.chart2.Series.Add(series13);
- this.chart2.Series.Add(series14);
- this.chart2.Series.Add(series15);
- this.chart2.Series.Add(series16);
+ series4.BorderWidth = 5;
+ series4.ChartArea = "ChartArea1";
+ series4.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
+ series4.Legend = "Legend1";
+ series4.LegendText = "室内浓度";
+ series4.Name = "室内C02浓度";
+ series5.BorderWidth = 5;
+ series5.ChartArea = "ChartArea1";
+ series5.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
+ series5.Legend = "Legend1";
+ series5.Name = "口罩内CO2浓度";
+ series6.BorderWidth = 5;
+ series6.ChartArea = "ChartArea1";
+ series6.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
+ series6.Legend = "Legend1";
+ series6.Name = "室内O2浓度";
+ series7.BorderWidth = 5;
+ series7.ChartArea = "ChartArea1";
+ series7.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
+ series7.Legend = "Legend1";
+ series7.Name = "温度";
+ series8.BorderWidth = 5;
+ series8.ChartArea = "ChartArea1";
+ series8.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
+ series8.Legend = "Legend1";
+ series8.Name = "湿度";
+ this.chart2.Series.Add(series4);
+ this.chart2.Series.Add(series5);
+ this.chart2.Series.Add(series6);
+ this.chart2.Series.Add(series7);
+ this.chart2.Series.Add(series8);
this.chart2.Size = new System.Drawing.Size(1132, 474);
this.chart2.TabIndex = 1;
this.chart2.Text = "chart_Tsi";
@@ -544,45 +544,45 @@
//
// dgv_expirData
//
- dataGridViewCellStyle6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
- this.dgv_expirData.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle6;
+ dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.dgv_expirData.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1;
this.dgv_expirData.BackgroundColor = System.Drawing.Color.White;
this.dgv_expirData.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
- dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- dataGridViewCellStyle7.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
- dataGridViewCellStyle7.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- dataGridViewCellStyle7.ForeColor = System.Drawing.Color.White;
- dataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight;
- dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
- dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
- this.dgv_expirData.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle7;
+ dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ dataGridViewCellStyle2.ForeColor = System.Drawing.Color.White;
+ dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.dgv_expirData.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2;
this.dgv_expirData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
- dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
- dataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Window;
- dataGridViewCellStyle8.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- dataGridViewCellStyle8.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
- dataGridViewCellStyle8.SelectionBackColor = System.Drawing.SystemColors.Highlight;
- dataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
- dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
- this.dgv_expirData.DefaultCellStyle = dataGridViewCellStyle8;
+ dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+ dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Window;
+ dataGridViewCellStyle3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ dataGridViewCellStyle3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
+ dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
+ this.dgv_expirData.DefaultCellStyle = dataGridViewCellStyle3;
this.dgv_expirData.Dock = System.Windows.Forms.DockStyle.Fill;
this.dgv_expirData.EnableHeadersVisualStyles = false;
this.dgv_expirData.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.dgv_expirData.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
this.dgv_expirData.Location = new System.Drawing.Point(0, 0);
this.dgv_expirData.Name = "dgv_expirData";
- dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
- dataGridViewCellStyle9.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
- dataGridViewCellStyle9.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- dataGridViewCellStyle9.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
- dataGridViewCellStyle9.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
- dataGridViewCellStyle9.SelectionForeColor = System.Drawing.Color.White;
- dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
- this.dgv_expirData.RowHeadersDefaultCellStyle = dataGridViewCellStyle9;
+ dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+ dataGridViewCellStyle4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ dataGridViewCellStyle4.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ dataGridViewCellStyle4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
+ dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ dataGridViewCellStyle4.SelectionForeColor = System.Drawing.Color.White;
+ dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.dgv_expirData.RowHeadersDefaultCellStyle = dataGridViewCellStyle4;
this.dgv_expirData.RowHeadersWidth = 51;
- dataGridViewCellStyle10.BackColor = System.Drawing.Color.White;
- dataGridViewCellStyle10.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.dgv_expirData.RowsDefaultCellStyle = dataGridViewCellStyle10;
+ dataGridViewCellStyle5.BackColor = System.Drawing.Color.White;
+ dataGridViewCellStyle5.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.dgv_expirData.RowsDefaultCellStyle = dataGridViewCellStyle5;
this.dgv_expirData.RowTemplate.Height = 27;
this.dgv_expirData.SelectedIndex = -1;
this.dgv_expirData.Size = new System.Drawing.Size(1148, 162);
diff --git a/口罩泄露定制款/Form/frm_Main.cs b/口罩泄露定制款/Form/frm_Main.cs
index 84547d6..c813b7b 100644
--- a/口罩泄露定制款/Form/frm_Main.cs
+++ b/口罩泄露定制款/Form/frm_Main.cs
@@ -906,8 +906,8 @@ namespace 口罩泄露定制款
experData.O2NongDu = dc.UshortToFloat(data_D300_D320[7], data_D300_D320[6]);
experData.HuanJingWenDu = dc.UshortToFloat(data_D300_D320[9], data_D300_D320[8]);
experData.HuanJingShiDu = dc.UshortToFloat(data_D300_D320[11], data_D300_D320[10]);
- experData.InDoor_TSINongDu = Tsi.Indoor_Data.ToFloat();
- experData.Mask_TSINongDu = Tsi.Outdoor_Data.ToFloat();
+ experData.InDoor_TSINongDu = Tsi.Indoor_Data;//modified by xyy
+ experData.Mask_TSINongDu = Tsi.Outdoor_Data;//modified by xyy
//experData.BenDiNongDu = Tsi.sp_bendiData.ToFloat();
@@ -942,46 +942,6 @@ namespace 口罩泄露定制款
_Motor.ShowDialog();
}
- ///
- /// 原先的方法
- ///
- //private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
- //{
- // switch (comboBox1.SelectedIndex)
- // {
- // case 0:
- // lb_status.Text = "头部静止,不说话";
- // //experData.TestStatus = "头部静止,不说话";
- // // form2.uiLabel1.Text = "头部静止,不说话";
- // _logger.Log(loginData.UserName, "切换了实验状态为【头部静止,不说话】", loginData.UserPower.ToString());
- // break;
- // case 1:
- // lb_status.Text = "左右转动头部看检测仓左右墙壁(大约15次)";
- // // experData.TestStatus = "左右转动头部看检测仓左右墙壁(大约15次)";
- // //form2.uiLabel1.Text = "左右转动头部看检测仓左右墙壁(大约15次)";
- // _logger.Log(loginData.UserName, "切换了实验状态为【左右转动头部看检测仓左右墙壁(大约15次)】", loginData.UserPower.ToString());
- // break;
- // case 2:
- // lb_status.Text = "抬头和低头看检测仓和地面(大约15次)";
- // // experData.TestStatus = "抬头和低头看检测仓和地面(大约15次)";
- // // form2.uiLabel1.Text = "抬头和低头看检测仓和地面(大约15次)";
- // _logger.Log(loginData.UserName, "切换了实验状态为【抬头和低头看检测仓和地面(大约15次)】", loginData.UserPower.ToString());
- // break;
- // case 3:
- // lb_status.Text = "大声阅读一段文字或大声说话";
- // // experData.TestStatus = "大声阅读一段文字或大声说话";
- // // form2.uiLabel1.Text = "大声阅读一段文字或大声说话";
- // _logger.Log(loginData.UserName, "切换了实验状态为【大声阅读一段文字或大声说话】", loginData.UserPower.ToString());
- // break;
- // case 4:
- // lb_status.Text = "头部静止,不说话";
- // // experData.TestStatus = "头部静止,不说话";
- // // form2.uiLabel1.Text = "头部静止,不说话";
- // _logger.Log(loginData.UserName, "切换了实验状态为【头部静止,不说话】", loginData.UserPower.ToString());
- // break;
-
- // }
- //}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
@@ -2209,7 +2169,7 @@ namespace 口罩泄露定制款
list_Tsi_Outdoor_Data.Clear();
//experData.XieLouLv = experData.CumulativeLeakageRate(list_Tsi_Indoor_Data, list_Tsi_Outdoor_Data, experData.BenDiNongDu, 1.0f);
lsit_XieLoulv.Clear();
- list_CO2_Indoor_Data.Clear();
+ list_CO2_Indoor_Data.Clear();
list_CO2_Outdoor_Data.Clear();
list_O2_Data.Clear();
list_HuanJingWenDu_Data.Clear();
diff --git a/口罩泄露定制款/Form/frm_Main.resx b/口罩泄露定制款/Form/frm_Main.resx
index b54da4d..bc8842a 100644
--- a/口罩泄露定制款/Form/frm_Main.resx
+++ b/口罩泄露定制款/Form/frm_Main.resx
@@ -121,98 +121,98 @@
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
- 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
+ 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
@@ -757,210 +757,210 @@
iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- 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
- AElFTkSuQmCC
+ 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
+ SUVORK5CYII=
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
- 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
- QkXP8tJQBjYAAAAASUVORK5CYII=
+ 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
+ BzI6z+jJmLFKAAAAAElFTkSuQmCC
diff --git a/口罩泄露定制款/Modbus/Connect_TSI.cs b/口罩泄露定制款/Modbus/Connect_TSI.cs
index 1bb2dbe..fe883b7 100644
--- a/口罩泄露定制款/Modbus/Connect_TSI.cs
+++ b/口罩泄露定制款/Modbus/Connect_TSI.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
+using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
@@ -13,115 +14,517 @@ namespace 口罩泄露定制款.Modbus
private SerialPort sp_Indoor;
private SerialPort sp_Outdoor;
private SerialPort sp_bendiPort;
- static string _indoor_data = "0.00";
- static string _outdoor_data = "0.00";
- static string sp_bendi = "0.00";
- public string Indoor_Data { get { return _indoor_data; } set { _indoor_data = value; } }
- public string Outdoor_Data { get { return _outdoor_data; } set { _outdoor_data = value; } }
- public string sp_bendiData { get { return sp_bendi; } set { sp_bendi = value; } }
+
+ // 协议相关常量
+ private const byte FRAME_HEADER = 0x15;
+ private const byte FRAME_TAIL = 0x16;
+ private const int BAUD_RATE = 115200;
+ private const int DATA_BITS = 8;
+ private const Parity PARITY = Parity.None;
+ private const StopBits STOP_BITS = StopBits.One;
+
+ // 命令枚举
+ private enum PC_CMD : byte
+ {
+ PC_CMD_RESPOND = 0x00,
+ PC_CMD_CONNECT,
+ PC_CMD_DISCONNECT,
+ PC_CMD_GET_DATA,
+ PC_CMD_GET_GENERAL,
+ PC_CMD_SET_GENERAL,
+ PC_CMD_RESET,
+ PC_CMD_GET_MAINTAIN,
+ PC_CMD_SET_MAINTAIN,
+ PC_CMD_GET_MEAS_SETTING,
+ PC_CMD_SET_MEAS_SETTING,
+ PC_CMD_CTRL_FIRE,
+ PC_CMD_DONGLE_CONNECT,
+ PC_CMD_GET_SELECTED_CURVE_PART1,
+ PC_CMD_GET_SELECTED_CURVE_PART2,
+ PC_CMD_GET_SELECTED_CURVE_PART3,
+ PC_CMD_GET_RECORD_NUM,
+ PC_CMD_GET_RECORD
+ }
+
+ // 响应结果枚举
+ private enum RESPOND_RESULT : byte
+ {
+ RESPOND_RESULT_SUCCESS = 0x00,
+ RESPOND_RESULT_FAIL,
+ RESPOND_RESULT_BUSY
+ }
+
+ // 数据结构
+ private struct PC_DATA
+ {
+ public byte real_param_sta; // 每个元素的真实使能情况,每1bit对应一个元素
+ public byte disp_param_sta; // 每个元素的显示使能情况,每1bit对应一个元素
+ public byte unit; // 浓度单位
+ public byte is_fire; // 是否已经点着火了
+ public ushort[] energys; // 每一个元素的能量值
+ }
+
+ // 当前数据
+ private float _indoor_data = 0.0f;
+ private float _outdoor_data = 0.0f;
+ private float _bendi_data = 0.0f;
+
+ // 接收缓冲区
+ private List indoorBuffer = new List();
+ private List outdoorBuffer = new List();
+ private List bendiBuffer = new List();
+
+ // 元素索引
+ private enum ELEMENT_INDEX : int
+ {
+ PARAM_NA = 0,
+ PARAM_K,
+ PARAM_LI,
+ PARAM_CA,
+ PARAM_BA,
+ PARAM_MAX_NUM = 5
+ }
+
+ public float Indoor_Data { get { return _indoor_data; } }
+ public float Outdoor_Data { get { return _outdoor_data; } }
+ public float Bend_Data { get { return _bendi_data; } }
public Connect_TSI(string ComPort_TSI_Indoor, string ComPort_TSI_Outdoor)
{
try
{
-
- sp_Indoor = new SerialPort(ComPort_TSI_Indoor, 9600, Parity.None, 8, StopBits.One);
- // 订阅DataReceived事件(可选,用于接收数据)
- sp_Indoor.DataReceived += new SerialDataReceivedEventHandler(Sp_Indoor_DataReceived);
- sp_Outdoor = new SerialPort(ComPort_TSI_Outdoor, 9600, Parity.None, 8, StopBits.One);
- sp_Outdoor.DataReceived += new SerialDataReceivedEventHandler(Sp_Outdoor_DataReceived);
+ // 初始化串口,使用协议规定的参数
+ sp_Indoor = new SerialPort(ComPort_TSI_Indoor, BAUD_RATE, PARITY, DATA_BITS, STOP_BITS);
+ sp_Outdoor = new SerialPort(ComPort_TSI_Outdoor, BAUD_RATE, PARITY, DATA_BITS, STOP_BITS);
+ sp_bendiPort = new SerialPort("COM8", BAUD_RATE, PARITY, DATA_BITS, STOP_BITS); // 假设本底使用COM8
- sp_bendiPort = new SerialPort(ComPort_TSI_Outdoor, 9600, Parity.None, 8, StopBits.One);
- sp_bendiPort.DataReceived += new SerialDataReceivedEventHandler(Sp_bendi_DataReceived);
+ // 订阅DataReceived事件
+ sp_Indoor.DataReceived += new SerialDataReceivedEventHandler(Sp_Indoor_DataReceived);
+ sp_Outdoor.DataReceived += new SerialDataReceivedEventHandler(Sp_Outdoor_DataReceived);
+ sp_bendiPort.DataReceived += new SerialDataReceivedEventHandler(Sp_Bendi_DataReceived);
+
+ // 设置读取超时
+ sp_Indoor.ReadTimeout = 1000;
+ sp_Outdoor.ReadTimeout = 1000;
+ sp_bendiPort.ReadTimeout = 1000;
}
catch (Exception ex)
{
- MessageBox.Show(ex.Message);
+ MessageBox.Show($"初始化串口失败: {ex.Message}");
}
}
+
+ ///
+ /// 发送命令帧
+ ///
+ /// 串口对象
+ /// 命令字节
+ /// 数据域(可选)
+ private void SendCommand(SerialPort port, PC_CMD command, byte[] data = null)
+ {
+ try
+ {
+ if (port == null || !port.IsOpen)
+ return;
+
+ List frame = new List();
+
+ // 帧头
+ frame.Add(FRAME_HEADER);
+
+ // 数据域长度
+ byte dataLength = (byte)((data != null) ? data.Length : 0);
+ frame.Add(dataLength);
+
+ // 命令字节(数据域的第一个字节)
+ frame.Add((byte)command);
+
+ // 如果有额外的数据,添加到数据域
+ if (data != null && data.Length > 0)
+ {
+ frame.AddRange(data);
+ }
+
+ // 计算校验和(对数据域的所有字节累加求和,取低8位)
+ byte checksum = 0;
+ for (int i = 2; i < frame.Count; i++) // 从命令字节开始计算
+ {
+ checksum += frame[i];
+ }
+ frame.Add(checksum);
+
+ // 帧尾
+ frame.Add(FRAME_TAIL);
+
+ // 发送帧
+ port.Write(frame.ToArray(), 0, frame.Count);
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"发送命令失败: {ex.Message}");
+ }
+ }
+
+ ///
+ /// 解析接收到的数据帧
+ ///
+ private void ParseFrame(List buffer, ref float dataStore, string portName)
+ {
+ try
+ {
+ // 查找帧头
+ int headerIndex = buffer.IndexOf(FRAME_HEADER);
+ if (headerIndex < 0)
+ return;
+
+ // 移除帧头之前的数据
+ if (headerIndex > 0)
+ {
+ buffer.RemoveRange(0, headerIndex);
+ }
+
+ // 检查是否有足够的数据读取长度字段
+ if (buffer.Count < 2)
+ return;
+
+ byte dataLength = buffer[1];
+
+ // 检查是否收到完整帧(帧头1 + 长度1 + 数据域 + 校验和1 + 帧尾1)
+ int frameLength = 2 + dataLength + 2;
+ if (buffer.Count < frameLength)
+ return;
+
+ // 验证帧尾
+ if (buffer[frameLength - 1] != FRAME_TAIL)
+ {
+ // 帧尾错误,移除帧头继续查找
+ buffer.RemoveAt(0);
+ return;
+ }
+
+ // 提取完整帧
+ byte[] frame = buffer.GetRange(0, frameLength).ToArray();
+
+ // 验证校验和
+ byte checksum = 0;
+ for (int i = 2; i < 2 + dataLength; i++)
+ {
+ checksum += frame[i];
+ }
+
+ if (checksum != frame[frameLength - 2])
+ {
+ // 校验和错误
+ buffer.RemoveRange(0, frameLength);
+ return;
+ }
+
+ // 解析响应
+ if (frame[2] == (byte)PC_CMD.PC_CMD_RESPOND) // 响应命令
+ {
+ byte to_cmd = frame[3];
+ byte result = frame[4];
+ byte dat_len = frame[5];
+
+ if (result == (byte)RESPOND_RESULT.RESPOND_RESULT_SUCCESS)
+ {
+ if (to_cmd == (byte)PC_CMD.PC_CMD_GET_DATA && dat_len >= 2 + 5 * 2) // 至少包含header + 5个元素的能量值
+ {
+ // 解析PC_DATA结构
+ PC_DATA pcData = new PC_DATA();
+ pcData.real_param_sta = frame[6];
+ pcData.disp_param_sta = frame[7];
+ pcData.unit = frame[8];
+ pcData.is_fire = frame[9];
+
+ // 读取5个元素的能量值(每个2字节)
+ pcData.energys = new ushort[5];
+ int offset = 10;
+ for (int i = 0; i < 5; i++)
+ {
+ pcData.energys[i] = (ushort)(frame[offset] + (frame[offset + 1] << 8));
+ offset += 2;
+ }
+
+ // 这里我们取第一个元素(PARAM_NA)的能量值作为浓度值
+ // 根据实际需求,可以选择不同的元素
+ float energyValue = pcData.energys[(int)ELEMENT_INDEX.PARAM_NA];
+
+ // 转换为浓度值(这里需要根据实际校准曲线转换,暂时直接使用能量值)
+ // 实际应用中需要调用校准曲线进行转换
+ dataStore = energyValue;
+
+ Console.WriteLine($"{portName} 收到数据: 能量值={energyValue}, 浓度={dataStore:F2}");
+ }
+ }
+ }
+
+ // 移除已处理的帧
+ buffer.RemoveRange(0, frameLength);
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"解析数据帧失败: {ex.Message}");
+ if (buffer.Count > 0)
+ buffer.RemoveAt(0); // 移除错误数据
+ }
+ }
+
+ // 室内数据接收处理
private void Sp_Indoor_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
- Indoor_Data = sp_Indoor.ReadExisting().Trim();
- sp_bendiData = Indoor_Data;
+ try
+ {
+ if (sp_Indoor == null || !sp_Indoor.IsOpen)
+ return;
+
+ int bytesToRead = sp_Indoor.BytesToRead;
+ if (bytesToRead <= 0)
+ return;
+
+ byte[] buffer = new byte[bytesToRead];
+ sp_Indoor.Read(buffer, 0, bytesToRead);
+
+ indoorBuffer.AddRange(buffer);
+
+ // 尝试解析帧
+ ParseFrame(indoorBuffer, ref _indoor_data, "室内光度计");
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"室内数据接收异常: {ex.Message}");
+ }
}
+
+ // 室外数据接收处理
private void Sp_Outdoor_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
- Outdoor_Data = sp_Outdoor.ReadExisting().Trim();
- }
- private void Sp_bendi_DataReceived(object sender, SerialDataReceivedEventArgs e)
- {
- sp_bendiData = sp_bendiPort.ReadExisting().Trim();
+ try
+ {
+ if (sp_Outdoor == null || !sp_Outdoor.IsOpen)
+ return;
+
+ int bytesToRead = sp_Outdoor.BytesToRead;
+ if (bytesToRead <= 0)
+ return;
+
+ byte[] buffer = new byte[bytesToRead];
+ sp_Outdoor.Read(buffer, 0, bytesToRead);
+
+ outdoorBuffer.AddRange(buffer);
+
+ // 尝试解析帧
+ ParseFrame(outdoorBuffer, ref _outdoor_data, "室外光度计");
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"室外数据接收异常: {ex.Message}");
+ }
}
+ // 本底数据接收处理
+ private void Sp_Bendi_DataReceived(object sender, SerialDataReceivedEventArgs e)
+ {
+ try
+ {
+ if (sp_bendiPort == null || !sp_bendiPort.IsOpen)
+ return;
+
+ int bytesToRead = sp_bendiPort.BytesToRead;
+ if (bytesToRead <= 0)
+ return;
+
+ byte[] buffer = new byte[bytesToRead];
+ sp_bendiPort.Read(buffer, 0, bytesToRead);
+
+ bendiBuffer.AddRange(buffer);
+
+ // 尝试解析帧
+ ParseFrame(bendiBuffer, ref _bendi_data, "本底光度计");
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"本底数据接收异常: {ex.Message}");
+ }
+ }
+
+ ///
+ /// 启动数据采集
+ ///
public void Start_Indoor()
{
- if (sp_Outdoor.IsOpen)
- sp_Indoor.WriteLine("X");
- }
- public void Start_Outdoor()
- {
- if (sp_Outdoor.IsOpen)
- sp_Outdoor.WriteLine("X");
+ if (sp_Indoor != null && sp_Indoor.IsOpen)
+ {
+ // 发送连接命令
+ SendCommand(sp_Indoor, PC_CMD.PC_CMD_CONNECT);
+ Thread.Sleep(100); // 等待响应
+
+ // 开始定时获取数据
+ Task.Run(() =>
+ {
+ while (sp_Indoor.IsOpen)
+ {
+ try
+ {
+ SendCommand(sp_Indoor, PC_CMD.PC_CMD_GET_DATA);
+ Thread.Sleep(500); // 每500ms获取一次数据
+ }
+ catch
+ {
+ break;
+ }
+ }
+ });
+ }
}
+ public void Start_Outdoor()
+ {
+ if (sp_Outdoor != null && sp_Outdoor.IsOpen)
+ {
+ // 发送连接命令
+ SendCommand(sp_Outdoor, PC_CMD.PC_CMD_CONNECT);
+ Thread.Sleep(100); // 等待响应
+
+ // 开始定时获取数据
+ Task.Run(() =>
+ {
+ while (sp_Outdoor.IsOpen)
+ {
+ try
+ {
+ SendCommand(sp_Outdoor, PC_CMD.PC_CMD_GET_DATA);
+ Thread.Sleep(500); // 每500ms获取一次数据
+ }
+ catch
+ {
+ break;
+ }
+ }
+ });
+ }
+ }
public void Start_bendidoor()
{
- if (sp_bendiPort.IsOpen)
- sp_bendiPort.WriteLine("X");
+ if (sp_bendiPort != null && sp_bendiPort.IsOpen)
+ {
+ // 发送连接命令
+ SendCommand(sp_bendiPort, PC_CMD.PC_CMD_CONNECT);
+ Thread.Sleep(100); // 等待响应
+
+ // 开始定时获取数据
+ Task.Run(() =>
+ {
+ while (sp_bendiPort.IsOpen)
+ {
+ try
+ {
+ SendCommand(sp_bendiPort, PC_CMD.PC_CMD_GET_DATA);
+ Thread.Sleep(500); // 每500ms获取一次数据
+ }
+ catch
+ {
+ break;
+ }
+ }
+ });
+ }
}
-
+ ///
+ /// 停止数据采集
+ ///
public void Stop_Indoor()
{
- if (sp_Outdoor.IsOpen)
- sp_Indoor.WriteLine("Z");
+ if (sp_Indoor != null && sp_Indoor.IsOpen)
+ {
+ SendCommand(sp_Indoor, PC_CMD.PC_CMD_DISCONNECT);
+ Thread.Sleep(100);
+ }
}
+
public void Stop_Outdoor()
{
- if (sp_Outdoor.IsOpen)
- sp_Outdoor.WriteLine("Z");
+ if (sp_Outdoor != null && sp_Outdoor.IsOpen)
+ {
+ SendCommand(sp_Outdoor, PC_CMD.PC_CMD_DISCONNECT);
+ Thread.Sleep(100);
+ }
}
+
public void Stop_bendidoor()
{
- if (sp_bendiPort.IsOpen)
- sp_bendiPort.WriteLine("Z");
+ if (sp_bendiPort != null && sp_bendiPort.IsOpen)
+ {
+ SendCommand(sp_bendiPort, PC_CMD.PC_CMD_DISCONNECT);
+ Thread.Sleep(100);
+ }
}
-
-
+ ///
+ /// 连接串口
+ ///
public void Connect()
{
- sp_Indoor.Open();
- sp_Outdoor.Open();
- //sp_bendiPort.Open();
- //if (sp_Indoor != null && sp_Outdoor != null)
- //{
- // if (!sp_Indoor.IsOpen)
- // {
- // sp_Indoor.Open();
- // }
- // if (!sp_Outdoor.IsOpen)
- // {
- // sp_Outdoor.Open();
- // }
+ try
+ {
+ if (sp_Indoor != null && !sp_Indoor.IsOpen)
+ {
+ sp_Indoor.Open();
+ Console.WriteLine("室内光度计串口已打开");
+ }
- //}
+ if (sp_Outdoor != null && !sp_Outdoor.IsOpen)
+ {
+ sp_Outdoor.Open();
+ Console.WriteLine("室外光度计串口已打开");
+ }
+ if (sp_bendiPort != null && !sp_bendiPort.IsOpen)
+ {
+ sp_bendiPort.Open();
+ Console.WriteLine("本底光度计串口已打开");
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show($"打开串口失败: {ex.Message}");
+ }
}
+
+ ///
+ /// 断开串口连接
+ ///
public void Disconnect()
{
- if (sp_Indoor != null && sp_Outdoor != null)
+ try
{
- if (sp_Indoor.IsOpen)
+ Stop_Indoor();
+ Stop_Outdoor();
+ Stop_bendidoor();
+
+ if (sp_Indoor != null && sp_Indoor.IsOpen)
{
sp_Indoor.Close();
}
- if (sp_Outdoor.IsOpen)
+
+ if (sp_Outdoor != null && sp_Outdoor.IsOpen)
{
sp_Outdoor.Close();
}
+
+ if (sp_bendiPort != null && sp_bendiPort.IsOpen)
+ {
+ sp_bendiPort.Close();
+ }
+
+ Console.WriteLine("所有串口已关闭");
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"关闭串口失败: {ex.Message}");
}
}
}
-}
+}
\ No newline at end of file
diff --git a/火焰光度计对接协议.docx b/火焰光度计对接协议.docx
new file mode 100644
index 0000000..f547b5d
Binary files /dev/null and b/火焰光度计对接协议.docx differ