一、背景
光伏跟踪支架系统中,NCU(网络通讯单元)、单轴 TCU、双轴 TCU 等设备在出厂调试、现场运维和售后诊断等环节高度依赖手持式调试工具。传统方案多为 WinForms / WPF 桌面客户端或 Android APP,前者部署繁琐、版本更新需要用户手动操作;后者受平台碎片化限制,蓝牙协议栈行为不统一,且同样面临分发和更新的挑战。
我们基于 Blazor WebAssembly + .NET 10 构建了一款纯浏览器端的调试软件,借助 Web Bluetooth 标准协议与设备建立 BLE GATT 连接,通过 Modbus RTU over BLE 完成参数读写、状态监控和远程控制。用户只需打开浏览器(Chrome / Edge),无需安装任何软件即可完成调试工作。
| 产品选择 | 产品选择 | 产品选择 |
|---|---|---|
![]() |
![]() |
![]() |
二、技术架构
2.1 整体栈
| 层级 | 技术 |
|---|---|
| 运行时 | .NET 10 (net10.0) |
| 前端框架 | Blazor WebAssembly |
| UI 组件 | 纯 CSS 自定义组件,无第三方 UI 库 |
| 设备通信 | Web Bluetooth (navigator.bluetooth) |
| 应用协议 | Modbus RTU |
| 存储 | localStorage(主题偏好、语言偏好) |
| 打包 | PWA Service Worker |
2.2 项目结构
Pages/
Index.razor ------ 产品选择首页(NCU / TCU1 / TCU2)
NCU.razor ------ NCU 单页应用
TCU1.razor ------ 单轴 TCU 单页应用
TCU2.razor ------ 双轴 TCU 单页应用
NotFound.razor ------ 404
Components/
BaseComponent.cs ------ 公共基类(注入 LocalizationService、自动订阅语言切换事件)
T1Home.razor ------ 通用首页组件(蓝牙连接 + Modbus 地址配置)
T1Operation.razor ------ 通用操作页(实时参数、状态、控制命令)
T1Settings.razor ------ 通用设置页(运行参数配置)
T1SubControl.razor ------ 分控设备管理
Profile.razor ------ 个人设置(语言、主题、关于)
Services/
WebBluetoothService.cs ------ Web Bluetooth 封装(扫描、连接、收发)
ModbusService.cs ------ Modbus RTU 帧构建与 CRC16 计算
DeviceConnectionService ------ 连接管理(蓝牙 + 设备验证)
DeviceProtocolService ------ 协议封装(参数读取、控制命令)
DeviceStateService ------ 全局设备状态(连接状态、地址、连接类型)
ProductContextService ------ 产品上下文(当前选中产品)
ThemeService ------ 双色主题持久化
LocalizationService ------ 多语言(中文 / English / Português)
SocketConnector ------ TCP Socket(浏览器环境禁用标记)
2.3 单页应用架构
每种产品(NCU / 单轴 TCU / 双轴 TCU)视为独立的单页应用,通过 DynamicComponent 动态切换子页面组件。底部导航栏包含首页、操作、设置、分控、我的五个 Tab,全部在同一产品页面内通过组件切换,无需页面级路由跳转。
产品上下文通过 ProductContextService 维护,进入任意产品页时设置当前产品,顶部 Header 显示产品名称,点击可返回产品选择页。

三、设备连接与通信
3.1 Web Bluetooth 连接
设备侧使用 BLE(Bluetooth Low Energy),Service UUID 为 0000fff0-0000-1000-8000-00805f9b34fb。软件采用浏览器原生的 navigator.bluetooth.requestDevice() 调起系统蓝牙设备选择器,用户选择名称以 SZRT 开头的设备即可完成配对。
连接链路:
浏览器 → navigator.bluetooth.requestDevice() → 系统蓝牙选择器 → GATT 连接
→ 发现 FFF0 服务 → 自动匹配可写特征值与可通知特征值 → 通信就绪
前端 JavaScript 桥接层(wwwroot/js/bluetooth.js)负责:
- 调用 Web Bluetooth API
- 自动查找服务下的 write / notify / read 特征值
- 实现基于通知(Notification)的超时接收逻辑,模拟串口请求-响应模式
3.2 Modbus RTU 协议
应用层采用标准的 Modbus RTU,命令帧格式为:
[设备地址] [功能码] [数据域] [CRC16 低字节] [CRC16 高字节]
- 读取寄存器(功能码
0x03):读取设备运行参数(角度、电流、电压等) - 写入寄存器(功能码
0x06):写入运行模式(自动/手动/停止)、设置参数值
软件内置 CRC16-Modbus 校验算法,自动为每条指令追加校验字节。

