C#/.NET + Avalonia 上位机开发学习路线
这套文档的唯一主目标
这套文档首先服务于上位机桌面软件开发,不是先学 Web,也不是只学几个 Avalonia 控件。
学习顺序固定为:
先把 C# 语言基础学扎实
-> 再理解 .NET 的项目、运行时、异步、IO、异常和测试
-> 再熟练掌握 Avalonia、XAML 和 MVVM
-> 再学习设备通信、实时采集、报警、趋势图和工业协议
-> 最后具备独立开发、调试、发布上位机软件的能力Web 框架可以以后再学。C#、面向对象、集合、异步、网络、日志、测试和工程结构扎实以后,再学习 ASP.NET Core 会快很多,但它不是当前主线。
什么是上位机开发
上位机软件通常运行在 Windows、Linux 或工控机上,负责和设备通信、显示状态、发送控制命令、记录数据、展示趋势并处理报警。
一个合格的上位机开发者需要同时具备:
| 能力 | 需要掌握什么 | 在项目里解决什么问题 |
|---|---|---|
| C# 语言 | 类型、判断、循环、方法、类、接口、集合、泛型 | 把业务规则正确写出来 |
| .NET 基础 | 项目、程序集、异常、Task、线程、IO、序列化 | 让程序稳定运行并处理外部数据 |
| 桌面界面 | Avalonia、XAML、布局、控件、样式 | 做出操作界面和状态页面 |
| MVVM | Binding、Command、ViewModel、DI | 避免界面代码和业务代码混成一团 |
| 数据处理 | LINQ、JSON、CSV、SQLite、缓存 | 保存采集数据、配置和操作记录 |
| 设备通信 | 串口、TCP/UDP、Modbus、OPC UA | 和 PLC、仪表、传感器等设备交换数据 |
| 实时能力 | 后台任务、取消、超时、并发、队列 | 持续采集数据且不让界面卡死 |
| 工业功能 | 设备状态、报警、趋势图、权限、审计 | 做出真正可用的上位机功能 |
| 工程交付 | 日志、测试、配置、打包、升级、诊断 | 把程序交给现场使用并能排查问题 |
21 周分成两个阶段
Week 01-12 是第一阶段:C#/.NET 基础 + Avalonia 桌面应用基础。
完成以后应该能够:
- 独立创建、运行和调试 C# 项目。
- 使用类、接口、集合、LINQ、异常和异步组织业务代码。
- 使用 Avalonia、XAML、Binding、Command 和 MVVM 开发桌面界面。
- 完成表单、列表、搜索、增删改查和本地数据保存。
- 加入日志、测试、配置、导入导出、打包和验收。
Week 13-21 是第二阶段:设备通信 + 实时采集 + 工业上位机项目。完成串口、TCP/UDP、Modbus、OPC UA、采集引擎、SQLite、趋势报警、工业界面和现场交付后,才形成完整的上位机基础能力。
每天怎么使用文档
- 每天建议学习 2-4 小时,基础薄弱时不要追求速度。
- 左侧目录按周、按天学习,不跳过 Week 01-04 的 C# 基础。
- 每个例子亲手敲一遍,不能只复制,也不能只看。
- 代码运行后必须对照输出,再主动修改一个值、条件或参数。
- 每周完成阶段检查,不通过就回到对应 Day 页面补练。
每天固定闭环:
先理解“是什么”和“有几种”
-> 敲最小例子并运行
-> 对照输出逐行理解
-> 再敲多个相似例子
-> 把知识组合成完整程序
-> 故意改错并阅读报错
-> 不看答案完成当天作业文档里的例子必须达到什么标准
每个新知识点不能只有一段大代码,至少要包含:
- 一句大白话解释。
- 一个只展示当前知识点的最小例子。
- 两到三个不同输入或不同场景的相似例子。
- 完整可运行代码和明确文件名。
- 控制台输出、界面效果或数据变化说明。
- 一个主动修改参数的练习。
- 一个常见错误和对应修法。
先抓住 6 条主线
| 主线 | 对应内容 | 最终要会什么 |
|---|---|---|
| C# 语法 | 变量、类型、判断、循环、方法 | 独立写出输入、校验、计算和输出 |
| 数据处理 | 数组、集合、LINQ、泛型 | 处理采集值、设备列表、搜索和统计 |
| 程序结构 | 类、对象、接口、事件、异常 | 把设备、通信、服务和界面职责拆开 |
| .NET 能力 | 文件、JSON、异步、日志、测试、DI | 处理配置、后台任务、排错和验证 |
| Avalonia | XAML、控件、样式、MVVM | 开发稳定、可维护的桌面界面 |
| 上位机进阶 | 通信、采集、报警、趋势、发布 | 从普通桌面应用进入工业上位机项目 |
21 周总路线图
这套文档不是把知识点随便排成 21 周,而是按项目能力逐层加上去。
Week 01:会写最小 C# 程序
-> Week 02:会处理多条数据
-> Week 03:会把业务写成类和对象
-> Week 04:会处理等待、失败、取消和批量任务
-> Week 05:会把项目拆成可维护结构
-> Week 06:会打开桌面窗口并处理输入
-> Week 07:会用 MVVM 管理界面状态
-> Week 08:会整理界面重复和显示状态
-> Week 09:会保存文件、处理大列表、发布程序
-> Week 10:会做商品管理 MVP
-> Week 11:会补权限、审计、导入导出、后台任务
-> Week 12:会测试、写文档、发布、验收和交付
-> Week 13:会分析字节报文并完成串口收发
-> Week 14:会处理 TCP/UDP、粘包拆包、心跳重连
-> Week 15:会读写 Modbus 线圈和寄存器
-> Week 16:会读写和订阅 OPC UA 节点
-> Week 17:会设计多设备实时采集引擎
-> Week 18:会用 SQLite 保存和查询历史数据
-> Week 19:会做实时趋势、历史趋势和报警中心
-> Week 20:会做可长期运行的 Avalonia 工业操作台
-> Week 21:会测试、诊断、升级、回滚和现场联调如果某一周卡住,不要跳过去。先看这周最后的 阶段检查,确认卡住的是语法、数据、结构、界面、项目还是交付。
每天固定学习法
| 阶段 | 建议时间 | 要做什么 |
|---|---|---|
| 学概念 | 20-30 分钟 | 先弄懂是什么、有几种、为什么需要 |
| 敲小例子 | 40-60 分钟 | 每个最小例子亲手敲并运行 |
| 敲完整例子 | 60-90 分钟 | 把多个知识点组合成一个程序 |
| 改代码 | 20-40 分钟 | 改参数、条件、字段和输出再运行 |
| 排错误 | 10-30 分钟 | 故意制造一个错误并读懂报错 |
| 做作业 | 30-60 分钟 | 先不看答案独立完成,再检查 |
每天结束前必须能回答 3 个问题:
- 今天这个知识解决什么问题?
- 最小代码怎么写?
- 常见错误出现时先看哪里?
每周必须做一次验收
每天学完只是输入信息,每周验收才是确认能力。
每一周最后都有 阶段检查 页面,使用方法固定:
- 先看“本周学习地图”,确认这一周的主线。
- 再做“本周自测项目”,从空项目开始写。
- 写完后对照“通过标准”或“最低通过线”。
- 没通过就回到对应 Day 页面补,不要直接进入下一周。
每周自测项目对应的是一条递进路线:
| 周 | 自测项目 | 证明的能力 |
|---|---|---|
| Week 01 | 控制台商品收银台 | C# 基础输入、校验、计算、输出 |
| Week 02 | 商品 CSV 清洗器 | 集合、LINQ、异常、文本清洗 |
| Week 03 | 订单域模型 | 类、封装、接口、事件 |
| Week 04 | 异步文件批处理器 | Task、并发、取消、异常汇总 |
| Week 05 | 工程化商品服务 | 分层、DI、配置、日志、测试 |
| Week 06 | Avalonia 商品窗口 | XAML、控件、表单、列表 |
| Week 07 | MVVM 商品管理页面 | Binding、Command、ViewModel 状态 |
| Week 08 | 商品卡片组件 | Style、DataTemplate、UserControl |
| Week 09 | 可发布的数据工具 | 性能、文件、持久化、发布 |
| Week 10 | 商品管理 MVP | 需求、数据层、服务层、界面闭环 |
| Week 11 | 商品管理增强版 | 权限、审计、导入导出、后台任务 |
| Week 12 | 最终交付包 | 测试、文档、版本、验收、交付 |
| Week 13 | 串口调试助手 | 字节、帧、校验、SerialPort、取消 |
| Week 14 | 网络调试助手 | TCP、UDP、拆包、心跳、重连 |
| Week 15 | Modbus 监控器 | 线圈、寄存器、字序、RTU/TCP |
| Week 16 | OPC UA 监控器 | 节点、读写、订阅、质量码、安全 |
| Week 17 | 多设备采集服务 | 驱动、调度、队列、缓存、UI 节流 |
| Week 18 | 历史数据库 | SQLite、批量写入、查询、备份 |
| Week 19 | 趋势与报警中心 | 曲线、降采样、报警生命周期 |
| Week 20 | 工业操作台 | 生命周期、UI 线程、联锁、安全写入 |
| Week 21 | 毕业项目 | 测试、诊断、权限、升级、现场联调 |
Week 01-12 使用“商品管理”作为部分基础练习载体,是因为名称、价格、库存容易理解,可以把注意力放在 C# 和 Avalonia 本身。Week 13 开始直接进入设备、点位、通信和报警:
Product -> Device
Price -> CurrentValue
Stock -> DeviceStatus
ProductService -> DeviceService
JSON 保存 -> SQLite 采集记录
后台任务 -> 持续采集循环
普通提示 -> 设备报警
列表页面 -> 设备监控页面因此第一阶段不是在学习“商品系统行业知识”,而是在训练以后做设备软件必须使用的程序结构。
不能跳的基础
| 周 | 重点 | 过关标准 |
|---|---|---|
| Week 01 | C# 基础语法 | 能独立写控制台商品小程序 |
| Week 02 | 集合和数据处理 | 能保存多条商品并搜索、排序、统计 |
| Week 03 | 类、接口、事件 | 能把商品、仓储、服务拆成类 |
| Week 04 | 异步、任务、并发 | 能写文件读取、批处理、取消和异常处理 |
如果 Week 01-04 没打牢,后面 Avalonia 会变成只是在抄界面代码。
Avalonia 和 MVVM 先看这条线
MainWindow.axaml
-> 绑定 ViewModel 属性和命令
-> MainWindowViewModel.cs 处理状态和动作
-> Service 处理业务规则
-> Repository 处理数据保存只要这条线清楚,Avalonia 就不是一堆陌生文件。
卡住时按这个顺序处理
- 看终端第一条错误,不要先看最后一条。
- 看错误里有没有文件名和行号。
- 如果是 C# 报错,先检查括号、分号、类型、命名。
- 如果是 XAML 报错,先检查标签闭合、属性名、命名空间。
- 如果是绑定没效果,先检查 ViewModel 属性名、
DataContext、Command名。 - 如果是运行结果不对,用
Console.WriteLine或断点看变量值。 - 如果是保存失败,先打印文件路径,再检查权限和文件内容。
学到什么程度算过关
| 阶段 | 过关项目 |
|---|---|
| Week 01 后 | 控制台商品总价计算器 |
| Week 02 后 | 控制台商品列表管理 |
| Week 03 后 | 分层商品服务小项目 |
| Week 04 后 | 异步文件批处理工具 |
| Week 07 后 | Avalonia 商品表单和列表 |
| Week 10 后 | 商品管理 MVP |
| Week 12 后 | 带文档、测试、发布说明的交付包 |
| Week 15 后 | 串口、TCP 和 Modbus 设备监控器 |
| Week 19 后 | 带历史趋势和完整报警生命周期的上位机 |
| Week 21 后 | 能测试、诊断、发布、升级和现场联调的毕业项目 |
Week 13-21:真正进入上位机开发
完成 Week 01-12 后,不先跳到 Web,继续按左侧 Week 13-21 学习:
串口基础
-> TCP/UDP 网络通信
-> Modbus RTU / Modbus TCP
-> OPC UA 节点读写与订阅
-> 周期采集、超时、重连和取消
-> SQLite 历史数据
-> 实时曲线和历史趋势
-> 设备状态和报警
-> 权限、审计、日志和配置
-> 打包、部署、现场诊断第二阶段已经按下面的项目递进加入文档:
| 阶段 | 项目 | 必须掌握的能力 |
|---|---|---|
| 通信入门 | 串口调试助手 | COM 口、波特率、收发、十六进制显示 |
| 网络通信 | TCP 客户端调试工具 | 连接、发送、接收、断线、重连 |
| 工业协议 | Modbus 设备监控器 | 站号、功能码、寄存器、轮询、异常码 |
| 信息模型 | OPC UA 设备监控器 | 节点、读写、订阅、质量码、证书 |
| 实时采集 | 多设备采集服务 | 后台循环、取消、超时、并发和队列 |
| 数据记录 | SQLite 历史数据库 | 表设计、批量写入、时间范围查询 |
| 数据展示 | 实时曲线和历史趋势 | 采样、刷新频率、数据窗口、性能控制 |
| 报警系统 | 设备报警中心 | 阈值、级别、确认、恢复和记录 |
| 综合项目 | Avalonia 工业监控上位机 | MVVM、通信、采集、趋势、报警、日志、发布 |
判断能不能进入第二阶段:不看旧代码,独立完成一个 Avalonia CRUD 桌面应用,并能解释 View、ViewModel、Service、Repository、异步保存和异常处理各自负责什么。
Web 放在什么时候学
当你已经能独立完成本地上位机项目后,再学习 ASP.NET Core Web API,用于远程监控、数据上传、账号中心或多客户端共享。那时 C#、异步、DI、日志、序列化和分层已经熟悉,Web 只是在这些基础上增加 HTTP 和服务端运行方式。