项目概述
串口调试工具是一款功能丰富、界面友好的串口通信调试软件,专为嵌入式开发、工业控制和物联网设备调试而设计。该工具不仅支持基本的串口通信功能,还集成了Modbus协议生成功能,能够帮助开发者快速构建和测试Modbus通信。
主要特点
- 支持多种串口参数配置(波特率、停止位等)
- 支持ASCII和HEX两种发送模式
- 支持单条发送和循环发送
- 集成Modbus协议生成器,支持16位地址空间
- 扩展区域支持11组预设命令
- 实时日志显示和保存功能
- 支持串口状态可视化显示
核心功能介绍
1. 串口参数配置
工具支持灵活的串口参数配置,包括串口号、波特率和停止位等。系统会自动检测可用串口,并记住用户的配置偏好。
2. 数据发送功能
- 单条发送:支持ASCII和HEX两种模式,可自定义发送间隔
- 循环发送:可设置发送间隔,持续发送数据
- 扩展区域:提供11组预设命令,支持批量发送和循环发送
3. Modbus协议生成
内置Modbus协议生成器,支持:
- 设备地址设置
- 功能码配置
- 16位起始地址支持(0-65535)
- 寄存器数量设置
- 自动计算CRC校验
4. 日志管理
- 实时显示串口通信数据
- 支持日志保存到文件
- 日志自动滚动和限制
技术架构分析
系统架构
该工具采用C# WinForms开发,主要组件包括:
- UI层:基于WinForms的图形界面,包含各种控件和布局
- 业务逻辑层:处理串口通信、协议生成等核心功能
- 工具层:使用Dijing.SerialPortHelper进行串口操作
- 配置层:使用Properties.Settings管理用户配置
核心技术栈
- 开发语言:C#
- 框架:.NET Framework
- 串口库:Dijing.SerialPortHelper
- 日志库:Serilog
- UI框架:WinForms
关键代码实现解析
1. 串口初始化与配置
private void HomeForm_Load(object sender, EventArgs e)
{
// 初始化日志
Dijing.SerilogExt.InitLog.SetLog(Dijing.SerilogExt.RunModeEnum.Debug);
Dijing.SerilogExt.InMemorySink.OnLogReceivedEvent += InMemorySink_OnLogReceivedEvent;
// 初始化串口状态按钮
btnSerialPortState.FlatStyle = FlatStyle.Flat;
btnSerialPortState.FlatAppearance.BorderSize = 0;
// 自动检测并填充可用串口
var portNames = SerialPort.GetPortNames();
if (portNames != null && portNames.Length > 0)
{
comSerialPortName.Items.AddRange(portNames);
// 恢复上次配置
if (!Properties.Settings.Default.PortName.IsNullorEmpty() && portNames.Contains(Properties.Settings.Default.PortName))
comSerialPortName.Text = Properties.Settings.Default.PortName;
else
comSerialPortName.Text = comSerialPortName.Items[0]?.ToString();
}
// 恢复其他配置
if (!Properties.Settings.Default.Baud.IsNullorEmpty())
comBaud.Text = Properties.Settings.Default.Baud;
// 填充停止位选项
comboBoxStopbits.Items.AddRange(Enum.GetNames(typeof(StopBits)));
if (!Properties.Settings.Default.StopBits.IsNullorEmpty())
comboBoxStopbits.Text = Properties.Settings.Default.StopBits;
// 恢复其他配置...
}
2. Modbus协议生成实现
private void btcModbusGenerate_Click(object sender, EventArgs e)
{
List<byte> frame = new List<byte>();
// 设备地址
byte deviceAddress = Convert.ToByte(txtBus.Text, 16);
frame.Add(deviceAddress);
// 功能码
byte code = Convert.ToByte(txtCode.Text, 16);
frame.Add(code);
// 起始地址 (2字节,大端序)
ushort startAddress = Convert.ToUInt16(txtAddr.Text, 16);
frame.Add((byte)(startAddress >> 8));
frame.Add((byte)(startAddress & 0xFF));
// 寄存器数量 (2字节,大端序)
ushort numberOfRegisters = Convert.ToUInt16(txtCountValue.Text, 16);
frame.Add((byte)(numberOfRegisters >> 8));
frame.Add((byte)(numberOfRegisters & 0xFF));
// 计算CRC校验
ushort crc = CalculateCRC(frame.ToArray());
frame.Add((byte)(crc & 0xFF));
frame.Add((byte)(crc >> 8));
txtSendData.Text = BitConverter.ToString(frame.ToArray()).Replace("-", " ");
chkHexSend.Checked = true;
}
3. CRC16校验计算
private ushort CalculateCRC(byte[] data)
{
ushort crc = 0xFFFF;
for (int i = 0; i < data.Length; i++)
{
crc ^= data[i];
for (int j = 0; j < 8; j++)
{
if ((crc & 0x0001) == 0x0001)
{
crc >>= 1;
crc ^= 0xA001;
}
else
{
crc >>= 1;
}
}
}
return crc;
}
4. 数据发送实现
private void Send()
{
byte[] buff;
if (_hexSend)
{
if (_sendData.Contains("-"))
buff = EncodingHelper.HexstrToByteArray(_sendData, "-");
else
buff = EncodingHelper.HexstrToByteArray(_sendData, " ");
}
else
{
buff = Encoding.ASCII.GetBytes(_sendData);
}
Properties.Settings.Default.SendData = _sendData;
Properties.Settings.Default.Save();
var sendInterval = Properties.Settings.Default.SendInterval;
do
{
_serialPortHelper.SendData(buff);
Task.Delay(sendInterval).Wait();
} while (_sendCycle);
}
使用方法说明
基本使用步骤
- 选择串口:从下拉列表中选择要使用的串口号
- 配置参数:设置波特率和停止位
- 打开串口:点击"打开串口"按钮
- 发送数据:
- 在主发送区输入数据
- 选择发送模式(ASCII或HEX)
- 点击"发送"按钮
Modbus协议生成
- 设置参数:
- 设备地址:输入从设备地址(1-247)
- 功能码:输入功能码(如0x03读取保持寄存器)
- 起始地址:输入寄存器起始地址(0-65535)
- 数量/值:输入要操作的寄存器数量
- 生成协议:点击"生成modbus"按钮
- 发送数据:生成的协议数据会自动填充到发送区,点击"发送"按钮
扩展区域使用
- 展开扩展区:点击"扩展"按钮
- 配置命令:在11个预设位置中输入命令
- 批量发送:点击对应序号的按钮发送单个命令
- 循环发送:勾选"自动循环发送",设置间隔后开始循环发送
程序界面

