# BLC_BLU
**Repository Path**: gitwdd/blc_-blu
## Basic Information
- **Project Name**: BLC_BLU
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2025-09-16
- **Last Updated**: 2025-11-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 基于uni-app的蓝牙Modbus通信应用:从架构设计到实现细节


## 项目概述
在工业物联网快速发展的今天,蓝牙通信与Modbus协议的结合为设备互联提供了新的解决方案。本文将深入分析一个基于uni-app框架开发的蓝牙Modbus通信应用,该应用巧妙地将蓝牙低功耗通信与Modbus协议相结合,实现了跨平台的工业设备通信解决方案。
### 技术栈概览
- **前端框架**: uni-app + Vue.js
- **蓝牙通信**: Native.js 原生蓝牙API
- **协议支持**: Modbus RTU/ASCII
- **样式处理**: SCSS模块化管理
- **平台支持**: H5、Android/iOS App、微信小程序
## 核心架构设计
### 1. 分层架构模式
该应用采用了清晰的分层架构,将蓝牙通信层与Modbus协议层完全分离:
```
┌─────────────────────────────────────┐
│ 用户界面层 (UI Layer) │
├─────────────────────────────────────┤
│ 业务逻辑层 (Logic Layer) │
├─────────────────────────────────────┤
│ Modbus协议层 (Protocol Layer) │
├─────────────────────────────────────┤
│ 蓝牙通信层 (Transport Layer) │
├─────────────────────────────────────┤
│ 硬件抽象层 (HAL Layer) │
└─────────────────────────────────────┘
```
### 2. 核心类设计
#### BluetoothModbus 核心类
`BluetoothModbus` 类是整个应用的核心,它封装了蓝牙通信和Modbus协议的所有功能:
```javascript
class BluetoothModbus {
constructor() {
// 蓝牙连接状态管理
this.state = BLUETOOTH_STATE.DISCONNECTED;
// 设备信息
this.deviceId = "";
this.deviceName = "";
// UUID配置
this.serviceId = "";
this.writeId = "";
this.notifyId = "";
// 模块类型支持
this.moduleType = BLUETOOTH_MODULE_TYPE.NORMAL;
// 心跳保活机制
this.heartbeatInterval = null;
this.heartbeatPeriod = 30000;
this.autoReconnect = true;
}
}
```
## 技术特色功能解析
### 1. 多模块类型支持
应用支持多种蓝牙模块类型,通过预定义的UUID配置实现快速适配:
```javascript
// 常规模组UUID
const NORMAL_MODULE_UUID = {
serviceId: "0000FFE0-0000-1000-8000-00805F9B34FB",
writeId: "0000FFE1-0000-1000-8000-00805F9B34FB",
notifyId: "0000FFE1-0000-1000-8000-00805F9B34FB",
};
// BT16模组UUID
const BT16_MODULE_UUID = {
serviceId: "0000FFE0-0000-1000-8000-00805F9B34FB",
writeId: "0000FFE2-0000-1000-8000-00805F9B34FB",
notifyId: "0000FFE1-0000-1000-8000-00805F9B34FB",
};
// 低功耗蓝牙通用UUID
const BLE_MODULE_UUID = {
serviceId: "6E400001-B5A3-F393-E0A9-E50E24DCCA9E",
writeId: "6E400002-B5A3-F393-E0A9-E50E24DCCA9E",
notifyId: "6E400003-B5A3-F393-E0A9-E50E24DCCA9E",
};
```
### 2. 智能蓝牙状态检查机制
在执行蓝牙扫描前,应用会智能检查蓝牙适配器状态:
```javascript
async checkBluetoothState() {
return new Promise((resolve, reject) => {
uni.getBluetoothAdapterState({
success: (res) => {
if (res.available) {
resolve(true);
} else {
// 尝试初始化蓝牙适配器
uni.openBluetoothAdapter({
success: () => resolve(true),
fail: (error) => {
this.addLog('错误', `蓝牙初始化失败: ${error.errMsg}`);
reject(new Error('蓝牙功能未开启或不可用'));
}
});
}
},
fail: (error) => {
reject(new Error(`获取蓝牙状态失败: ${error.errMsg}`));
}
});
});
}
```
### 3. 大数据分片传输机制
为了解决蓝牙MTU限制问题,应用实现了智能的数据分片传输:
```javascript
_sendLargeData(buffer) {
const maxChunkSize = 20; // 蓝牙MTU通常为20字节
const chunks = [];
// 将大数据分割成小块
for (let i = 0; i < buffer.length; i += maxChunkSize) {
chunks.push(buffer.slice(i, i + maxChunkSize));
}
// 逐块发送
let chunkIndex = 0;
const sendNextChunk = () => {
if (chunkIndex < chunks.length) {
this._sendData(chunks[chunkIndex]);
chunkIndex++;
setTimeout(sendNextChunk, 50); // 50ms间隔
}
};
sendNextChunk();
}
```
### 4. 完整的Modbus协议支持
应用支持常见的Modbus功能码,并提供了完整的PDU构建和解析功能:
```javascript
const MODBUS_FUNCTION_CODE = {
READ_COILS: 0x01, // 读线圈
READ_DISCRETE_INPUTS: 0x02, // 读离散输入
READ_HOLDING_REGISTERS: 0x03, // 读保持寄存器
READ_INPUT_REGISTERS: 0x04, // 读输入寄存器
WRITE_SINGLE_COIL: 0x05, // 写单个线圈
WRITE_SINGLE_REGISTER: 0x06, // 写单个寄存器
WRITE_MULTIPLE_COILS: 0x0f, // 写多个线圈
WRITE_MULTIPLE_REGISTERS: 0x10, // 写多个寄存器
};
```
### 5. 心跳保活与自动重连
应用实现了智能的心跳保活机制,确保连接稳定性:
```javascript
_startHeartbeat() {
if (this.heartbeatInterval) {
clearInterval(this.heartbeatInterval);
}
this.heartbeatInterval = setInterval(() => {
if (this.state === BLUETOOTH_STATE.CONNECTED) {
// 发送心跳数据包
this._sendData(this.heartbeatData);
// 检查连接状态
this._checkConnectionStatus();
}
}, this.heartbeatPeriod);
}
```
## 用户界面设计亮点
### 1. 响应式卡片布局
应用采用了现代化的卡片式布局,清晰地分离了蓝牙连接和Modbus通信两大功能区域:
```vue
```
### 2. 实时状态指示
通过动态的状态指示器,用户可以实时了解蓝牙连接状态:
```javascript
computed: {
bluetoothStateText() {
switch (this.bluetoothState) {
case BLUETOOTH_STATE.DISCONNECTED:
return '未连接';
case BLUETOOTH_STATE.CONNECTING:
return '连接中';
case BLUETOOTH_STATE.CONNECTED:
return '已连接';
case BLUETOOTH_STATE.SERVICES_DISCOVERING:
return '读取服务中';
case BLUETOOTH_STATE.RECONNECTING:
return '重连中';
default:
return '未知状态';
}
}
}
```
### 3. 智能设备列表管理
设备列表支持实时更新,显示设备名称、ID和信号强度:
```vue
{{ device.name || device.localName || '未知设备' }}
{{ device.deviceId }}
```
## 错误处理与日志系统
### 1. 分级日志系统
应用实现了完整的分级日志系统,支持系统、发送、接收、错误等不同类型的日志:
```javascript
addLog(type, message) {
const timestamp = new Date().toLocaleTimeString();
const logEntry = {
type,
message,
timestamp,
id: Date.now() + Math.random()
};
this.logs.unshift(logEntry);
// 限制日志数量,避免内存溢出
if (this.logs.length > 1000) {
this.logs = this.logs.slice(0, 1000);
}
}
```
### 2. 异常处理机制
完善的异常处理确保应用的稳定性:
```javascript
_handleError(message, error) {
console.error(message, error);
const errorMessage = error?.message || error?.errMsg || '未知错误';
this.addLog('错误', `${message}: ${errorMessage}`);
if (this.onErrorCallback) {
this.onErrorCallback({
message,
error: errorMessage,
timestamp: new Date().toISOString()
});
}
}
```
## 性能优化策略
### 1. 内存管理
- **日志限制**: 限制日志条目数量,防止内存泄漏
- **设备列表优化**: 使用浅拷贝更新设备列表,减少内存占用
- **定时器管理**: 及时清理定时器,避免内存泄漏
### 2. 网络优化
- **数据分片**: 自动处理大数据分片,适应蓝牙MTU限制
- **重试机制**: 智能重试机制,提高通信成功率
- **连接池管理**: 合理管理蓝牙连接,避免资源浪费
## 跨平台兼容性
### 1. uni-app框架优势
通过uni-app框架,应用实现了真正的"一次开发,多端运行":
- **H5端**: 支持现代浏览器的Web Bluetooth API
- **App端**: 使用Native.js调用原生蓝牙功能
- **小程序端**: 适配微信小程序蓝牙API
### 2. 平台差异处理
```javascript
// 根据平台选择不同的蓝牙实现
if (uni.getSystemInfoSync().platform === 'android') {
// Android特定处理
} else if (uni.getSystemInfoSync().platform === 'ios') {
// iOS特定处理
} else {
// H5或其他平台处理
}
```
## 安全性考虑
### 1. 权限管理
应用在manifest.json中声明了必要的蓝牙权限:
```json
{
"permissions": [
"",
"",
"",
"",
""
]
}
```
### 2. 数据校验
- **CRC校验**: 实现了完整的CRC16校验算法
- **数据格式验证**: 严格验证Modbus数据格式
- **异常响应处理**: 正确处理Modbus异常响应
## 总结与展望
这个蓝牙Modbus通信应用展现了现代移动应用开发的多个最佳实践:
### 技术亮点
1. **架构清晰**: 分层设计,职责分离
2. **功能完整**: 支持完整的Modbus协议栈
3. **用户友好**: 直观的界面设计和实时状态反馈
4. **跨平台**: 真正的一次开发,多端运行
5. **性能优化**: 内存管理和网络优化并重
### 应用场景
- **工业自动化**: 设备监控和控制
- **智能家居**: 家电设备通信
- **物联网**: 传感器数据采集
- **设备调试**: 工程师现场调试工具
### 未来发展方向
1. **协议扩展**: 支持更多工业协议
2. **AI集成**: 智能故障诊断
3. **云端同步**: 数据云端存储和分析
4. **安全增强**: 加密通信和身份认证
这个项目不仅是一个功能完整的蓝牙Modbus通信工具,更是现代跨平台移动应用开发的优秀范例,为工业物联网应用开发提供了宝贵的参考价值。