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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 @@ -757,210 +757,210 @@ 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 - AElFTkSuQmCC + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAABFtSURBVHhe7Z0NrGVXVccJiXxVMFoilGA0Kk0tghSQahoB + RcbSTmfu2fs+qUx1ipBJoXbePXvf15Zq5gklpS0O0JZaSLQjhQhoiaUSbQnSlg+p4cN+KWCtM9Nh3j17 + nzctLVZjiB2zzp2pM/+z73nnfp9zz/+X/JPJu2etvdfaa8+55+Pu/bSnEUIIIYQQQgghhBBCCCGEEEII + IYQQQgghhBBCSOOIYndHGaEdIY1Ail9bf7hInCCksXCCEFIAJwghBXCCEFIAJwghBXCCEFIAJwghBXCC + EFIAJwghBXCCEFIAJwghBXCCEFIAJwghBXCCEFIAJwghBXCCEFIAJwghBXCCEFIAJwghBXCCEFIAJwgh + BXCCEFIAJwghBXCCEFIAJwghBXCCEFIAJwghBXCCkMayZSV9bsuuvapt/bnKJrsi6z+urP9yK/b36mW/ + T9veo9re/yROiLzkmN6jYiO24qPvK9klvqUNaQvbJ6Qy6M6hlyrjl7Vxf6bj5K6ty76XL/TpKmszTu7q + 98HvbBl/MvaTkJkQXbz+YmXc+Tr2N7WM24/FWiE9pIy/PrKuHXX8SRgHIRMjit2ZuuuviKz/aqAQR5Iy + 5YR2o8t9URt3uTLutzA+QoZGdd0Zyvgro477l3yx1VsSk8QmMWLchAykHR96mTb+Mm3917CoFlhfk5gl + dswHIRnKpjsi428PFE+jJDmQXGB+SEORYlA2+QYWStMlOeFEaTCcGOXEidIw5jkxzrHuUBT7uyPTu10Z + d4sy7pPK+BvlVqzuuN264957RLvlb/3P5Bh3i9iIrfhAv7MQJ8qCo7rpW2Y1MVq29y1l3Sei2P1x26Tb + tO2d3o6//xPYp1ERX5lPk26TNqQtbZJvYj+moWyidNO3YJ9ITYni5Fe08TfjQE9O7mFt3WelUCOTvHHz + joPPwT7Minb88LOVXXut6nqjbfopbf3efH8nJONvltxiH0hNiGzvJ7VJrn7deff/b25wx9fn5dWSOtwW + jWzvF7PXYKz/fCCOsZTl1iRXS66xXVJhtE0uiKx/EAd0HEUm+ZK27hIpOGyvLkjfsxiyWPIxjqp+rpML + sD1SMVrd5Fcn+SxDBl6+OumV9NXYVt2RmLKvhRP8j0RyL2OAbZEKoKx/W2QPPIaDNorkf1i5Y7N59fDc + ridmhcTYf0g6mbOKjIGMBbZD5oiK3QdwoEZRZJJPK5ueg/6bgsQuOcC8jCIZE/RPZkzbrp+qrb8NB2cE + 7VnEr1GjIrnIcpLP07C6TcYI/ZMZ0DZ+ScfJgcCglJY8gNMmeQP6Jn0kN1mOArkrrTg5IGOFvskUUcav + 5gZiCCmb3Ck/IkK/JIzkSnKGeRxGckMA/ZIpoK1/Hya/tDprB9vGvx19knJI7iSHubyWVaf3p+iTTJCx + LsaNu5Xfh8cnu+4z7tZcfsvK+JvRJ5kAyvqP5ZJdUjy9T57s+VAg12Ukt5TRHxkDWeoGk1xGLesf0MZv + Rn9kMkhusxwHcr+RIpN8B/2RERj1O2/2Ni1X8pg6kuPsbeLAGGwk1UkeQX9kCPT2vT/EpJaRit170BeZ + LpJzHIcyet073f+gL1KCkX4YdOH+x7V129EXmQ2S+/4YBMamSHFyAH2RAqKO/49cEjeQMv6fdcf/Gvoi + s0XGIBuLwBgVyiTfRF8kgLb+nlzyNpCK/We2rKQvQl9kPshYyJjgOG0o4/8efZFjyNaWxaRtINVNrkE/ + pBrI0qw4XhtJWf9X6IdktwxHePgUu0vQD6kWOnYfzY3bBuIkAbTx12GSNlScnId+SDXRNt2dG7+NZPx1 + 6KeRtE2yLZecDRRZfzb6IdUme48rMJZFktpAP42i1XU/p5fdPkxMkdpddyb6IfVAVn3B8SzUstsnNYJ+ + GoO2TpamySdmoNLd6IPUC2XdH+THtUjuU+ijEUSx7+STMViyIAD6IPVk2GtOqRX0sdD0F3NzT2AiBklZ + fx/6IPVmqHW6jHuiUYvUqdj9Qy4Jg2Tcert7iEvJLBhqxb9EZatSBsY8IKkZ9LGQyMJlGHyRVOw0+iCL + QdRdj3C8i7Xgz73adu1UecU5H/gAddx70QdZLLLV7HHcB0hqR2oIfSwMyvRK/ypQ8b2cxiBjjeM/SFJD + aL8QyMoYGOwgbTHOR7H7JfRBFhMZaxlzrINBWrgVac686N+e2TLJ1zHQgTL+99EHWWxkzHN1MEBSS1JT + 6KO2KJvswiAHSZnkerQnzUDGHuthkKSm0L6WaONPK//MI/l269LHTkQfpBnI2EsN5OsiIKkp409DH7Vj + mNedlXHnoz1pFlIDWBcDFbuPon2tWLLpq3JBDRYXFCMZUguB+ghKagzta0PZs4esbBHZ9JfRnjQTqQWp + CayToOp6Fhnm7MFleggyzDJCtTyLlD17yJbJb7S9E9CeNBupCakNrJeg6nYWGersYdw70J4QQWoD62WQ + anUWKX/2cA8srR5+BtoTIkhtSI1g3QRVl7PIm40/Odf5wYrRnpBjkRoJ1E1QUntoXznaNrXY8aA6/t+3 + XbT+PLQn5FikRqRWcvUTkNQe2leOslt1KevehbaEhJBawfoJSWoPbSvFkd1Rcx1HtWzve+fsTF6A9oSE + kFqRmsE6CqrKuxVrk7471+Gg3IfQlpAipGbydRSQSd+NtpWh7H1rWR8JbQkpouyaWlKDaFsJ2jb9Dexs + ULG/H20JKYPUTq6eApJaRNu5o437IHY0JGX8lWhLSBmkdrCegjLug2g7d7Rx/5rraEjc5IaMiNROrp6C + Sr6NtnNlqeteke9kXvJTSbQlZBjK/nS7Ha+/Bm3nRtn1VpXxq2hLyDCU3Z9dWbeCtnMjMsmnsYMhqe6h + M9CWkGHQtvd6rKug4uRzaDsXVlcPPz2yBx7LdRAUWf8g2hIyCtr6vVhfqLOM/4HUJtrOHL1S7sJJWX8t + 2hIyCtr6PVhfIbXN+vyft5V+em78ZrQlZBTa1p+bq6+wrkLbmaOs+6dAx3Lavnr4WWhLyChs3nHwOVhf + ISmbfgNtZ0o7fvLZ2KmQVJz8HdoSMg5l9xeRGkXbmSFrqmKHQlI2rc4tN7IQlN1GY65rPJdekJrXH2TC + lK29uS50rY2/DDsUUjt2P4+2hIxD266finUWlPGXoe3MKHu7De0ImQRYZwO0B+1mRmT9VwMdOl6dtYNo + R8gk0Du9y9UbSGoU7WbGFus33PSkMZsvkpmjjP9HrDeU1CjazYSzL93/49iZkJT1H0ZbQiaBMu4jWG8h + Sa2i7dRpX7z+GuxIXdQO/I0qVp1zJrWK9Tt1VOzPwo5QVBXVtv5srN+pM8T7MBQ1V7VNsg3rd+oom+zA + jlBUFdW27p1Yv1On9BKjFDVvzeNh4TAbnFDUPBXZZPavvWvrr8WOUFQVpYy/Aet36ujY34QdoagqKrLu + L7F+p46y7m+xI3VSne/rz1q1z9U8FnCQ5VfqLG3Tkoshu4ei5eTOmSp2d+T+hp8VHYPHDpDElos3qPRD + mL9pSpaHwr8NUtGxRz/jclMjEsX+7nwx5BV1/CvRtu5ITBhnSJIjtCUNoezvWZTx16Nt3ZGYMM6g5nGL + lFQDbddPzxVEQLKp/dbl3s+gfV2RWCQmjDOs9dPRnjQIHbtSS+rLd1m0rSsSC8YXVOy4VUXTKb9zkX9C + G38a2tcNiSGLBeMLijuBNR7dfeTlW5f9f+eLIy9l3CfRvm5IDBhXSFlOuo+8HO1JA1HWvx8LZJDkLWa0 + rwvDvIEtOUF70lCUXftpZX2CRRJSy/oHZEUN9FF1pM/Sd4wnJMmF5AR9kAajbPJHWCiDJIW2Y8fhH0Ef + VUX6WnZyiCQX6IM0nKVLHvmxyCTfwWIZJCk49FFVhpkckgPJBfogC8So22+V3SnrqWKya/NbUqYk0kfs + d5EkB+ijDKPmnMwQ3V3fpOP0rsi4j+NnZYmMvx2LpkjyvhP6qArSN+xvkSR29FEWybmyyZ1qJf11/IzM + GWXSU5TxN8KA/zYeVwa5tVn2gv2pwordHUtd90L0NS+kL8NOjizmEW/rSq6P82X8DYv05kFt2bKSPld1 + /R9usv6/cMAjk3wJjy+Lsu530d9Gatnk65FJ5r6jkfRB+oL920gSM/oqi+Qa/Z1j3SFlkuVKbIPWRNqx + +z0d++LXREzaRbuyDPNs5Pg2/XVvNod+Cv1NG2lT2s71p4TGeeYhOUZ/x8n4r+huuhXtyJTQJn2DMu6W + 3EAE5R6OOv4k9FGWYa9HjkpZ97Bc7M5i8xZpQ9qSNrEfZTTWdUfHnyQ5Rp8hRTb580V4VaeyZNcZNvkw + Jn5jpWO9TzTs9QjoIW38FdPYxCXbvMj4K7I28u2WksSGfoeh9I/Ojkh2Q1YmWW1d+L0T0RcZkew6I3bv + Up21g5jwsmrHvbFuQepltw99Dq3Y/7Wy6Y6lrnsF+i+L2IoP8ZXzP6yW3T70PwyS05zPkpK9A5Vx56NP + MgKy+DUmeFip2H8G/Q6LjnuTW6SiP9n/RiZ+di2VfW1MT5H/DLL/EEx6ivxNPpNj5NgjNnlfoyju3YTx + DYvkNOd3SEXWvRX9kiHZbA4+f5ziiGJ3dzShpSeHfZBYRY36IBCRnEpu0f8Qug19khGR03EgwYVS1qXK + JruWVt2Por9xaBu/hG3VRdJ3jGccJLeSY8k1trWRlPWvRX9kDLR1n8UkD5IyvY9N48L4KDK4w7y3NW9J + X6dZkJJryTm2O0hyswV9kDFR3UNnYKJzMv4r7e56hLbT4NyV9EXauMu18eu5flRF0jfjLpe+Yv+ngeQ+ + e+6B/ThGyvpUrfiXoC2ZAEdua+aSvnXZ97RxIz8UHAfVSX5W2d77owv8f2K/5iXpi/RJ+ob9nQUyFtmY + BPqmY3cJHk8mRP/BlL/n2IQr426ILl5/MR47a1oXr/9Ctl7x9r0/zBXFrNRv+1rpC/Zv1siYyNgc2z9Z + Y+s8++QJeCyZIMr6t2XJNv72aX6vHhV5WqxMcs0sr1GyawyTXFPFJ9X967X+GwnjvO9FhqBdk/vn2vZe + r62/Cs96E5L4vErawHarSF3GjMyJlvEnK5vY/mvove/qC/c/Hij6sLJje98VW/EhvtA/IQuHPDWXYs/O + NMb/jhS/SP4tf5PP5Bi0I4QQQgipKW27Vru1r0Zl20Xrz1tafeAZ+HdCguiO2yQXx/Ke0fbte5+Fny8S + bePfrpf9Pm2TGD8jJIg27tajd5Basb930i/5VQHddZsi675wNM7I+ger8MCVVJzsf1S8zdp/yPWJRVj7 + qR0nL1PGfQTjy2Ls+ivxeEKeQlYUbMXuXiyco8pWPDfp5efuTF6AtlWndeljJyrrd2nbexTjOqqzrP9B + tLJ4282RCSHFj0UTkkyiyPqz0b6qSF/LPs2PjP8LtCck++qxeefB72PBhFTHfULK7gtyRG9Ce9JwdOzL + /+a8gi8FbkS2sxTGMVj8OSz5f458BcEiCavjdqN9XZC+5+IZKLcd7UlD0XFyV75AgkrqfCtU+i4xBOIK + aO0eLhtK5Lv5O/LFEZbqeoP249B/HX5jod04SAwY1yApm66gPWkQclu3/xQ5Xxyolu19a9JP1cuswD7p + 7RUkBokF2wlJfjZbpVXryYzR1r8Pi2KQlE0n/mu4eUwQQWLBdgapZdyfoD1pAHJbF4thoOLkc2g/CeY1 + QQSJCdsapGkuoUQqjLyPdOx7VwWaynOBuU4Q69+EbeUkuem6TWhLGoYsCK2svy9XINlDQX8jHj8p5jlB + hMCuXP2Yrb9PcoLHkwZznu2doGz6nuN+K278E3olfTUeOynmPUEktizGo+1duP9xyYHkAo8lJEOZg6do + 6/f0J0hyNX4+SeY9QQSJ8UhbeyR2/JyQIKqb/Oa0N6KswgSRGCVW/Dshc6cKE4SQysIJQkgBnCCEFMAJ + QkgBnCCEFMAJQkgBUvxlhHaEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBCy+PwfdCbuDB08SN0AAAAA + SUVORK5CYII= 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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