using LB_SmartVision.CSV; using LB_SmartVision.SQL; using LB_SmartVisionCommon; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Globalization; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Controls; using System.Windows.Forms; namespace LB_SmartVision.Forms.Pages.LEDLightSourceControlPage { public partial class LEDLightSourceControlEditPage : System.Windows.Forms.UserControl { LEDControlSerialPort controlSerialPort = new LEDControlSerialPort(); LEDControlParams LEDControlParams = new LEDControlParams(); public Action LogInfo; public LEDLightSourceControlEditPage() { Name = "LEDLightSourceControlEditPage"; Text = "光源控制配置"; InitializeComponent(); controlSerialPort.serialProtStatus += ControlSerialPort_serialProtStatus; controlSerialPort.serialProtDataReceived += ControlSerialPort_serialProtDataReceived; dataGridView1.MinimumSize = new System.Drawing.Size(0, 0); dataGridView1.MaximumSize = new System.Drawing.Size(0, 0); // 0表示无限制 } private void ControlSerialPort_serialProtDataReceived(string strInfo) { throw new NotImplementedException(); } private void ControlSerialPort_serialProtStatus(bool status) { throw new NotImplementedException(); } private void btnSerialPortRemove_Click(object sender, EventArgs e) { if (GlobalVar.dicSerialPort.ContainsKey(this.LEDControlParams.PortName)) { GlobalVar.dicSerialPort.Remove(this.LEDControlParams.PortName); } ConfigManager>.SaveConfig>(GlobalVar.dicSerialPort, GlobalVar.AllSerialPortPath); LoadLEDParamsToGrid(LEDControlParams); } private void btnSerialPortAdd_Click(object sender, EventArgs e) { if (InitParams()) { //判定本地是否存在串口配置,不存在->添加,存在更新 if (!GlobalVar.dicSerialPort.ContainsKey(this.LEDControlParams.PortName)) { GlobalVar.dicSerialPort.TryAdd(this.LEDControlParams.PortName, this.LEDControlParams); } else { GlobalVar.dicSerialPort[this.LEDControlParams.PortName] = this.LEDControlParams; } ConfigManager>.SaveConfig>(GlobalVar.dicSerialPort, GlobalVar.AllSerialPortPath); LoadLEDParamsToGrid(LEDControlParams); } else { MessageBox.Show("串口设置参数存在异常,请检查串口设置参数!"); } } private void btnSerialPortSave_Click(object sender, EventArgs e) { if (InitParams()) { controlSerialPort.LEDControlParams = LEDControlParams; if (!GlobalVar.dicSerialPort.ContainsKey(this.LEDControlParams.PortName)) { GlobalVar.dicSerialPort.TryAdd(this.LEDControlParams.PortName, this.LEDControlParams); } else { GlobalVar.dicSerialPort[this.LEDControlParams.PortName] = this.LEDControlParams; } ConfigManager>.SaveConfig>(GlobalVar.dicSerialPort, GlobalVar.AllSerialPortPath); LoadLEDParamsToGrid(LEDControlParams); } else { MessageBox.Show("串口设置参数存在异常,请检查串口设置参数!"); } } private void btnOpenPort_Click(object sender, EventArgs e) { controlSerialPort.LEDControlParams = LEDControlParams; if (!controlSerialPort.serialPort.IsOpen) { controlSerialPort.OpenPort(); } else { controlSerialPort.ClosePort(); Thread.Sleep(100); controlSerialPort.OpenPort(); } } private void btnClosePort_Click(object sender, EventArgs e) { controlSerialPort.ClosePort(); } private void LEDLightSourceControlEditPage_Load(object sender, EventArgs e) { if (GlobalVar.dicSerialPort == null && File.Exists(GlobalVar.AllSerialPortPath)) { GlobalVar.dicSerialPort = ConfigManager>.LoadConfig>(GlobalVar.AllSerialPortPath); } else if (File.Exists(GlobalVar.AllSerialPortPath)) { GlobalVar.dicSerialPort = ConfigManager>.LoadConfig>(GlobalVar.AllSerialPortPath); } cobPortName.Items.Clear(); cobPortName.Items.AddRange(SerialPort.GetPortNames()); cobParityBit.Items.Clear(); foreach (var item in Enum.GetValues(typeof(Parity))) { cobParityBit.Items.Add(item.ToString()); } cobStopBit.Items.Clear(); foreach (var item in Enum.GetValues(typeof(StopBits))) { cobStopBit.Items.Add(item.ToString()); } //切换成本地参数的第一个com配置 if (cobPortName.Items.Count > 0) { cobPortName.SelectedIndex = 0; } else { return; } if (cobParityBit.Items.Count > 0) { if (GlobalVar.dicSerialPort != null && GlobalVar.dicSerialPort.Count > 0 && GlobalVar.dicSerialPort.ContainsKey(cobPortName.Text)) { cobParityBit.Text = GlobalVar.dicSerialPort[cobPortName.Text].Parity.ToString(); } else { cobParityBit.SelectedIndex = 1; } } if (cobStopBit.Items.Count > 1) { if (GlobalVar.dicSerialPort != null && GlobalVar.dicSerialPort.Count > 0 && GlobalVar.dicSerialPort.ContainsKey(cobPortName.Text)) { cobStopBit.Text = GlobalVar.dicSerialPort[cobPortName.Text].StopBit.ToString(); } else { cobStopBit.SelectedIndex = 1; } } if (GlobalVar.dicSerialPort != null && GlobalVar.dicSerialPort.Count > 0 && GlobalVar.dicSerialPort.ContainsKey(cobPortName.Text)) { cobDataBit.Text = GlobalVar.dicSerialPort[cobPortName.Text].DataBit.ToString(); cobBaudRate.Text = GlobalVar.dicSerialPort[cobPortName.Text].DataBit.ToString(); } else { cobDataBit.SelectedIndex = 1; cobBaudRate.SelectedIndex = 1; } LoadLEDParamsToGrid(LEDControlParams); } private void cobPortName_SelectedIndexChanged(object sender, EventArgs e) { LEDControlParams.PortName = cobPortName.Text.Trim(); } private void cobBaudRate_SelectedIndexChanged(object sender, EventArgs e) { LEDControlParams.BaudRate = Convert.ToInt32(cobBaudRate.Text.Trim()); } private void cobDataBit_SelectedIndexChanged(object sender, EventArgs e) { LEDControlParams.DataBit = Convert.ToInt16(cobDataBit.Text.Trim()); } private void cobStopBit_SelectedIndexChanged(object sender, EventArgs e) { LEDControlParams.StopBit = (StopBits)Enum.Parse(typeof(StopBits), cobStopBit.Text); } private void cobParityBit_SelectedIndexChanged(object sender, EventArgs e) { LEDControlParams.Parity = (Parity)Enum.Parse(typeof(Parity), cobParityBit.Text); } private bool InitParams() { if (!string.IsNullOrEmpty(cobPortName.Text.Trim())) { LEDControlParams.PortName = cobPortName.Text.Trim(); } else { return false; } if (!string.IsNullOrEmpty(cobBaudRate.Text.Trim())) { LEDControlParams.BaudRate = Convert.ToInt32(cobBaudRate.Text.Trim()); } else { return false; } if (!string.IsNullOrEmpty(cobDataBit.Text.Trim())) { LEDControlParams.DataBit = Convert.ToInt16(cobDataBit.Text.Trim()); } else { return false; } if (!string.IsNullOrEmpty(cobStopBit.Text.Trim())) { LEDControlParams.StopBit = (StopBits)Enum.Parse(typeof(StopBits), cobStopBit.Text); } else { return false; } if (!string.IsNullOrEmpty(cobParityBit.Text.Trim())) { LEDControlParams.Parity = (Parity)Enum.Parse(typeof(Parity), cobParityBit.Text); } else { return false; } return true; } private void trackBarCH1_Scroll(object sender, EventArgs e) { nupdSetValueCH1.Value = trackBarCH1.Value; } private void trackBarCH2_Scroll(object sender, EventArgs e) { nupdSetValueCH2.Value = trackBarCH2.Value; } private void trackBarCH3_Scroll(object sender, EventArgs e) { nupdSetValueCH3.Value = trackBarCH3.Value; } private void trackBarCH4_Scroll(object sender, EventArgs e) { nupdSetValueCH4.Value = trackBarCH4.Value; } private void LoadLEDParamsToGrid(LEDControlParams param) { // 创建 DataTable,列名直接使用字段的备注文字 DataTable table = new DataTable(); table.Columns.Add("端口号"); table.Columns.Add("波特率"); table.Columns.Add("数据位"); table.Columns.Add("停止位"); table.Columns.Add("奇偶效验位"); table.Columns.Add("发送的指令"); // 新建一行并赋值 DataRow row = table.NewRow(); row["端口号"] = param.PortName; row["波特率"] = param.BaudRate.ToString(); row["数据位"] = param.DataBit.ToString(); row["停止位"] = param.StopBit.ToString(); // 枚举转为字符串 row["奇偶效验位"] = param.Parity.ToString(); // 枚举转为字符串 row["发送的指令"] = string.Join(";", param.SendData); // 列表转为逗号分隔字符串 table.Rows.Add(row); // 绑定到 DataGridView dataGridView1.DataSource = table; // 可选:调整列宽等外观 dataGridView1.AutoResizeColumns(); dataGridView1.ForeColor = Color.Black; dataGridView1.Dock = DockStyle.Fill; } private void nupdSetValueCH1_ValueChanged(object sender, EventArgs e) { try { trackBarCH1.Value = Convert.ToInt32(nupdSetValueCH1.Text); rtxtReceive.AppendText(controlSerialPort.SetIntensity("1", nupdSetValueCH1.Text) + "\r\n"); LEDControlParams.SendData.TryAdd("CH1", controlSerialPort.strRend.ToString()); rtxtSend.AppendText(LEDControlParams.SendData["CH1"] + "\r\n"); rtxtSend.Select(rtxtSend.TextLength, 0); rtxtSend.ScrollToCaret(); rtxtReceive.Select(rtxtReceive.TextLength, 0); rtxtReceive.ScrollToCaret(); } catch { } } private void nupdSetValueCH2_ValueChanged(object sender, EventArgs e) { try { trackBarCH2.Value = Convert.ToInt32(nupdSetValueCH2.Text); rtxtReceive.AppendText(controlSerialPort.SetIntensity("2", nupdSetValueCH2.Text) + "\r\n"); LEDControlParams.SendData.TryAdd("CH2", controlSerialPort.strRend.ToString()); rtxtSend.AppendText(LEDControlParams.SendData["CH2"] + "\r\n"); rtxtSend.Select(rtxtSend.TextLength, 0); rtxtSend.ScrollToCaret(); rtxtReceive.Select(rtxtReceive.TextLength, 0); rtxtReceive.ScrollToCaret(); } catch { } } private void nupdSetValueCH3_ValueChanged(object sender, EventArgs e) { try { trackBarCH3.Value = Convert.ToInt32(nupdSetValueCH3.Text); rtxtReceive.AppendText(controlSerialPort.SetIntensity("3", nupdSetValueCH3.Text) + "\r\n"); LEDControlParams.SendData.TryAdd("CH3", controlSerialPort.strRend.ToString()); rtxtSend.AppendText(LEDControlParams.SendData["CH3"] + "\r\n"); rtxtSend.Select(rtxtSend.TextLength, 0); rtxtSend.ScrollToCaret(); rtxtReceive.Select(rtxtReceive.TextLength, 0); rtxtReceive.ScrollToCaret(); } catch { } } private void nupdSetValueCH4_ValueChanged(object sender, EventArgs e) { try { trackBarCH4.Value = Convert.ToInt32(nupdSetValueCH4.Text); rtxtReceive.AppendText(controlSerialPort.SetIntensity("4", nupdSetValueCH4.Text) + "\r\n"); LEDControlParams.SendData.TryAdd("CH4", controlSerialPort.strRend.ToString()); rtxtSend.AppendText(LEDControlParams.SendData["CH4"] + "\r\n"); rtxtSend.Select(rtxtSend.TextLength, 0); rtxtSend.ScrollToCaret(); rtxtReceive.Select(rtxtReceive.TextLength, 0); rtxtReceive.ScrollToCaret(); } catch { } } private void LEDLightSourceControlEditPage_Resize(object sender, EventArgs e) { dataGridView1.Refresh(); } } }