电力系统远动(power system telemechanics):为电力系统调度服务的远距离监测、控制技术,即管理和监控分布甚广的众多厂、所、站和设备、元器件的运行工况的一种技术手段。
一般来说,电力系统远动终端RTU(Remote Terminal Unit)具有"四遥"等功能。"四遥"主要指的是遥测、遥控、遥调、遥信四种。其实从"遥"字面意思上我们也可以看到这注定是一个远程远距离的操控了。
ps: 一摇:遥信
二遥:遥信和遥测
三遥:遥信、遥测和遥控
电力系统中常见的设备分为调度端(控制站、主站、客户机), 服务端(被控站、子站,典型设备包含TTU、RTU等),两者之间通过104规约来进行数据通信与传输。其传输层实际上使用的是TCP协议进行数据的传输。固定端口号为2404。
服务端不主动发起请求,一直处于侦听状态,当侦听到来自客户机的连接请求后,则接受此请求,由此建立一个TCP链接。控制站(即调度系统)作为客户机,被控站(即站端RTU)作为服务器。
即实际的代码操作为:
主站按照: Socket()->Connect()的顺序进行
RTU(服务器)端按: Socket()->Bind()->Listen()->Accept()的顺序进行。
传输接口(用户到TCP) 是一个面向流的接口,它没有为 DLT 634.5101中的ASDU定义任何启动或者停止机制。为了检出ASDU的启动和结束,每个APCI包括下列的定界元素:一个启动字符,ASDU的长度的规范,以及控制域,见图4。可传送一个完整的APDU(或者出于控制目的,仅有APCI域,见图5)。
默认固定为 68H,意思就是只要是IEC104协议就是以68H开头;
起始一个apdu的总长度不会超过255个字节;
在协议中的第二个字节会记录本apdu的长度,但是这个记录的长度数是除开前面两个字节之外的长读数,比如下面有个单点信息的apdu协议报文:
68 31 02 00 02 00 01 A4 14 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
其中第二个字节31H就是长度转为10进制为49个字节,你可以数下后面肯定是49个字节,如果不是就不是一个apdu协议;
控制域主要是有两个功能:
1. 报文的类型(I帧报文、U帧报文或者S帧报文)
2. 收发报文的个数
104规约帧报文分为三大类( I帧、S帧、U帧):
I帧是信息帧,作用是用于传输具体的通信数据的,长度必大于6个字节。
- I帧报文格式规定控制域1和控制域3的最低位为0;
- 其他部分用于发送序列号和接收序列号的计数;
比如:发送计数为 TxCounter 接收计数为RxCounter
控制域1 = TxCounter & 0xFE
控制域2 = (TxCounter >> 8) & 0xFF
控制域3 = RxCounter & 0xFE
控制域4 = (RxCounter >> 8) & 0xFF
S帧是用于确认接收的I帧,即当接收到I帧后需要返回一个S帧,长度等于6个字节。
- S帧报文格式规定控制域1的第0位为1,第1位为0和控制域第0位为0;
- S帧报文的发送序列号都为0
- S帧只用于APCI中(意思就是S帧的apdu报文只会有apci不会存在asdu),不能用于传输信息,只用给对方信息的确认,比如子站发送8条报文,结束后主站就会给子站发送一个确认帧(S帧),告诉子站我收到了8条报文。
比如:接收计数为RxCounter
控制域1 = 0x01
控制域2 = 0x00
控制域3 = RxCounter & 0xFE
控制域4 = (RxCounter >> 8) & 0xFF
U帧是控制帧,用于控制启动/停止子站进行数据传输,或测试TCP链路连接,长度等于6个字节。
(1) 如果用于【开启】则:
a.激活第2位为1 第3位0,如下表所示
b.激活确认第2为0 第3位1,如下表所示
U帧启动主要是用于 主站连接子站时,主站给子站发送一个U帧启动报文,如下:
主站发送:68 04 07 00 00 00
子站回复:68 04 0B 00 00 00
(2) 如果用【停止】则:
a.激活第4位为1 第5位0,如下表所示
b.激活确认第4为0 第5位1,如下表所示
U帧停止如下:
主站发送:68 04 13 00 00 00
子站回复:68 04 23 00 00 00
(3) 如果用【测试】则:
a.激活第6位为1 第7位0,如下表所示
b.激活确认第6为0 第7位1,如下表所示
比如:子站发送U帧测试(激活),主站收到测试U帧就会回复一个U帧(确认)
子站发送:68 04 43 00 00 00
主站发送:68 04 83 00 00 00
Tips:测试U帧一般用于子站判断主站是否还在连接子站,主站判断子站是否还在运行,保证数据传输的畅通性.
类型标识:占一个字节,标识出后面的信息体的数据类型
Tips:一个apdu中信息体中的所有数据的类型都是一致的,并且数据类型在类型标识这个位置标识;
类型的分类:
标度化值和归一化值占2个字节,短浮点数占4个字节
Tips:
- 当厂站(从站)短重新上电、初始化参数、重新分配缓存区等情况下,厂站需要给主站发送该类型,而主站收到该类型的APDU包,主站一般会做一次总召唤;
- 从站发送给主站
Tips:一般为主站发送给从站
Tips:总召唤时,为了压缩信息传输时间SQ=1;而在从站主动上传变化数据时,因为地址不连续,采用SQ=0;
分为 遥信品质描述词 和 遥测品质描述词:
1. 单点信息品质描述词
- BL : 封锁标志;BL=0 未被封锁;BL=1 封锁;
- SB: 取代标志;SB=0 未被取代;SB = 1 被取代;
- NT:刷新标志;NT=0 刷新成功;NT=1 刷新未成功;
- IV:有效标志;IV = 0 状态有效;IV = 1 状态无效;
- RES: 保留位
- SPI:遥信状态值(0=开;1=合) 【具体的值,占一个bit位】
1=确定状态的开;
2=确定状态的合;
3=不确定状态或中间装填)【具体的值,占2个bit为必然有4个值】
2. 双点信息品质描述词
- BL : 封锁标志;BL=0 未被封锁;BL=1 封锁;
- SB: 取代标志;SB=0 未被取代;SB = 1 被取代;
- NT:刷新标志;NT=0 刷新成功;NT=1 刷新未成功;
- IV:有效标志;IV = 0 状态有效;IV = 1 状态无效;
- RES: 保留位
- SPI:遥信状态值(0=不确定状态或中间装填;
1=确定状态的开;
2=确定状态的合;
3=不确定状态或中间装填)【具体的值,占2个bit为必然有4个值】
- 建立tcp连接;
- 主站给从站发送启动帧;报文:68 04 07 00 00 00
- 从站收到启动帧,给主站发送启动确认帧;报文:68 04 0B 00 00 00
- 主站给从站发送总召唤;报文:68 0E 00 00 00 00 64 01 06 00 01 00 00 00 00 14
- 从站收到主站的总召唤命令,给主站发送总召唤确认;
报文:68 0E 00 00 02 00 64 01 07 00 01 00 00 00 00 14- 从站上传遥信,遥测,电度等I帧信息帧,发送完毕从站发送总召唤结束帧;
- 主站收到从站发送的结束帧,会回复一个S帧的确认帧;
- 进入下一个周期(其中如何数据有变化,从站需要主动上报)
//超时机制
int t1_calc; // 用于计数
int t1; // 发送或者测试APDU的超时
// 从站端启动U格式测试过程后等待U格式测试应答的超时时间(超时处理:断开连接)
// 启动条件:发送U测试帧
// 关闭条件:接收U测试帧
int t2_calc; // 用于计数
int t2; // 无数据报文t2t1状态下发送测试帧的超时
// T3:当RTU(服务器)端和主站(客户)端之间没有实际的数据交换时,任何一端启动U格式测试过程的最大间隔时间(超时处理:发送U测)
// 启动条件:建立连接
// 关闭条件:断开连接
int K; // 发送序号和接收序号之间的最大差值 【发送方在发送K个I报文还未收到确认就应该关闭数据传送 默认值为12;从站使用】
int W; // 【接收方最迟收到W个I就必须要回复确认帧 默认值为8;主站使用,这里不使用】
// W 不能够超过 K 的2/3
QTimer *timer1; // 发送或者测试APDU的计时器
QTimer *timer2; // 无数据报文确认的计时器
QTimer *timer3; // 发送测试帧的计时器
原文链接: IEC104协议详解.