# detector_dart_simulator **Repository Path**: abcdefzjk/detector_dart_simulator ## Basic Information - **Project Name**: detector_dart_simulator - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-24 - **Last Updated**: 2026-05-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Modbus-RTU 传感器从机模拟器 使用 Flutter 模拟传感器从机的 Modbus-RTU 响应,通过 USB 串口转 485 模块连接采集器,实现对采集器数据采集、JSON 打包、网络通信的测试。 ## 传感器modbus寄存器 从机寄存器和操作参考如下 | 序号 | 定义 | 地址 | 读/写 | 数据类型与计算 说明 | 读命令 0X01地址为例 | 从机响应 | 备注 | |----|---------------|--------|-----|-------------------|-------------------------|----------------------|--------| | 1 | 传感器地址 | 0x0000 | R/W | u16,传感器modbus地址 | | | | | 2 | 霍尔传感器电流量程 | 0x0001 | R/W | u16,单位mA | | | | | 3 | 霍尔传感器单向电压范围 | 0x0002 | R/W | u16,单位mV | | | | | 4 | 霍尔传感器0电流ADCZ值 | 0x0003 | R/W | u16 | 01 03 00 03 00 01 74 0A | | 写0自动校准 | | 5 | 霍尔传感器参考电压 | 0x0004 | R/W | u16,单位mV | | | | | 6 | 传感器电源电压 | 0x0005 | R/W | u16,单位mV | 01 03 00 05 00 01 94 0B | | | | 7 | 传感器采样间隔 | 0x0006 | R/W | u16,单位ms | 01 03 00 06 00 01 64 0B | | | | 8 | 以上参数的crc校验 | 0x0007 | R/W | u16,大端序 | | | | | 9 | 内部参考电压ADC值 | 0x0008 | R | u16,理论1191mV对应244 | 01 03 00 08 00 01 05 C8 | | | | 10 | 目标电压ADC值 | 0x0009 | R | u16 | 01 03 00 09 00 01 54 08 | | | | 11 | 供电电压ADC值 | 0x000A | R | u16 | | | | | 12 | HALL传感器ADC值 | 0x000B | R | u16 | 01 03 00 0B 00 01 F5 C8 | | | | 13 | 目标电压 | 0x000C | R | u16,单位mV | 01 03 00 0C 00 01 44 09 | 01 03 02 00 00 B8 44 | | | 14 | 供电电压 | 0x000D | R | u16,单位mV | | | | | 15 | 霍尔传感器电流 | 0x000E | R | u16,单位mA | 01 03 00 0E 00 01 E5 C9 | | | | 16 | 霍尔传感器电路方向 | 0x000F | R | u16,1:正向,0:反向 | 01 03 00 0F 00 01 B4 09 | | | 功能码说明 | 功能码 | 功能 | | | | 是否回复 | 响应条件 | | | 用例 | | | | | |-----|--------|---|---|---|------|--------------|---|---|----------------------------------|---|---|---|---| | 0x1 | 写单个寄存器 | | | | 是 | 无 | | | | | | | | | 0x3 | 读若干寄存器 | | | | 是 | 无 | | | | | | | | | 0x6 | 写地址寄存器 | | | | 否 | 只在fun按钮按下时响应 | | | 00 06 00 00 00 01 02 00 02 AB 27 | | | | | modbus地址说明 | 地址 | 说明 | | | 是否回复 | 特别说明 | | | |-------|-------|---|---|------|------|---|---| | 0 | 广播地址 | | | 否 | 只可写 | | | | 1-253 | 一般地址 | | | 是 | 无 | | | | 254 | 采集器地址 | | | 是 | 无 | | | 主机发送的读命令解析 | 地址 | 功能码 | 寄存器地址 2字节 | 读寄存器数量 2字节 | CRC16 2字节 | | --- | --- | --------- | ---------- | --------- | | 01 | 03 | 00 0C | 00 01 | 09 44 | 从机对读命令响应 | 地址 | 功能码 | 返回字节数 | 寄存器1数据 | 寄存器..数据 | CRC16 2字节 | | --- | --- | ----- | ------ | ------- | --------- | | 01 | 03 | 00 0C | 00 00 | .. .. | 44 B8 | ## 开发环境 - Dart SDK: ^3.11.5 - Flutter 框架 - 目标平台: Windows、Linux ## 构建与运行 ```bash flutter pub get flutter run -d windows # 或 -d linux ``` ## 功能 1. GUI 界面 2. 可选择串口与波特率 3. 可选择模拟 1-10 个传感器从机 (地址 1-10) 4. 直观查看每个传感器当前各寄存器值,并可在 GUI 修改可写寄存器 (序号 1-8) 5. 自动随机生成只读传感器数据 (序号 9-16) 6. 实时显示通信日志 (RX/TX 原始帧 + 解析详情),可导出保存为 txt ## 代码结构 ``` lib/ ├── main.dart # 应用入口 ├── home_page.dart # 主界面 (串口配置、从机配置、寄存器编辑、通信日志) ├── serial_service.dart # 串口服务 (打开/关闭/监听/帧处理/日志管理) ├── sensor_slave.dart # 传感器从机模型 (寄存器表、请求处理、随机数据) └── modbus_rtu.dart # Modbus-RTU 协议 (CRC16、帧解析、帧构建) ``` ## 串口依赖 - `libserialport` — Dart 串口读写 API (FFI) - 原生 C 库 `serialport.dll` 在 Windows 构建时由 CMake 从本地源码自动编译 (`windows/third_party/libserialport/`),无需手动安装 > **注意**: `flutter_libserialport` pub.dev v0.6.0 包不含 Windows 原生插件目录 (`windows/`), > 但 pubspec.yaml 中声明了 `pluginClass: FlutterLibserialportPlugin`, > 导致 CMake 的 `add_subdirectory` 找不到目录而编译失败。 > 因此本项目改为直接依赖 `libserialport` (纯 Dart FFI 包), > 并在 `windows/CMakeLists.txt` 中自行构建和部署 `serialport.dll`。 Windows 平台需要安装 Visual Studio C++ 构建工具以编译原生库。