当前位置:首页>Linux>国产 Linux 工控机上位机开发!Avalonia Modbus RTU 串口通信最简 Demo

国产 Linux 工控机上位机开发!Avalonia Modbus RTU 串口通信最简 Demo

  • 2026-09-09 18:57:23
国产 Linux 工控机上位机开发!Avalonia Modbus RTU 串口通信最简 Demo

一、背景与选型

随着国产工控机在工业自动化领域的普及,Linux 系统凭借稳定、安全、可裁剪的优势成为上位机部署的首选。传统 WinForm/WPF 方案无法直接跨平台运行,而 Avalonia UI + .NET 技术栈凭借原生跨平台能力,成为国产 Linux 工控机上位机开发的最优解之一。

本文提供一个可直接运行的 Modbus RTU 串口通信最简 Demo,涵盖从环境搭建到 Linux 部署的完整流程。

技术栈选型

模块
选型
说明
UI 框架
Avalonia 11.x
跨平台 XAML 风格,API 接近 WPF
运行时
.NET 8
Linux 原生支持,性能优异
Modbus 库
NModbus4.NetCore
成熟稳定,支持 RTU/TCP/ASCII
串口底层
System.IO.Ports
.NET 内置,跨平台兼容


二、环境准备

2.1 开发环境(Windows)

  1. 安装 Visual Studio 2022 + .NET 8 SDK
  2. 安装 Avalonia 模板:
dotnet new install Avalonia.Templates
3.创建 Avalonia MVVM 项目:
dotnet new avalonia.mvvm -o ModbusRtuDemo
2.2 NuGet 依赖安装
dotnet add package NModbus4.NetCoredotnet add package System.IO.Ports

2.3 Linux 工控机环境

国产工控机(如飞腾、瑞芯微、龙芯 x86/ARM)预装 Ubuntu/Debian 系系统:

Linux 串口设备路径约定:
  • USB 转 485/232:/dev/ttyUSB0、/dev/ttyUSB1
  • 板载串口:/dev/ttyS0、/dev/ttyS1
  • CDC 设备:/dev/ttyACM0

三、最简 Demo 核心代码

3.1 主界面 XAML(MainView.axaml)

3.2 ViewModel 核心逻辑(MainViewModel.cs)
这是整个 Demo 的核心代码,仅几十行即可实现 Modbus RTU 通信:

关键点说明:

RtsEnable = false 和 DtrEnable = false 在 Linux 下必须关闭,否则会导致串口异常

必须设置 ReadTimeout,否则阻塞读取会挂起线程

Modbus 操作建议放后台线程,最简 Demo 直接同步调用仅作演示


四、Linux 工控机部署
4.1 发布程序
dotnet publish -c Release -r linux-x64 --self-contained false
ARM 架构工控机(瑞芯微 / 飞腾)改用:
dotnet publish -c Release -r linux-arm64 --self-contained false
4.2 上传并运行
# 上传到工控机(scp 或 U 盘)cd publish目录chmod +x ModbusRtuDemo./ModbusRtuDemo
4.3 串口调试排查
# 查看可用串口ls /dev/ttyUSB* /dev/ttyS*# 测试串口权限cat /dev/ttyUSB0# 查看串口芯片驱动dmesg | grep tty

五、常见坑点总结
  • Linux 串口权限不足
    :必须加入 dialout 组,不要用 sudo 跑 GUI 程序
  • 串口名写错
    :Windows 是 COM3,Linux 是 /dev/ttyUSB0,注意区分
  • RTS/DTR 信号干扰
    :Linux 下默认启用会导致 485 芯片方向控制异常,务必关闭
  • UI 线程阻塞
    :实际项目中 Modbus 通信需放 Task.Run 后台线程,避免界面卡死
  • 帧间隔问题
    :NModbus4 已内置 3.5 字符间隔处理,无需手动加延时

【源码】
关注评论或回复【888】得:《本文的完整源码+十套项目实战完整源码》↓↓↓

最新文章

随机文章