对接效果测试工具电子秤对接文档二、VS2022界面设计安装System.IO.Ports解析数据引用using System.IO.Ports;代码namespace WinFormsApp2{ public partial class FormMeter : Form { private SerialPort serialPort = new SerialPort(); public FormMeter() { InitializeComponent(); InitializeSettings(); this.FormClosing += MainForm_FormClosing; } private void InitializeSettings() { // 初始化默认值 cmbBaudRate.SelectedIndex = 0; cmbDataBits.SelectedIndex = 3; cmbStopBits.SelectedIndex = 0; cmbParity.SelectedIndex = 0; RefreshPortList(); } //刷新串口 private void RefreshPortList() { cmbPort.Items.Clear(); string[] ports = SerialPort.GetPortNames(); cmbPort.Items.AddRange(ports); if (ports.Length > 0) cmbPort.SelectedIndex = 0; } //打开串口 private void btnOpen_Click(object sender, EventArgs e) { if (!serialPort.IsOpen) { try { serialPort.PortName = cmbPort.Text; serialPort.BaudRate = int.Parse(cmbBaudRate.Text); serialPort.DataBits = int.Parse(cmbDataBits.Text); serialPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cmbStopBits.Text); serialPort.Parity = (Parity)Enum.Parse(typeof(Parity), cmbParity.Text); serialPort.Open(); btnOpen.Text = "关闭串口"; serialPort.DataReceived += SerialPort_DataReceived; } catch (Exception ex) { MessageBox.Show($"打开失败: {ex.Message}"); } } else { serialPort.Close(); btnOpen.Text = "打开串口"; } } //关闭串口 private void btnSend_Click(object sender, EventArgs e) { if (serialPort.IsOpen && !string.IsNullOrEmpty(txtSend.Text)) { try { serialPort.WriteLine(txtSend.Text); txtReceived.AppendText($"[发送] {DateTime.Now:HH:mm:ss}: {txtSend.Text}\r\n"); txtSend.Clear(); } catch (Exception ex) { MessageBox.Show($"发送失败: {ex.Message}"); } } } //接收事件 private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { string data = serialPort.ReadExisting(); this.BeginInvoke(new Action(() => { txtReceived.AppendText($"{data}\r\n"); txtReceived.ScrollToCaret(); //解析数据 int SignStart = data.IndexOf(":");//标识位 if (SignStart < 0) return; int NumberStart = 5;//起始位 int NumberBits = 5;//截取长度 string dataPart = data.Substring(SignStart + NumberStart, NumberBits); // 数据段 txtSend.Invoke(new Action(() => { txtSend.Text = dataPart; })); })); } //关闭窗口 private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { if (serialPort.IsOpen) serialPort.Close(); } }}
using System.IO.Ports;
namespace WinFormsApp2{ public partial class FormMeter : Form { private SerialPort serialPort = new SerialPort(); public FormMeter() { InitializeComponent(); InitializeSettings(); this.FormClosing += MainForm_FormClosing; } private void InitializeSettings() { // 初始化默认值 cmbBaudRate.SelectedIndex = 0; cmbDataBits.SelectedIndex = 3; cmbStopBits.SelectedIndex = 0; cmbParity.SelectedIndex = 0; RefreshPortList(); } //刷新串口 private void RefreshPortList() { cmbPort.Items.Clear(); string[] ports = SerialPort.GetPortNames(); cmbPort.Items.AddRange(ports); if (ports.Length > 0) cmbPort.SelectedIndex = 0; } //打开串口 private void btnOpen_Click(object sender, EventArgs e) { if (!serialPort.IsOpen) { try { serialPort.PortName = cmbPort.Text; serialPort.BaudRate = int.Parse(cmbBaudRate.Text); serialPort.DataBits = int.Parse(cmbDataBits.Text); serialPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cmbStopBits.Text); serialPort.Parity = (Parity)Enum.Parse(typeof(Parity), cmbParity.Text); serialPort.Open(); btnOpen.Text = "关闭串口"; serialPort.DataReceived += SerialPort_DataReceived; } catch (Exception ex) { MessageBox.Show($"打开失败: {ex.Message}"); } } else { serialPort.Close(); btnOpen.Text = "打开串口"; } } //关闭串口 private void btnSend_Click(object sender, EventArgs e) { if (serialPort.IsOpen && !string.IsNullOrEmpty(txtSend.Text)) { try { serialPort.WriteLine(txtSend.Text); txtReceived.AppendText($"[发送] {DateTime.Now:HH:mm:ss}: {txtSend.Text}\r\n"); txtSend.Clear(); } catch (Exception ex) { MessageBox.Show($"发送失败: {ex.Message}"); } } } //接收事件 private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { string data = serialPort.ReadExisting(); this.BeginInvoke(new Action(() => { txtReceived.AppendText($"{data}\r\n"); txtReceived.ScrollToCaret(); //解析数据 int SignStart = data.IndexOf(":");//标识位 if (SignStart < 0) return; int NumberStart = 5;//起始位 int NumberBits = 5;//截取长度 string dataPart = data.Substring(SignStart + NumberStart, NumberBits); // 数据段 txtSend.Invoke(new Action(() => { txtSend.Text = dataPart; })); })); } //关闭窗口 private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { if (serialPort.IsOpen) serialPort.Close(); } }}
namespace WinFormsApp2
{
public partial class FormMeter : Form
private SerialPort serialPort = new SerialPort();
public FormMeter()
InitializeComponent();
InitializeSettings();
this.FormClosing += MainForm_FormClosing;
}
private void InitializeSettings()
// 初始化默认值
cmbBaudRate.SelectedIndex = 0;
cmbDataBits.SelectedIndex = 3;
cmbStopBits.SelectedIndex = 0;
cmbParity.SelectedIndex = 0;
RefreshPortList();
//刷新串口
private void RefreshPortList()
cmbPort.Items.Clear();
string[] ports = SerialPort.GetPortNames();
cmbPort.Items.AddRange(ports);
if (ports.Length > 0) cmbPort.SelectedIndex = 0;
//打开串口
private void btnOpen_Click(object sender, EventArgs e)
if (!serialPort.IsOpen)
try
serialPort.PortName = cmbPort.Text;
serialPort.BaudRate = int.Parse(cmbBaudRate.Text);
serialPort.DataBits = int.Parse(cmbDataBits.Text);
serialPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cmbStopBits.Text);
serialPort.Parity = (Parity)Enum.Parse(typeof(Parity), cmbParity.Text);
serialPort.Open();
btnOpen.Text = "关闭串口";
serialPort.DataReceived += SerialPort_DataReceived;
catch (Exception ex)
MessageBox.Show($"打开失败: {ex.Message}");
else
serialPort.Close();
btnOpen.Text = "打开串口";
//关闭串口
private void btnSend_Click(object sender, EventArgs e)
if (serialPort.IsOpen && !string.IsNullOrEmpty(txtSend.Text))
serialPort.WriteLine(txtSend.Text);
txtReceived.AppendText($"[发送] {DateTime.Now:HH:mm:ss}: {txtSend.Text}\r\n");
txtSend.Clear();
MessageBox.Show($"发送失败: {ex.Message}");
//接收事件
private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
string data = serialPort.ReadExisting();
this.BeginInvoke(new Action(() =>
txtReceived.AppendText($"{data}\r\n");
txtReceived.ScrollToCaret();
//解析数据
int SignStart = data.IndexOf(":");//标识位
if (SignStart < 0) return;
int NumberStart = 5;//起始位
int NumberBits = 5;//截取长度
string dataPart = data.Substring(SignStart + NumberStart, NumberBits); // 数据段
txtSend.Invoke(new Action(() =>
txtSend.Text = dataPart;
}));
//关闭窗口
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
if (serialPort.IsOpen) serialPort.Close();