一个纯 Lua 实现的 IEC 60870-5-101/104 电力系统通信协议栈。
English Documentation | 简体中文
- IEC 60870-5-101: 平衡和非平衡传输模式
- IEC 60870-5-104: 基于 TCP/IP 的通信
- 纯 Lua 实现: 无外部 C 依赖,易于集成
- 灵活架构: 支持主站(控制站)和从站(被控站)模式
- 完整数据类型: 全面支持标准中定义的所有 ASDU 类型
- 平台无关: 可与 OpenResty、原生 Lua 和其他 Lua 运行时一起使用
luarocks install lua-iec60870git clone https://github.com/yourusername/lua-iec60870.git
cd lua-iec60870
# 将 iec60870 目录复制到你的 Lua 路径local iec101 = require 'iec60870.master.cs101'
-- 创建主站实例
local master = iec101:new({
-- 配置项
})
-- 启动通信
master:start()
-- 发送总召唤命令
master:send_interrogation()
-- 读取数据
master:run()local iec101 = require 'iec60870.slave.cs101'
-- 创建从站实例
local slave = iec101:new({
addr = 1, -- 站地址
-- 配置项
})
-- 设置数据处理器
slave:set_handler(function(asdu)
-- 处理 ASDU
end)
-- 启动通信
slave:start()
-- 运行事件循环
slave:run()local conf = {
-- 超时设置(毫秒)
TIMEOUT = 5000, -- 请求超时
T0 = 30, -- 连接超时(秒)
T1 = 15, -- 发送超时(秒)
T2 = 10, -- 确认超时(秒)
T3 = 20, -- 测试超时(秒)
-- 帧设置
FRAME_NO_ADDR = false, -- 帧无地址
FRAME_ADDR_SIZE = 2, -- 地址字节数
ADDR_SIZE = 2, -- 公共地址字节数
OBJ_ADDR_SIZE = 2, -- 信息对象地址字节数
COT_SIZE = 1, -- 传输原因字节数
-- 重试设置
MAX_RESEND = 3, -- 最大重试次数
MAX_RESEND_TIME = 10, -- 重试超时(秒)
}iec60870/
├── common/ # 通用工具(缓冲区、日志、辅助函数)
├── frame/ # 帧层(FT1.2、APCI、控制域)
├── asdu/ # 应用层(ASDU 解析、类型)
├── data/ # 数据类型编码器/解码器
├── master/ # 主站实现
│ ├── cs101/ # IEC 101 主站
│ └── cs104/ # IEC 104 主站
└── slave/ # 从站实现
├── cs101/ # IEC 101 从站
└── cs104/ # IEC 104 从站
- 帧层 (Frame Layer): 处理 FT1.2 帧格式用于串行通信
- ASDU 层: 解析和编码应用服务数据单元
- 数据类型: 实现所有标准数据类型(SIQ、DIQ、NVA 等)
- 主站/从站: 实现站点行为和状态机
M_SP_NA_1/M_SP_TA_1: 单点信息M_DP_NA_1/M_DP_TA_1: 双点信息M_ST_NA_1/M_ST_TA_1: 步位置信息M_BO_NA_1/M_BO_TA_1: 位串(32位)M_ME_NA_1/M_ME_NB_1/M_ME_NC_1: 测量值M_IT_NA_1/M_IT_TA_1: 累计量
C_SC_NA_1: 单命令C_DC_NA_1: 双命令C_RC_NA_1: 调节步命令C_SE_NA_1/C_SE_NB_1/C_SE_NC_1: 设点命令
完整列表请参见 types.lua。
examples 目录中包含完整的使用示例:
app_example_standalone.lua: 独立应用示例app_example_openresty.lua: OpenResty 集成示例test_simple.lua: 简单测试用例
在本地生成文档:
ldoc .- Lua 5.1+ 或 LuaJIT 2.0+
- 可选: OpenResty 用于 Web 集成
- 依赖库:
middleclass: OOP 支持basexx: 基数编码/解码cjson: JSON 支持hashings: 校验和计算
# 运行测试
lua test/test_simple.lua
# 使用特定配置运行
lua examples/test_config.luaMIT License - 详见 LICENSE 文件
欢迎贡献!请:
- Fork 本仓库
- 创建特性分支
- 进行修改
- 如适用,添加测试
- 提交 Pull Request
- IEC 60870-5-101: 远动设备及系统 - 第5-101部分: 传输协议 - 基本远动任务配套标准
- IEC 60870-5-104: 远动设备及系统 - 第5-104部分: 传输协议 - 采用标准传输协议集的 IEC 60870-5-101 网络访问
如有问题和疑问: