lib60870 完全入门:如何快速掌握电力 IEC 60870-5-101/104 协议C语言库

发布时间:2026/8/28 12:32:35
lib60870 完全入门:如何快速掌握电力 IEC 60870-5-101/104 协议C语言库 lib60870 完全入门如何快速掌握电力 IEC 60870-5-101/104 协议C语言库【免费下载链接】lib60870Official repository for lib60870 an implementation of the IEC 60870-5-101/104 protocol (read-only mirror)项目地址: https://gitcode.com/gh_mirrors/li/lib60870lib60870是一个功能完整、久经实战检验的电力IEC 60877-5-101/104 协议 C 语言库当前版本 2.4.0。它用标准 C99 实现了主站Master/Client和从站Slave/Server两端的完整协议栈支持串口通信、TCP/IP 网络通信、TLS 加密IEC 62351-3以及 CS104 冗余组是开发电力监控系统SCADA、RTU、网关类项目的高性价比选择。本文带你从零开始认识项目 → 跑通示例 → 上手编程 → 掌握配置技巧。一、30 秒认识 lib60870IEC 60877-5 是电力行业通信的国际标准系列其中两个最常用的伴生标准Companion Standard是协议传输方式典型场景IEC 60877-5-101CS101串口RS485/RS232变电站、配电终端、RTUIEC 60877-5-104CS104TCP/IP默认端口 2404电能量采集、远程监控、电力物联网lib60870 一次实现两者CS104 直接复用 CS101 的应用层所以学一套 API 两边都能用。核心特性一览支持 IEC 60877-5-101/104 全部应用层消息类型测量值、遥信、命令等CS101 支持平衡模式一对一专线与不平衡模式一主多从总线CS104 支持冗余组、文件服务File Service、无阻塞线程模式基于 mbedtls 2.28/3.6 实现 IEC 62351-3 的 TLS 加密与双向认证可移植 C99 代码支持 Linux / Windows / BSD 等 POSIX 系统GPLv3 商业双许可完整特性清单见 README.md深入用法见官方用户指南 user_guide.adoc。二、项目结构导航先看哪里仓库主体在lib60870-C/目录下新手建议按以下顺序浏览目录内容新手优先级lib60870-C/examples/15 个可运行示例主站/从站/TLS/冗余⭐⭐⭐ 最高lib60870-C/src/iec60870/协议核心cs101/、cs104/、apl/、link_layer/⭐⭐lib60870-C/src/hal/平台抽象层串口、Socket、线程、时间、TLS⭐lib60870-C/config/lib60870_config.h编译期配置裁剪库体积的关键⭐⭐lib60870-C/tests/Unity 单元测试与 TLS 证书⭐其中 API 头文件集中在 src/inc/api/比如 cs104_connection.h、cs101_slave.h是查函数签名的第一站。三、一键安装步骤5 分钟编译并运行示例 拿到代码只需三条命令git clone https://gitcode.com/gh_mirrors/li/lib60870 cd lib60870/lib60870-C make cd examples/cs104_server make ./cs104_server也可以用 CMake 构建推荐跨平台场景mkdir build cd build cmake .. make几个常用编译开关命令作用make默认构建make WITH_MBEDTLS1启用 TLS 支持需先按 dependencies/README.md 放置 mbedtls 2.28 源码make WITHOUT_HAL1 WITHOUT_COMMON1不带公共代码与 HAL 层编译配合其他 MZ 协议库联用官方示例覆盖了几乎所有典型场景cs104_server/simple_server.c最简服务器、cs104_client/simple_client.c最简客户端、cs101_slave/slave_example.c串口从站、cs104_redundancy_server/冗余组、tls_server/tls_client/TLS 通信。建议按server → client → slave的顺序逐个跑通这是最快建立整体认知的方式。四、五分钟上手搭建你的第一个 CS104 服务器以官方示例 simple_server.c#L348-L392 为模板一个可用的 CS104 从站只需 4 步创建从站对象CS104_Slave_create(100, 100)两个参数分别是低优先级/高优先级事件队列大小注册回调如CS104_Slave_setInterrogationHandler(slave, interrogationHandler, NULL)处理总召请求启动服务CS104_Slave_start(slave)开启后台监听线程默认监听 2404 端口可用CS104_Slave_setLocalPort修改主动上送数据创建 ASDU → 添加信息对象 →CS104_Slave_enqueueASDU(slave, newAsdu)放入发送队列 库采用抽象数据类型 回调的面向对象风格所有消息处理都是严格异步的发送用非阻塞函数接收在回调中处理。掌握CS101_ASDU_create / addInformationObject / destroy这套三件套就掌握了整个库的核心编程模型详见 user_guide.adoc 的 Application layer messages 一节。五、主站客户端编程连接、读数据与发送命令主站侧只有两个核心类型对应两种协议CS104 客户端→CS104_ConnectionCS101 主站→CS101_Master平衡/不平衡模式以最常用的 CS104 为例典型操作链路如下操作关键函数说明建连接CS104_Connection_create(127.0.0.1, 2404)CS104_Connection_connect(con)端口填-1使用默认 2404读单点数据CS104_Connection_sendReadCommand(con, ca, ioa)需知道公用地址 CA 和信息对象地址 IOA总召CS104_Connection_sendInterrogationCommand(con, cot, ca, qoi)QOI20 表示全站总召对时CS104_Connection_sendClockSyncCommand传 CP56Time2a 时间戳遥控CS104_Master_sendProcessCommandEx支持先选后合与直接执行两种流程收响应CS101_ASDUReceivedHandler回调所有回复消息都在此统一处理⚠️ 新手最容易踩的坑所有发送函数都不阻塞返回不代表对端已响应——真正的结果含失败标志要在 ASDU 接收回调里通过CS101_ASDU_isNegative判断。六、CS101 串口通信配置平衡与不平衡模式CS101 通过串口运行先用SerialPort_create(/dev/ttyS0, 9600, 8, E, 1)配置串口再创建主站/从站平衡模式BALANCED一主一从专线两端都可随时主动发消息不平衡模式UNBALANCED一主多从总线从站只能在主站请求后应答支持广播地址代码层面差异极小——只是CS101_Master_create/CS101_Slave_create最后一个参数传IEC60877_LINK_LAYER_BALANCED或IEC60877_LINK_LAYER_UNBALANCED。主站还需用CS101_Master_addSlave(master, 1)注册从站、CS101_Master_useSlaveAddress指定当前通信对象从站则需CS101_Slave_setLinkLayerAddress(slave, 1)设置链路层地址。可参考 cs101_master_balanced/master_example.c 和 cs101_slave/slave_example.c。七、启用 TLS 安全通信IEC 62351-3 配置指南电力网络安全日益重要lib60870 基于 mbedtls 实现了 IEC 62351-3 要求的加密与双向认证按 dependencies/README.md 将 mbedtls 2.28 解压到dependencies/mbedtls-2.28CMake 会自动检测到它并启用 TLSMake 方式则加WITH_MBEDTLS1用TLSConfiguration_create()创建配置加载本端私钥/证书与对端白名单证书TLSConfiguration_setOwnKeyFromFile等服务端改用CS104_Slave_createSecure(100, 100, tlsConfig)创建现成的证书材料在 tests/certs/根证书、服务端/客户端证书等配套的 tls_server.c 与 tls_client.c 示例可直接对照学习。mbedtls 3.6 版本还额外支持 TLS 1.3 与密码套件自选。八、进阶配置与调试技巧 这些配置集中在编译期文件 lib60870_config.h是嵌入式开发者必看的文件打开调试输出将CONFIG_DEBUG_OUTPUT设为 1控制台即可打印协议调试信息运行时可用Lib60870_enableDebugOutput关闭裁剪体积针对单片机等资源受限设备可关闭线程/信号量支持、按场景只保留一种 CS104 服务器模式甚至编译为运行时零动态内存分配事件队列CONFIG_CS104_MESSAGE_QUEUE_SIZE默认 100控制断线期间最多缓存多少条上送消息无线程模式嵌入式实时系统可用CS104_Connection_startThreadless/CS104_Slave_startThreadless手动驱动协议栈参考cs104_server_no_threads/示例排查连接问题时先确认对端 CA/应用层参数是否一致、再检查 t0~t3 超时参数与 k/w 窗口参数定义见 user_guide.adoc 的 CS 104 specific parameters 一节。九、新手常见问题 FAQQ1lib60870 和 IEC 61850 有什么区别IEC 60877-5-101/104 面向传统变电站/配网 RTU 通信遥测、遥信、遥控IEC 61850 是面向新型变电站的面向对象标准两者应用场景不同不可互相替代。Q2商用项目可以用吗开源版遵循 GPLv3商业闭源项目需购买 MZ Automation 的商业许可安全认证 IEC 60877-5-7:2013 功能也是商业扩展。Q3从站主动上报数据时主站不在线怎么办从站事件队列会自动缓存消息CS104 默认 100 条连接恢复后继续补发不会丢数据默认单冗余组模式下。Q4想深入学习源码从哪入手建议路线frame.c帧结构→ link_layer/链路层→ cs101_asdu.c应用层数据单元→ cs104_connection.cCS104 连接状态机。Q5有测试可以验证我的编译环境吗有。tests/all_tests.c 基于 Unity 框架提供了完整单元测试套件构建后运行即可自检。十、总结lib60870 学习路线图阶段目标对应材料第 1 天编译成功跑通 server/client 示例examples/cs104_servercs104_client第 3 天读懂 ASDU 回调模型能收发遥测数据user_guide.adoc第 1 周实现自己的 CS104 从站总召上送simple_server.c第 2 周接入串口 CS101 或启用 TLScs101_slavetls_server示例进阶阅读源码、配置裁剪、处理冗余组CHANGELOG config/lib60870_config.hlib60870 的 API 设计清晰、示例齐全配合本文的路线图你完全可以在一周内做出一个可用的 IEC 60870-5-101/104 通信原型。现在去跑通你的第一个示例吧【免费下载链接】lib60870Official repository for lib60870 an implementation of the IEC 60870-5-101/104 protocol (read-only mirror)项目地址: https://gitcode.com/gh_mirrors/li/lib60870创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