匠心智造-上位机硬件通讯之Modbus 客户端
WPF硬件通讯中心初版正式发布
上位机开发的道与术
我们不布道,我们只讲实战,快快加入我们吧!私信我领取优惠券!
一句话介绍
从串口调试开始,覆盖 网络通讯,Modbus通讯,以及相机的全栈工业硬件通信教学与开发平台。
项目亮点
1. 多协议通信引擎 — 10+ 协议,统一接口
不只是 demo,每种协议都封装为可复用的独立通信库,接口统一、开箱即用。
| 模块 | 功能 | 封装库 |
|---|---|---|
| Serial | 串口调试、参数配置、HEX/文本收发 | YXGK.HardwareComm.Modules.Serial |
| TCP Server/Client | 以太网服务端/客户端调试 | YXGK.HardwareComm.Modules.Internet |
| UDP Server/Client | UDP 数据报收发 | YXGK.HardwareComm.Modules.Internet |
| Modbus Server | Modbus TCP/RTU 服务端,支持多客户端 | YXGK.HModbusServerLib |
| Modbus Client | Modbus TCP/RTU 客户端读写 | YXGK.HModbusClientLib |
| HTTP Client | GET/POST 请求调试 | YXGK.HardwareComm.Modules.HttpClientDemo |
| MQTT | Broker 连接、订阅/发布 | YXGK.HardwareComm.Modules.MQTTDemo |
| SignalR | Hub 连接、消息广播 | YXGK.HardwareComm.Modules.SignalRDemo |
| gRPC | Proto 文件 + 服务端/客户端 | YXGK.HardwareComm.Modules.GRPCDemo |
| RabbitMQ | 生产者/消费者消息队列 | YXGK.HardwareComm.Modules.RabbitMQDemo |
2. 平台化基础设施 — 拿来就能用的工业级框架
2. 平台化基础设施 — 拿来就能用的工业级框架
所有模块共享一套基础设施,新建一个调试模块只需关注通信逻辑本身。
Prism 模块化架构— 热插拔导航,模块间完全解耦,Attribute 自动发现
Instant 操作模式— 每个操作实例自包含属性和命令,照搬即可复用
黑白工业主题— 一套 XAML 同时适配深色/浅色,Segoe MDL2 图标系统
中/英多语言— DynamicResource 运行时切换,无需重启
Markdown 文档渲染— 自定义 FlowDocument 渲染器,学习文档存本地 .md 文件
嵌入资源管理— 文档随 DLL 发布,零外部依赖
3. 工程化调试体验 — 不只是能跑,更要好用
每个模块面板都经过反复打磨,面向真实的开发和调试场景。
可折叠配置面板— 配好参数后折叠,给数据显示腾出空间
GridSplitter 分栏— 左侧文档 / 右侧操作面板自由拖拽
双标签日志区— 原始数据帧和业务事件分开查看
DataGrid 可编辑快照— Coil/Float/Int16/Int32 直接编辑即写入
JSON 配置导入/导出— 一键保存和恢复所有参数
实时连接状态指示— 绿色圆点 + 客户端计数,状态一目了然
4. 分层架构,逐层解耦
┌─────────────────────────────────────────┐ │ UI 层 Views / ViewModels / Instant │ ← WPF 面板 ├─────────────────────────────────────────┤ │ 服务层 IHModbusServerService 等 │ ← 接口抽象 ├─────────────────────────────────────────┤ │ 通信库层 HModbusServerLib 等 │ ← 协议封装 ├─────────────────────────────────────────┤ │ 基础层 Prism / Themes / i18n │ ← 共享框架 └─────────────────────────────────────────┘每层独立测试,模块可以任意组合。从串口调试到 Modbus 服务器,共享同一套 UI 范式。
技术栈
|
层面
|
技术选型
|
| — | — |
|
框架
|
.NET 10 + WPF
|
|
MVVM
|
Prism 9 + DryIoc
|
|
通信
|
HSL Communication (Modbus), System.IO.Ports, System.Net.Sockets
|
|
UI
|
HandyControl 3.5, 自定义 Markdown 渲染器
|
|
主题
|
独立 Wpf.Themes 库, DynamicResource 体系
|
|
多语言
|
Wpf.Localization 库, zh-CN / en-US
|
|
日志
|
log4net
|
项目结构
Modbus 客户端模块
马斯克第一性原理之必背知识点
详见上一篇Modbus服务器对应部分。
中文界面
英文界面
心跳功能
常用数据交互读写实战
这个模块可以干什么
XXMES 设备接口对接说明
文档说明
本文档说明传动 MES 系统接收设备测试数据的接口规范。
接口地址
南京厂区
POST ----/mes/eam.sp?saveHyDataAcquisition珠海厂区
POST ----/cnc_mes/eam.sp?saveHyDataAcquisition请求参数
| 参数名 | 必填 | 说明 |
|---|---|---|
eqNo | 是 | 设备编码 |
assemblyQrCode | 是 | 总成条码 |
endosomeQrCode | 内体条码 | |
eqName | 设备名称 | |
operator | 操作者 | |
testResult | 是 | 测试结果 |
testTime | 是 | 测试时间 |
productName | 产品名称 | |
manufacturer | 厂商名称 | |
fieldValue | 不固定字段列和值 |
fieldValue 格式:
字段名:值,字段名:值,例如刚度:22,角度:33
请求体示例
{"eqNo":"test-001","assemblyQrCode":"code2232o32423","eqName":"设备1","operator":"百晓生","testResult":"OK","testTime":"2023-01-01 00:00:00","productName":"产品名称","manufacturer":"厂家1","fieldValue":"刚度:22,角度:33"}响应内容
{"success":true,"msg":"保存成功","code":200,"result":null ,"remark":null}响应参数
|
参数名
|
类型
|
说明
|
| — | — | — |
|code|
int
|
状态码,200 表示正常,其他为错误
|
|message|
string
|
错误信息提示
|
需求拆解说明
1-常用PLC品牌
信捷/汇川/三菱。。。可以实现无差别单打
2-常用数据采集类型覆盖
心跳信号,float/int 16/int 32/Coil
3-HttpClient实现跟MES的数据交互
***Y**X**G**K***