实际应用案例
案例1:Modbus设备调试
场景:调试工业现场的Modbus RTU设备
步骤:
- 连接设备到电脑串口
- 在工具中选择对应的串口和参数
- 使用Modbus协议生成器创建读取命令
- 发送命令并观察设备响应
- 根据响应调整命令参数
优势:快速生成标准Modbus协议,支持16位地址空间,无需手动计算CRC校验
案例2:嵌入式设备通信测试
场景:测试自定义串口通信协议的嵌入式设备
步骤:
- 在扩展区域配置常用命令
- 使用循环发送功能持续发送测试数据
- 观察设备响应并分析日志
- 调整命令参数直至通信正常
优势:支持批量命令管理,循环发送功能减少重复操作,日志记录便于分析
案例3:传感器数据采集
场景:通过串口采集Modbus传感器数据
步骤:
- 配置Modbus读取命令(功能码0x03)
- 设置合适的地址和寄存器数量
- 使用循环发送功能定时采集数据
- 保存日志用于数据分析
优势:自动生成标准Modbus命令,定时采集功能简化数据采集流程
技术亮点
-
16位地址支持:修复了Modbus协议生成器的地址限制问题,支持完整的16位地址空间(0-65535)
-
灵活的发送模式:支持ASCII和HEX两种发送模式,满足不同场景需求
-
扩展命令管理:提供11组预设命令,支持批量管理和发送
-
智能配置管理:自动保存用户配置,下次启动时恢复
-
实时日志系统:集成Serilog日志库,提供实时、详细的通信日志
-
可视化状态显示:通过颜色变化直观显示串口状态
总结
串口调试工具是一款功能全面、易于使用的串口通信调试软件,特别适合嵌入式开发、工业控制和物联网设备调试场景。其集成的Modbus协议生成器解决了传统工具的地址限制问题,支持完整的16位地址空间,为Modbus设备调试提供了便捷工具。
通过本文的介绍,相信读者已经对这款工具的功能和使用方法有了全面了解。无论是专业开发人员还是业余爱好者,都可以通过这款工具快速开展串口通信调试工作,提高开发效率。
项目地址:[HGSerialPortTool]
作者:willhuo@outlook.com
版本:最新版本支持16位Modbus地址空间

9781

被折叠的 条评论
为什么被折叠?



