上位機開發之假裝有設備,使用 C# 模擬串口設備
前言
據說不會上位機和游戲開發,都不好意思說自己會 C#
正好這倆我都不太會??
這不來點一下上位機的技能樹
這次的需求很簡單,用 C# 模擬一個設備協議,實現不用去現場對接設備,也能先開發和調試上位機程序。
實際設備是用 RS-485 標準進行通信,模擬跑通之后,到現場只需要把RS-485 總線(A/B 差分線)插到 USB-RS485 轉換器上就可以實現數據讀取和指令下發了。
PS: 最近把我的博客小重構了一下,歡迎訪問體驗一下: http://blog.deali.cn/
先放一些截圖作為預告
本文要介紹只是最基礎的前期工作
實際上這個項目要實現的是一個簡單的物聯網平臺,不只是對接幾臺設備
系統的初版已經完成了,這里我先放幾張截圖

實時圖表

設備控制

就這幾個吧,其他的還不是很完善
前提
OK 說回正題,模擬串口設備需要的前提是這些
-
首先已經拿到了詳細的設備協議文檔
這個很關鍵,誰也沒法摸黑去開發呀
-
操作系統: Windows/Linux
很神奇吧,Linux居然也能開發上位機?事實上 Linux 模擬設備更方便
不過為了方便開發調試,我這里還是以 Windows 系統為例
串口驅動
Windows 上模擬串口驅動: com0com
這個工具可以在系統里創建一對連通的 com 串口,比如 com3 <-> com4
在任何一端發信息,另一端都可以讀取
我們就是用這個方式來模擬串口設備
PS: com0com 的圖形界面需要安裝 net framework 3.5 老古董才能用,我直接用命令行
Linux的話可以使用 tty0tty
串口調試工具
串口調試工具開源的有很多
我這次試用了 llcom 和 Wu.CommTool
推薦 llcom,使用比較直觀
項目地址: https://github.com/chenxuuu/llcom
可以直接在命令行安裝
winget install llcom
界面長這樣

com0com常用命令
前面說了 com0com 的圖形界面需要安裝 net framework 3.5
我肯定是不想安裝這種老古董來污染我的電腦環境的
好在還有命令行可以用
這里列一些常用命令
查看當前有哪些虛擬串口
list
輸出會顯示每一對虛擬串口,例如:
CNCA0 PortName=COM5
CNCB0 PortName=COM6
這說明有一對虛擬串口:COM5 <-> COM6。
創建一對新的虛擬串口
install PortName=COM5 PortName=COM6
這會創建一對虛擬串口,分別命名為 COM5 和 COM6,它們互相連通。
?? 以后就可以讓:
- 模擬器程序 監聽
COM5 - 上位機/主程序 打開
COM6
這樣它們互相通信,等同于 RS-485 設備在現場。
刪除一對虛擬串口
remove 0
刪除標識符為 CNCA0 和 CNCB0 的那一對(0 是編號,可以從 list 查到)。
修改已有端口的參數
比如要修改 CNCA0 的端口號:
change CNCA0 PortName=COM7
清理所有虛擬串口
uninstall
?? 注意,這會把所有 com0com 的虛擬端口全刪掉。
開發流程
-
創建一對虛擬串口:
install PortName=COM3 PortName=COM4 -
編寫 模擬器程序(C#),監聽
COM3。 -
上位機程序/串口調試助手連
COM4,輸入指令,收到模擬器的返回
PS: 創建串口后在設備管理器可以看到
串口通信程序
用 C# 自帶了 System.IO.Ports 工具,可以很方便實現串口通信,難怪那么多人用 C# 開發上位機
不過在 .NET Core 時代,這個庫需要通過 nuget 安裝
dotnet package add System.IO.Ports
這里我寫了一個簡單的串口模擬程序
using System.IO.Ports;
using System.Text;
Console.WriteLine("=== 協議模擬器 ===");
// 打開虛擬串口 (比如 COM5)
const string portName = "COM5";
var port = new SerialPort(portName, 9600, Parity.None, 8, StopBits.One);
port.Encoding = Encoding.ASCII;
port.Open();
Console.WriteLine($"模擬設備已啟動,監聽 {portName}...");
port.DataReceived += (s, e) => {
try {
var cmd = port.ReadExisting();
Console.WriteLine($"收到: {cmd}");
string response;
// 協議模擬邏輯 (這里舉例)
if (cmd.Contains("temp", StringComparison.OrdinalIgnoreCase)) {
// 模擬返回溫度
response = "01,temp=25.6\n";
}
else if (cmd.Contains("hum", StringComparison.OrdinalIgnoreCase)) {
// 模擬返回濕度
response = "01,hum=60%\n";
}
else {
// 默認回應
response = "01,ack\n";
}
}
catch (TimeoutException) {
// 超時繼續監聽
}
catch (Exception ex) {
Console.WriteLine($"錯誤: {ex.Message}");
}
};
實現效果
使用串口調試工具發送指令,C# 寫的模擬程序這邊收到后就返回響應了

小結
IT寒冬什么的已經被說了好多次了
顯而易見的,互聯網的發展空間基本到頭了,這倆年火熱的AI也只是縮減了一批低端崗位而已,并不能把蛋糕做大
但換個角度看,正因為互聯網不再是藍海,才讓我們重新注意到那些“傳統”卻始終不可或缺的領域。上位機開發就是這樣一個方向。它不像移動互聯網那樣卷,但在工業控制、科研實驗、自動化測試等場景里卻有著穩定而長期的需求。無論是實驗室里的一臺設備,還是生產線上成百上千臺 PLC,最終都需要一個可靠、可視化的上位機來管理和監控。
對入門者來說,C# 提供了友好的語法和強大的生態,足夠快速地做出第一個能跑的 Demo —— 一個串口助手、一個數據采集可視化界面,甚至是一個小型的測試管理系統。隨著學習深入,還可以接觸到 Modbus、CAN 總線、OPC 等更復雜的協議,逐漸走向真正的工業應用。
未來的趨勢不會停在“傳統上位機”上。跨平臺框架(.NET MAUI、Avalonia)、前后端融合(C# + Web 技術),甚至 AI 輔助的數據分析,都可能成為上位機開發的新方向。換句話說,這條路并不狹窄,它只是需要你把眼光從“卷互聯網”轉向“深耕行業”。
所以,如果你正處在迷茫期,不妨先從一個簡單的上位機小項目開始做起。哪怕是一個串口監控工具,都可能成為你進入這個領域的第一塊敲門磚。

浙公網安備 33010602011771號