IEC 60870-5-104 从站模拟程序(基于数据库数据转发)
·
IEC 60870-5-104 从站模拟程序(基于数据库)
📌 项目简介
本项目是一个纯 Python 实现的 IEC 60870-5-104 从站模拟程序,主要功能包括:
- 从 MySQL 数据库轮询获取遥测/遥信数据;
- 实现 IEC 104 从站通信,支持与主站的握手、总召唤、变化量上送、周期上送;
- 不依赖第三方协议库,完全自定义实现104协议帧处理;
- 线程隔离,通信与数据库采集独立运行。
📁 项目结构
├── mysql_to_iec104.py # 主程序(包含数据库线程 + IEC104服务线程)
├── README.md # 使用说明
⚙️ 环境依赖
- Python >= 3.7
- pymysql
- MySQL 数据库一套
✅ 建议在 Linux 或 Windows 环境下运行,确保网络端口 2404 可被监听。
安装依赖
pip install pymysql
🏗️ 数据库配置
请先在 MySQL 中创建数据库和数据表,表结构如下:
表名:104_table
包含 16 个字段,字段名为 字段1 到 字段16:
- 字段1 ~ 字段15:模拟量(遥测) → IOA 1~15
- 字段16:开关量(遥信) → IOA 16
可手动插入或通过其他程序实时更新这张表。
🔄 功能说明
1、数据库轮询线程(db_polling_thread)
- 每秒查询一次数据库,取出一行 16 个字段;
- 检测数据是否有变化,变化项入队;
- 每 15 分钟执行一次“周期性全量上送”任务。
- IEC104 从站通信线程(iec104_server_thread)
2、监听 2404 端口,等待主站连接;
- 支持 STARTDT / STOPDT / TESTFR 握手过程;
- 接收总召命令(C_IC_NA_1),上送 15 个模拟量和 1 个遥信量;
- 检测到变化/周期性任务时,构造并发送 I 帧(遥测/遥信);
- 支持 S 帧、U 帧的处理与回应。
📡 报文说明
- 遥测类型:M_ME_NA_1(Type=9),顺序寻址方式
- 遥信类型:M_SP_NA_1(Type=1)
- 总召命令:C_IC_NA_1(Type=100)
✅ 启动方式
直接运行:
python mysql_to_iec104.py
运行日志将输出:
- 数据库连接情况
- 数据采集变化日志
- IEC104 报文收发日志
- 总召唤响应及周期上报状态
🧪 调试建议
- 可使用调试主站软件如 IEC104 Tester、ScadaBR 等;
- 验证主站与从站建立握手后,是否能触发总召并成功上送;
- 数据库表中字段值变化时,观察是否触发变化量上送。
📍 注意事项
- 当前程序仅支持单连接从站模式;
- 所有点位地址为 顺序型寻址(IOA 从 1 开始);
- 程序未使用任何现成协议库,适合教学、实验、快速部署使用;
- 实际工程中请注意加固异常处理、安全机制等。
如需扩展支持多个表、多个连接、写入命令响应等功能,请在此基础上继续拓展。
📞 联系与支持
如有问题或需求,可通过 Issues 提出,也欢迎 Fork 本项目进行二次开发。


DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)