首頁>技術>

最近同事在除錯硬體的串列埠通訊功能,由於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); } }));

編譯執行

由於時間的關係,我們將需要自動應答的指令和回覆內容硬編碼到程式碼裡面了,以後有時間可以增加一個配置介面,設定需要自動應答的指令並且可以儲存。

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 為Python圖形介面新增自定義函式功能