最近同事在調(diào)試硬件的串口通訊功能,由于PLC暫時(shí)還沒(méi)到,所以準(zhǔn)備用USB轉(zhuǎn)串口線連接在終端上,通過(guò)電腦USB口模擬串口收發(fā)功能。一開(kāi)始同事下載了一款串口調(diào)試工具,發(fā)現(xiàn)沒(méi)有自定義功能,比如通訊串口收到終端發(fā)送的數(shù)據(jù),需要自動(dòng)應(yīng)答對(duì)應(yīng)指令數(shù)據(jù)(ModBus 主從問(wèn)答方式)。為了配置同事硬件調(diào)試,準(zhǔn)備下載一個(gè)開(kāi)源的串口調(diào)試工具,增加自定義應(yīng)答功能。
Serial port
串口調(diào)試開(kāi)源軟件搜索
打開(kāi)github網(wǎng)站搜索串口調(diào)試,我們搜索到一款名為WPFSerialAssitan的串口調(diào)試軟件感覺(jué)比較符合我們的要求。其README.md文件的介紹如下:
WPFSerialAssitan 串口助手是一款基于C#及WPF的串口助手軟件。本串口助手操作方便,UI簡(jiǎn)潔。軟件實(shí)現(xiàn)了基本的串口通訊需要的功能,開(kāi)發(fā)者可以基于此添加自定義的功能。此外,可以基于此開(kāi)發(fā)出一些簡(jiǎn)單的串口控制類軟件。
我們將代碼克隆到本地,當(dāng)然也可以先f(wàn)ork一份到自己的倉(cāng)庫(kù)再克隆到本地,這樣修改后我們可以將更改推送到github上。我們使用vs2019打開(kāi)工程,查看下其基本的代碼結(jié)構(gòu)。
WPFSerialAssitan code
串口調(diào)試開(kāi)源軟件修改
我們可以看到核心的代碼,基本在EventHandler.cs、core.cs 等2個(gè)類文件中,我們定義一個(gè)Dictionary,將收到的指令和需要應(yīng)答的指令一一定義起來(lái)。
WPFSerialAssitan even code
然后我們修改紅色方框內(nèi)的代碼,對(duì)收到的數(shù)據(jù)進(jìn)行判斷,如果在屬于字典autoReply則自動(dòng)將對(duì)應(yīng)的內(nèi)容應(yīng)答到串口。
string recvString = Utilities.BytesToText(recvBuffer, receiveMode, serialPort.Encoding);
this.Dispatcher.Invoke(new Action(() =>
{
if (showReceiveData)
{
// 根據(jù)顯示模式顯示接收到的字節(jié).
recvDataRichTextBox.AppendText("接收: " + recvString + System.Environment.NewLine);
recvDataRichTextBox.ScrollToEnd();
}
dataRecvStatusBarItem.Visibility = Visibility.Collapsed;
//我們加入自動(dòng)回復(fù)功能
//如果收到的指令配置在自動(dòng)應(yīng)答字典內(nèi),則自動(dòng)回復(fù)Key對(duì)應(yīng)的Value
if (autoReply.ContainsKey(recvString)) {
SerialPortWrite(autoReply[recvString]);
recvDataRichTextBox.AppendText("發(fā)送: " + autoReply[recvString] + System.Environment.NewLine);
}
}));
編譯運(yùn)行
由于時(shí)間的關(guān)系,我們將需要自動(dòng)應(yīng)答的指令和回復(fù)內(nèi)容硬編碼到代碼里面了,以后有時(shí)間可以增加一個(gè)配置界面,設(shè)置需要自動(dòng)應(yīng)答的指令并且可以保存。
串口調(diào)試助手