11f1c4f55bee79239ea0b7de9d88ab64e81e9c4a
- 新增 get_all_device_serials() 查询 dnt_info 全表
- device_status_monitor 改为三阶段:
Phase 1: 遍历 _registry 活跃设备
Phase 2: 扫描 dnt_info 全表,修正 DB 状态与交互实际不符的情况:
- state=1(在线) 但 >60s 无交互 → 更新为离线
- state=0(离线) 但有交互 → 根据交互模式更新
Phase 3: 预留清理位
- 提取 _apply_state_change() 避免重复代码
- Count_Off 登录时主动设 _device_status[serial]=1,
防止刚登录只有 1 条交互记录时被误判为 通信不良
EDC 服务 (Edge Data Center)
测试工装边缘数据中心 — Python 实现,基于 uvloop 的高性能异步网络服务。
系统架构
TCP/UDP ┌─────────────────────────────────────┐
◄─────────────► │ EDC 服务 │
│ │
UDP :5500 ───► │ 设备发现 / 心跳 / 信息查询 │
UDP :5505 ───► │ 消息监听 │
TCP :5550 ───► │ 时间同步 / 数据上报 / 串口透传 │
│ │
│ 后台解析服务 ──► DG430 协议 → MySQL │
└─────────────────────────────────────┘
快速开始
# 创建虚拟环境
python3 -m venv .venv && source .venv/bin/activate
# 安装依赖
pip install -r requirements.txt
# 设置环境变量
export EDC_MYSQL_HOST=127.0.0.1
export EDC_MYSQL_USER=root
export EDC_MYSQL_PASSWORD=your_password
export EDC_MYSQL_DB=edc
# 确保数据库已创建
mysql -u root -e "CREATE DATABASE IF NOT EXISTS edc CHARACTER SET utf8mb4"
# 启动
python run.py
配置
所有配置通过环境变量,见 src/config.py:
| 变量 | 默认值 | 说明 |
|---|---|---|
EDC_UDP_PORT |
5500 | UDP 设备发现端口 |
EDC_UDP_MSG_PORT |
5505 | UDP 消息监听端口 |
EDC_TCP_PORT |
5550 | TCP 数据上报端口 |
EDC_BIND_HOST |
0.0.0.0 | 绑定地址 |
EDC_MYSQL_HOST |
127.0.0.1 | MySQL 地址 |
EDC_MYSQL_PORT |
3306 | MySQL 端口 |
EDC_MYSQL_USER |
root | 数据库用户 |
EDC_MYSQL_PASSWORD |
— | 数据库密码 |
EDC_MYSQL_DB |
edc | 数据库名 |
EDC_PARSE_POLL_INTERVAL |
0.5 | 解析轮询间隔(秒) |
EDC_LOG_LEVEL |
INFO | 日志级别 |
协议参考
目录结构
edc_server/
├── run.py # 入口
├── requirements.txt # uvloop, aiomysql
└── src/
├── config.py # 环境变量配置
├── models.py # MySQL 连接池 + 表结构 + CRUD
├── protocol.py # PGLC JSON 协议解析
├── dg430.py # DG430 二进制协议解析
├── handlers.py # 业务处理 + 后台解析服务
└── server.py # UDP/TCP 异步服务主程序
Description
Languages
Python
100%