using Microsoft.VisualBasic.Devices; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace SLC1_N { public partial class Form_PLC_Serialport : Form { public Form_PLC_Serialport() { InitializeComponent(); } private void Form_PLCconnect_Load(object sender, EventArgs e) { // PLC cb_PLCPortName.Text = Form1.f1.HCPLC_client.SerialPort; cb_PLCBaudRate.Text = Form1.f1.HCPLC_client.Baudrate.ToString(); if (Form1.f1.HCPLC_client.Connected) { lb_PLCCom_status.Text = "已连接"; lb_PLCCom_status.ForeColor = Color.Green; bt_PLCConnect.Enabled = false; cb_PLCPortName.Enabled = false; cb_PLCBaudRate.Enabled = false; } else { lb_PLCCom_status.Text = "未连接"; lb_PLCCom_status.ForeColor = Color.Red; bt_PLCConnect.Enabled = true; cb_PLCPortName.Enabled = true; cb_PLCBaudRate.Enabled = true; } } // 连接 private void bt_PLCConnect_Click(object sender, EventArgs e) { try { if (Form1.f1.HCPLC_client != null && Form1.f1.HCPLC_client.Connected) { lock (Form1.f1.plcLock) // 加锁 Form1.f1.HCPLC_client.Disconnect(); } Form1.f1.HCPLC_client.SerialPort = cb_PLCPortName.Text; Form1.f1.HCPLC_client.Baudrate = Convert.ToInt32(cb_PLCBaudRate.Text); // 波特率 Form1.f1.HCPLC_client.Parity = System.IO.Ports.Parity.None; // 无校验 Form1.f1.HCPLC_client.StopBits = System.IO.Ports.StopBits.Two; // 停止位 lock (Form1.f1.plcLock) // 加锁 Form1.f1.HCPLC_client.Connect(); // Form1.f1.PLC_client.Open(); if (Form1.f1.HCPLC_client != null && Form1.f1.HCPLC_client.Connected) { lb_PLCCom_status.Text = "已连接"; lb_PLCCom_status.ForeColor = Color.Green; cb_PLCPortName.Enabled = false; cb_PLCBaudRate.Enabled = false; bt_PLCConnect.Enabled = false; var jsconfig = new JsonConfig("config.json"); jsconfig.SetValue("PLC_PortName", cb_PLCPortName.Text); jsconfig.SetValue("PLC_BaudRate", cb_PLCBaudRate.Text); } } catch (Exception ex) { Console.WriteLine($"PLC连接异常: {ex.Message}"); } } // 刷新 private void bt_PLCRefresh_Click(object sender, EventArgs e) { cb_PLCPortName.Items.Clear(); string[] ports = System.IO.Ports.SerialPort.GetPortNames(); cb_PLCPortName.Items.AddRange(ports); } // 断开 private void bt_PLCBreak_Click(object sender, EventArgs e) { if (Form1.f1.HCPLC_client.Connected) { lock (Form1.f1.plcLock) // 加锁 Form1.f1.HCPLC_client.Disconnect(); } lb_PLCCom_status.Text = "未连接"; lb_PLCCom_status.ForeColor = Color.Red; cb_PLCPortName.Enabled = true; cb_PLCBaudRate.Enabled = true; bt_PLCConnect.Enabled = true; } } }