智能秤系统 Rust 重构版
- 电子秤 - 支持科利/耀华协议,串口通信
- 车牌识别 - 多摄像头端点,HTTP 触发/读取
- IC卡 - 串口读卡器支持
- 数据上报 - HTTP POST 上报到服务器
- 日志系统 - UDP 远程日志 + 控制台输出
- 配置管理 - 远程 YAML + 本地回退
# 编译
cargo build --release
# 运行 (Mock 模式)
SCALE_MOCK=true cargo run --release
# 运行 (真实模式)
SCALE_PORT=/dev/ttyS1 SCALE_BAUD_RATE=9600 cargo run --release| 变量 | 默认值 | 说明 |
|---|---|---|
CONFIG_URL |
http://localhost:8888/config.yml |
远程配置 URL |
CONFIG_PATH |
config.yml |
本地配置文件 |
PORT |
8080 |
HTTP 服务端口 |
SCALE_PORT |
/dev/ttyUSB0 |
秤串口 |
SCALE_BAUD_RATE |
9600 |
串口波特率 |
SCALE_TYPE |
keli |
秤类型 (keli/yaohua) |
SCALE_MOCK |
false |
Mock 模式 |
LPR_MOCK |
false |
LPR Mock 模式 |
ICCARD_MOCK |
false |
IC卡 Mock 模式 |
REPORT_MOCK |
false |
上报 Mock 模式 |
LOG_SERVER_ENABLED |
false |
UDP 日志 |
LOG_SERVER_IP |
127.0.0.1 |
UDP 日志服务器 IP |
LOG_SERVER_PORT |
9999 |
UDP 日志服务器端口 |
scale:
port: /dev/ttyS1
baudRate: 9600
minWeight: 10
mock: true
lpr:
mock: true
waitTime: 2000
endpoints:
- name: front
loginUrl: http://192.168.0.211/login.php
triggerURL: http://192.168.0.211/avstrigger.php
authToken: xxx
logServer:
ip: 101.200.75.8
port: 54321
enabled: true
log:
opened: true
report:
loginUrl: https://wxapp.xhl365.cn/jingou/secUserManager/login
reportUrl: https://wxapp.xhl365.cn/jingou/smartScaleManager/pushMixData/
delay: 200
mock: true
iccard:
port: /dev/ttyUSB0
baudRate: 9600
mock: true# 运行所有测试
cargo test --release
# 带日志运行
RUST_LOG=info cargo test --releasesmart-scale-rs/
├── src/
│ ├── main.rs # 主程序 FSM 状态机
│ ├── config/mod.rs # 环境变量配置
│ ├── configserver/ # 远程配置服务
│ ├── scale/ # 电子秤模块
│ ├── lpr/ # 车牌识别模块
│ ├── iccard/ # IC卡模块
│ ├── report/ # 数据上报模块
│ ├── log/ # 日志模块
│ ├── server/ # HTTP 服务
│ └── time.rs # 时间工具
└── tests/ # 集成测试
| 指标 | Go | Rust |
|---|---|---|
| 代码行数 | 1883 | 2353 |
| 文件数 | 17 | 11 |
| 依赖 | 5+ | 15+ |
| 编译时间 | ~2s | ~10s |
| 二进制大小 | ~15MB | ~7MB |
Rust 代码量多 25% 主要原因:
- 显式错误处理 (Result/Option)
- 严格的类型系统
- 模块化设计
MIT