# ykc-pile-simulator **Repository Path**: development_charging/ykc-pile-simulator ## Basic Information - **Project Name**: ykc-pile-simulator - **Description**: 云快充协议桩模拟器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2026-06-09 - **Last Updated**: 2026-06-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 云快充充电桩模拟器 基于**铁塔汽车充电平台协议(云快充v1.6)V1.1** 开发的充电桩模拟器,用于模拟充电桩与云平台之间的TCP通信。 ## 功能特性 - **TCP长连接通信** - 基于asyncio异步实现的TCP客户端 - **云快充协议支持** - V1.5.0 / V1.6.0 / V1.7.0 三个版本 - **充电场景模拟** - 插枪、拔枪、开始充电、停止充电 - **远程控制响应** - 响应平台下发的启动、停止、对时、重启指令 - **实时数据上报** - 充电过程中定时上报电压、电流、SOC等数据 - **交易记录生成** - 充电完成后生成并上报交易记录 - **故障模拟** - 支持急停、过温、接地等故障触发 - **消息日志** - HEX格式查看收发报文,支持导出 ## 环境要求 - Python 3.8+ - Windows 10/11(打包exe后可在Windows直接运行) - 无需安装额外依赖(使用Python标准库) ## 项目结构 ``` pile_simulator/ ├── main.py # 程序入口 ├── config.py # 配置管理(加载/保存/验证) ├── protocol.py # 云快充协议编解码 ├── connection.py # TCP连接管理(asyncio异步) ├── simulator.py # 场景模拟器(状态机/充电流程) ├── ui.py # Tkinter图形界面 ├── logger.py # 消息日志管理 ├── utils.py # CRC16/BCD/时间格式化工具 ├── README.md # 本文件 └── config.json # 配置文件(运行后自动生成) ``` ## 快速开始 ### 1. 直接运行 ```bash cd pile_simulator python main.py ``` ### 2. 配置连接参数 运行后界面中填写: - **服务器地址** - 云平台IP地址(默认 127.0.0.1) - **端口** - 云平台端口(默认 9000) - **桩编号** - 充电桩唯一编号(默认 PILE001) - **协议版本** - 选择V1.5.0 / V1.6.0 / V1.7.0 ### 3. 连接并测试 1. 点击「连接」按钮建立TCP连接 2. 模拟器自动发送登录消息 3. 收到登录应答后进入待机状态 4. 进行插枪、充电等操作 ## 界面说明 ``` ┌─────────────────────────────────────────────────────────────┐ │ 连接配置 │ 状态监控 │ │ IP: [127.0.0.1] │ 连接状态: ● 已连接 │ │ 端口: [9000] │ 枪状态: ● 充电中 │ │ 桩编号: [PILE001] │ 电压: 380.5 V │ │ 版本: [V1.6.0 ▼] │ 电流: 45.2 A │ │ [连接] [断开] │ 功率: 17.20 kW │ ├─────────────────────┼────────────────────────────────────┤ │ 操作控制 │ 远程指令状态 │ │ [插入充电枪] │ 远程启动: 等待中 │ │ [拔除充电枪] │ 远程停止: 等待中 │ │ [开始充电] │ 时间同步: 等待中 │ │ [停止充电] │ 远程重启: 等待中 │ │ [模拟故障 ▼] │ │ ├─────────────────────┴────────────────────────────────────┤ │ 消息日志 [☑HEX] [清空] [导出] 过滤: [全部▼] │ │ ──────────────────────────────────────────────────────── │ │ 10:30:15 [TX] 68 0F 00 01 00 01 ... 16 │ │ 10:30:15 [RX] 68 0B 00 01 00 02 ... 16 │ └─────────────────────────────────────────────────────────────┘ ``` ## 充电流程 ### 本地充电流程 ``` 1. 连接服务器 → 登录成功 2. 点击「插入充电枪」→ 枪状态变为"已插枪" 3. 点击「开始充电」→ 枪状态变为"充电中",开始上报实时数据 4. 点击「停止充电」→ 枪状态变为"充电结束",发送交易记录 5. 点击「拔除充电枪」→ 枪状态变为"空闲" ``` ### 远程充电流程(App控制) ``` 1. 连接服务器 → 登录成功 2. 用户在App发起充电请求 3. 平台下发「远程启动指令」(0x34) 4. 模拟器自动回复「启动成功」(0x33) 5. 模拟器进入充电状态,开始上报实时数据 6. 用户在App停止充电 7. 平台下发「远程停止指令」(0x36) 8. 模拟器自动回复「停止成功」(0x35) 9. 模拟器发送交易记录 (0x3B) ``` ## 协议帧类型 ### 上行消息(充电桩 → 云平台) | 帧类型 | 名称 | 说明 | |-------|------|------| | 0x01 | 登录认证 | 上电或恢复连接后发送 | | 0x03 | 心跳 | 周期30秒发送 | | 0x13 | 实时监测数据 | 充电中周期15秒发送 | | 0x31 | 主动申请启动充电 | 本地刷卡启动 | | 0x33 | 远程启机命令回复 | 回复远程启动结果 | | 0x35 | 远程停机命令回复 | 回复远程停止结果 | | 0x3B | 交易记录 | 充电完成后发送 | | 0x55 | 对时应答 | 回复时间同步 | | 0x91 | 远程重启应答 | 回复重启指令 | ### 下行消息(云平台 → 充电桩) | 帧类型 | 名称 | 说明 | |-------|------|------| | 0x02 | 登录认证应答 | 登录结果 | | 0x04 | 心跳包应答 | 心跳响应 | | 0x34 | 运营平台远程控制启机 | 远程启动充电 | | 0x36 | 运营平台远程停机 | 远程停止充电 | | 0x56 | 对时设置 | 时间同步 | | 0x92 | 远程重启 | 重启指令 | ## 打包为exe ### 安装PyInstaller ```bash pip install pyinstaller ``` ### 打包命令 ```bash pyinstaller main.spec ``` ### 配置文件说明 `main.spec` 是 PyInstaller 打包配置文件,包含: - 入口文件:`main.py` - 输出名称:`ykc_pile_simulator` - 窗口模式:无控制台窗口 - 图标:`favicon.ico` - 隐式导入:`asyncio`、`PIL` 等依赖 ### 运行exe 打包完成后,exe文件位于 `dist/ykc_pile_simulator.exe` ```bash # 或者直接运行 dist/ykc_pile_simulator.exe ``` ## 配置文件 运行后会自动生成 `config.json` 配置文件: ```json { "server": { "host": "127.0.0.1", "port": 9000 }, "pile": { "code": "PILE001", "version": "V1.6.0", "gun_count": 2, "sim": "13800138000" }, "simulator": { "heartbeat_interval": 30, "data_report_interval": 15, "reconnect_interval": 5 }, "ui": { "window_width": 900, "window_height": 750 }, "logging": { "level": "INFO", "format": "%(asctime)s [%(levelname)s] %(name)s: %(message)s", "datefmt": "%H:%M:%S", "file_enabled": true, "log_file": "app.log" } } ``` ## 故障模拟 点击「模拟故障」按钮可触发以下故障: | 故障类型 | 说明 | |---------|------| | 急停按钮 | Bit1 - 急停按钮动作 | | 整流模块故障 | Bit2 - 无可用整流模块 | | 过温故障 | Bit3 - 出风口温度过高 | | 交流防雷故障 | Bit4 - 交流防雷故障 | | 门打开 | Bit13 - 门打开 | ## 注意事项 1. **连接前确认** - 确保云平台服务已启动,IP端口配置正确 2. **协议版本** - 选择与云平台一致的协议版本 3. **桩编号** - 每个模拟器实例使用唯一桩编号 4. **日志查看** - 建议开启HEX显示查看原始报文 5. **故障清除** - 故障触发后需点击「模拟故障」重新选择清除 ## 协议参考 - **铁塔汽车充电平台协议(云快充v1.6)V1.1.md** - 协议文档百度网盘: https://pan.baidu.com/s/1xT8xWty1XRUHDzTZM_8aLw?pwd=jcpp ## 技术栈 | 组件 | 技术 | |-----|------| | 语言 | Python 3.8+ | | GUI | Tkinter(Python标准库) | | 网络 | asyncio + socket | | 打包 | PyInstaller | | 协议 | 云快充(铁塔)V1.6 | ## 许可 本项目仅供学习和研究使用,商业使用请联系相关权利人。