最近同事在调试硬件的串口通讯功能,由于PLC暂时还没到,所以准备用USB转串口线连接在终端上,通过电脑USB口模拟串口收发功能。一开始同事下载了一款串口调试工具,发现没有自定义功能,比如通讯串口收到终端发送的数据,需要自动应答对应指令数据(ModBus 主从问答方式)。为了配置同事硬件调试,准备下载一个开源的串口调试工具,增加自定义应答功能。
Serial port
串口调试开源软件搜索
打开github网站搜索串口调试,我们搜索到一款名为WPFSerialAssitan的串口调试软件感觉比较符合我们的要求。其README.md文件的介绍如下:
WPFSerialAssitan 串口助手是一款基于C#及WPF的串口助手软件。本串口助手操作方便,UI简洁。软件实现了基本的串口通讯需要的功能,开发者可以基于此添加自定义的功能。此外,可以基于此开发出一些简单的串口控制类软件。
我们将代码克隆到本地,当然也可以先fork一份到自己的仓库再克隆到本地,这样修改后我们可以将更改推送到github上。我们使用vs2019打开工程,查看下其基本的代码结构。
WPFSerialAssitan code
串口调试开源软件修改
我们可以看到核心的代码,基本在EventHandler.cs、core.cs 等2个类文件中,我们定义一个Dictionary,将收到的指令和需要应答的指令一一定义起来。
WPFSerialAssitan even code
然后我们修改红色方框内的代码,对收到的数据进行判断,如果在属于字典autoReply则自动将对应的内容应答到串口。
string recvString = Utilities.BytesToText(recvBuffer, receiveMode, serialPort.Encoding);
this.Dispatcher.Invoke(new Action(() =>
{
if (showReceiveData)
{
// 根据显示模式显示接收到的字节.
recvDataRichTextBox.AppendText("接收: " + recvString + System.Environment.NewLine);
recvDataRichTextBox.ScrollToEnd();
}
dataRecvStatusBarItem.Visibility = Visibility.Collapsed;
//我们加入自动回复功能
//如果收到的指令配置在自动应答字典内,则自动回复Key对应的Value
if (autoReply.ContainsKey(recvString)) {
SerialPortWrite(autoReply[recvString]);
recvDataRichTextBox.AppendText("发送: " + autoReply[recvString] + System.Environment.NewLine);
}
}));
编译运行
由于时间的关系,我们将需要自动应答的指令和回复内容硬编码到代码里面了,以后有时间可以增加一个配置界面,设置需要自动应答的指令并且可以保存。
串口调试助手