四、产品功能
4.1 设备控制(Modbus 地址配置)
支持通过蓝牙已连接设备进行 Modbus 地址配置:
- 读地址 ------ 读取设备当前的 Modbus 地址
- 写地址 ------ 修改设备地址
- 连接设备 ------ 验证设备地址正确后激活操作面板
4.2 实时监控
操作页展示设备运行参数与状态:
| 参数 | 说明 |
|---|---|
| 高度角度 | 当前跟踪高度角 |
| 方位角度 | 当前方位角 |
| 目标角度 | 控制目标值 |
| 电机电流 | 实时电机电流 |
| 电池电压/温度 | 电源状态 |
| 电源电压 | 供电电压 |
状态面板展示多种告警标志:倾角异常、过流、超限、大风、时钟故障、电源异常等。
4.3 控制命令
| 操作 | 说明 |
|---|---|
| 自动 | 启动自动跟踪模式 |
| 手动 | 切换手动控制模式 |
| 向东/向西 | 手动微调 |
| 放平 | 支架放平 |
| 标定 | 角度传感器标定 |
| 雪天/雨天/避风/清洗 | 场景化保护与控制 |
| 指定角度 | 设定目标角度 |
| 校时 | 设备时间同步 |
4.4 调试工具
内置串口调试工具,支持 Hex 指令手工输入与发送、响应日志记录、收发标记,便于现场工程师诊断通信问题。
4.5 分控设备管理
当主控设备下挂分控设备时,支持分控设备的独立参数查看与控制。
| 操作 | 设置 | 分控 |
|---|---|---|
![]() |
![]() |
![]() |
五、用户体验设计
5.1 产品选择入口
首页提供三张产品卡片入口(NCU / 单轴 TCU / 双轴 TCU),每张卡片包含产品图标、名称与简要说明,点击即进入对应的单页应用。
5.2 多语言支持
内置简体中文、English、Português 三语界面,语言切换在首页右上角以下拉菜单呈现,选择后立即生效并持久化到 localStorage。
5.3 双色主题
支持亮色模式与暗色模式,主题偏好通过 localStorage 持久化,页面顶部右侧按钮一键切换。完整的 CSS 变量体系(--bg-primary、--text-primary、--primary-color 等),所有组件自动适配当前主题。
5.4 响应式设计
卡片、栅格系统适配移动端屏幕,底部导航栏取代传统侧边栏,符合移动端操作习惯。页面禁止浏览器默认的拉手势刷新与回弹效果,提供接近原生 APP 的交互体验。
| 操作 | 设置 | 我的 |
|---|---|---|
![]() |
![]() |
![]() |
六、性能与部署
6.1 PWA 支持
项目集成了 Service Worker,用户可将应用添加到主屏幕(A2HS),实现离线可用和类原生启动体验。
6.2 构建产物
- 目标框架:net10.0
- 运行时:Blazor WebAssembly(.NET IL 裁剪 + AOT 可选)
- 输出:纯静态文件(HTML + CSS + JS + WASM)
- 部署方式:任意静态文件服务器(Nginx、IIS、CDN)
6.3 浏览器兼容
| 功能 | 最低版本 |
|---|---|
| Blazor WebAssembly | 现代浏览器(Chrome / Edge / Firefox / Safari) |
| Web Bluetooth | Chrome 56+、Edge 79+ |
| PWA Service Worker | 所有主流浏览器 |
七、总结
基于 Blazor WebAssembly + Web Bluetooth 的光伏设备调试软件,在免安装、跨平台、易分发三个维度上解决了传统调试工具的痛点。项目充分发挥了 .NET 生态在工业软件领域的成熟度,同时利用现代 Web 标准的设备接入能力,在浏览器环境中实现了原本需要原生应用才能完成的 BLE 通信与 Modbus 协议交互。
这套技术栈为光伏跟踪、微电网、电机控制等同类工业 IoT 场景提供了可复用的前端架构参考。
如有兴趣进一步了解项目细节或技术交流,欢迎联系。








