第3章:FTU通信协议基础:IEC 60870-5-101/104协议入门、Modbus协议在FTU中的应用
通信协议,说白了就是FTU跟主站之间“说话”的规矩。你想想看,一个FTU装在电线杆上,主站可能在几十公里外的调度中心,它们之间怎么交换数据?靠的就是协议。这一章,我带你搞定FTU最常用的两套协议:IEC 101/104和Modbus。
3.1 为什么FTU需要通信协议?
没有协议,FTU采集到的电流、电压数据就是一堆乱码。主站不知道哪个字节代表A相电流,哪个字节代表开关状态。协议就是双方约定好的“翻译手册”。
我在现场调试时遇到过这种情况:FTU和主站都通电了,数据就是传不上来。查了半天,发现是协议里的地址位对不上。嗯,这种坑踩过一次就记住了。
3.2 IEC 60870-5-101协议入门
IEC 101,全称IEC 60870-5-101,是电力系统专用的串口通信协议。它基于RS-232或RS-485物理层,在配电网自动化中应用非常广泛。
3.2.1 协议特点
- 主从模式:主站发起请求,FTU(从站)响应。不会出现两个设备同时说话的情况。
- 帧格式固定:每个报文都有固定的起始字符、长度、控制域、地址域、用户数据和校验码。
- 支持多种数据类型:遥测(测量值)、遥信(状态量)、遥控(控制命令)、遥调(设定值)。
3.2.2 典型报文结构
我习惯把IEC 101的报文拆成三部分看:
起始字符(0x68) + 长度(L) + 长度(L) + 起始字符(0x68)
控制域(C) + 地址域(A) + 链路用户数据(ASDU)
校验和(CS) + 结束字符(0x16)
举个例子,一个简单的“召唤全数据”命令:
68 0B 0B 68 73 01 64 01 06 00 01 00 00 00 14 16
这里0x73是控制域,表示“请求/响应”模式。0x01是FTU地址。后面的ASDU部分告诉FTU:“把你所有的遥测遥信都发上来”。
3.3 IEC 60870-5-104协议入门
IEC 104是IEC 101的网络版。它把101的报文封装在TCP/IP包里,通过以太网传输。说白了,就是把串口那套东西搬到了网络上。
3.3.1 协议特点
- 基于TCP/IP:默认端口号2404。主站作为客户端,FTU作为服务器。
- 支持主动上报:FTU检测到遥信变位(比如开关跳闸),可以主动把数据推给主站,不用等主站来问。
- 传输更可靠:TCP协议自带重传机制,丢包了会自动补发。
3.3.2 APDU结构
IEC 104的报文叫APDU(应用协议数据单元),结构如下:
启动字符(0x68) + APDU长度(1字节) + 控制域(4字节) + ASDU(可变长度)
控制域里的四个字节很关键。我简单解释一下:
- 如果是主站发的命令,控制域里包含发送序号和接收序号。
- 如果是FTU的响应,控制域里也包含序号,用来确认收到了哪些报文。
举个例子,一个“总召唤”命令(让FTU把所有数据都发上来):
68 0E 00 00 00 00 64 01 06 00 01 00 00 00 00 14
注意这里的0x68是启动字符,0x0E是长度(14字节),后面四个0x00是控制域(表示这是I帧,序号从0开始)。
3.4 Modbus协议在FTU中的应用
Modbus协议,我愿称之为“工业界的通用语言”。它简单、轻量、容易实现,很多FTU都支持Modbus,尤其是跟PLC、触摸屏或者第三方系统对接时。
3.4.1 Modbus RTU vs Modbus TCP
| 特性 | Modbus RTU | Modbus TCP |
|---|---|---|
| 物理层 | RS-232/RS-485 | 以太网 |
| 报文格式 | 地址+功能码+数据+CRC | MBAP头+功能码+数据 |
| 典型应用 | 短距离、低速率 | 长距离、高速率 |
| FTU角色 | 从站(Slave) | 服务器(Server) |
3.4.2 常用功能码
在FTU里,我常用的Modbus功能码就这几个:
- 0x03:读取保持寄存器。用来读遥测数据,比如A相电流、B相电压。
- 0x04:读取输入寄存器。用来读遥信状态,比如开关分合位。
- 0x06:写单个寄存器。用来发遥控命令,比如合闸、分闸。
- 0x10:写多个寄存器。用来批量设置参数,比如定值修改。
3.4.3 实际报文示例
假设FTU地址是0x01,主站想读A相电流(存在寄存器地址0x0000):
主站发送:01 03 00 00 00 01 84 0A
FTU响应: 01 03 02 02 1C B9 7D
解释一下:
- 发送:地址01,功能码03,起始地址0000,读1个寄存器,CRC校验84 0A。
- 响应:地址01,功能码03,数据长度02(2字节),数据02 1C(十六进制,换算成十进制是540,表示54.0A,如果量程是0.1A/位的话),CRC校验B9 7D。
3.5 协议选择建议
在实际项目中,怎么选协议?我个人的习惯是这样的:
- 跟调度主站通信:首选IEC 104。因为电力系统主站基本都支持104,而且功能完善,支持主动上报。
- 跟本地PLC或触摸屏通信:用Modbus RTU或TCP。简单、稳定、调试方便。
- 老旧设备改造:如果主站只支持IEC 101,那就用101。但要注意串口参数(波特率、数据位、校验位)必须一致。
嗯,这一章的内容就到这里。协议这东西,光看文档是学不会的。我建议你找个FTU和串口调试助手,实际抓几个报文看看。把报文里的每个字节都搞明白,你就真正入门了。
- IEC 101是串口协议,主从模式,适合短距离通信。
- IEC 104是网络协议,基于TCP/IP,支持主动上报。
- Modbus简单通用,适合FTU与第三方设备对接。
- 调试时注意地址、校验、物理连接,这些是常见坑点。