最近同事在調試硬件的串口通訊功能,由于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);
}
}));
編譯運行
由于時間的關系,我們將需要自動應答的指令和回復內容硬編碼到代碼里面了,以后有時間可以增加一個配置界面,設置需要自動應答的指令并且可以保存。

串口調試助手