最近同事在除錯硬體的串列埠通訊功能,由於PLC暫時還沒到,所以準備用USB轉串列埠線連線在終端上,通過電腦USB口模擬串列埠收發功能。一開始同事下載了一款串列埠除錯工具,發現沒有自定義功能,比如通訊串列埠收到終端傳送的資料,需要自動應答對應指令資料(ModBus 主從問答方式)。為了配置同事硬體除錯,準備下載一個開源的串列埠除錯工具,增加自定義應答功能。
串列埠除錯開源軟體搜尋
開啟github網站搜尋串列埠除錯,我們搜尋到一款名為WPFSerialAssitan的串列埠除錯軟體感覺比較符合我們的要求。其README.md檔案的介紹如下:
WPFSerialAssitan 串列埠助手是一款基於C#及WPF的串列埠助手軟體。本串列埠助手操作方便,UI簡潔。軟體實現了基本的串列埠通訊需要的功能,開發者可以基於此新增自定義的功能。此外,可以基於此開發出一些簡單的串列埠控制類軟體。
我們將程式碼克隆到本地,當然也可以先fork一份到自己的倉庫再克隆到本地,這樣修改後我們可以將更改推送到github上。我們使用vs2019開啟工程,檢視下其基本的程式碼結構。
串列埠除錯開源軟體修改
我們可以看到核心的程式碼,基本在EventHandler.cs、core.cs 等2個類檔案中,我們定義一個Dictionary,將收到的指令和需要應答的指令一一定義起來。
然後我們修改紅色方框內的程式碼,對收到的資料進行判斷,如果在屬於字典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); } }));
編譯執行
由於時間的關係,我們將需要自動應答的指令和回覆內容硬編碼到程式碼裡面了,以後有時間可以增加一個配置介面,設定需要自動應答的指令並且可以儲存。
最新評論