1、规约简介 IEC104规约是一个广泛应用于电力、城市轨道交通等行业的国际标准。 2、专业术语解释 遥脉(电度量):是指对现场某装置所发出的脉冲信号进行周期累计的一种远程计数操作。其实,遥脉也可以看成是被具体规定了采用脉冲计数作为测量方法的一种遥测手段,它是遥测中的一种。而传统意义上的四遥中是没有提及遥脉一词的。 四遥指的是:遥信、遥测、遥控和遥调(设点);分别对应数字输入DI、模拟输入AI、数字输出DO和模拟输出AO 单点与双点的区别,以遥信为例,单点就是用一位标识一个遥信量,比如开关位置,只采集一个常开的辅助接点,值为1表示合位,0表示分位;而双点需要采集常开合常闭两个辅助接点位置,,当常开点值为1并且常闭点值为0,即10,则认为开关在合位;当常开点值=0并且常闭点值为1,即01,认为开关在分位;当两个位置值都为1,或两个值都为0,则认为开关位置不能确定。遥控也是一样的道理,SPI为遥信状态值。单点遥信,0分1合;双点遥信,1开2合,0和3为中间状态。 遥测的上送方式主要有定时主动上送(01H),响应总召唤上送(14H),越限上送(03H),而遥测值又分为归一化值、标度化值、短浮点数。 各遥测报文。其报文主体结构未变,改变是传送原因及类型标识。 归一化值(NVA) 值的范围为[-1,1]。归一化,即是将大于1的数映射到1以内的空间,通常就是用实际值除以额定值,即得到归一化的小数。具体表示法可以有F13或F16位的。占2个字节。 标度化值(SVA),值的范围为[-32768,~32767],即带符号整数。占2个字节。它的真实值就是标度值*小数点的位数,量程和小数点位置是固定的参数。(相当于16位有符号整数) 注意:归一化值与标度化值都是两个字节。高字节的最高位为符号位, 0表示正数,1表示负数。15位数据位,正数是原码,负数是补码。 短浮点数(R32-IEEE STD 754) 即计算机内浮点数的表示法,占4字节 双传输,信息体元素可以用同一个信息对象地址来构成不同的ASDU,即带时标或者不带时标的单点信息。 遥测最多可配16384个,遥测最多可配4096个,遥控最多可配256个,遥脉最多可配512个。

3、104主站和从站之间的通信过程 104通讯过程:
a,建链、启动传输 b,是否启动确认 (未确认等待启动帧返回a)
c,站召唤 d,回答全数据 e,回答结束否 (等待d结束,未结束返回d)
f,有无定时任务 g,遥控遥调 h,对时测试 i,超时处理 j,接收变化数据 k,S-FORMAT确认 (确认完毕,返回f)

4、IEC104协议结构 图片.png 第一个字节:启动字符固定16进制数68H,十进制为104(正好代表104规约吧),二进制为:0110 1000。 第二个字节:APDU长度,注意APDU长度并不包括1字节的启动字符和1字节的APDU长度本身,而由于只有1字节代表数据长度,其最大值为255(2^8 - 1),所以最大值为255 - 2 = 253,又由于APCI除了这两个字节外还包括了4个字节的控制域(1~4),那么剩下的ASDU(可选的应用服务数据单元)长度为253 - 4 = 249字节。 5、104报文帧分类 IEC104协议的帧格式有三种(I帧、U帧、S帧) I帧为信息帧,用于传输数据,长度大于6个字节,为长帧; S帧为确认帧,用于确认接收的I帧,长度为6个字节,为短帧; U帧为控制帧,用于控制启动/停止/测试,长度为6个字节,为短帧; 5.1 U格式: 不计数的控制功能类型,用于传输控制命令的报文。(U格式的APDU只包含APCI,帧长6字节。) 格式 图片.png 类型 图片.png

5.2 S格式: 计数的监视功能类型,用于传输对站端的确认的报文。(S格式的APDU只包含APCI,帧长6字节。) 格式图片.png

S格式的APDU的帧内容为如下6个字节:68 04 01 00 98 53 前四个字节固定,后两个字节表示接收序号。 S帧和I帧结合使用,用于信息确认,主站和子站可以按频率发送,比如接收8帧I帧回答一帧S帧,也可以要求接收一帧I帧就应答一帧S帧。 5.3 I 格式: 信息传输格式类型,用于传输含有信息体的报文和确认对方I格式的信息报文。(I格式的APDU包含APCI和ASDU) I帧是104的核心,I帧包含ASDU,数据传输都属于I帧,如总召唤帧、发送对时报文、电度总召唤、遥控等下发指令,接收的数据帧如遥信、遥测、遥脉、SOE帧都属于I帧。 6、遥控流程 遥控分为直控和选控,直控实际上就是去掉选择命令,直接发执行命令。一般来说保护压板、保护复归为直控;测控压板、刀闸开关、分接头的升降停为选控。 选控的一般流程如下: 主站下发选择命令→装置回选择确认报文→主站下发执行命令→装置回执行确认报文→完成结束报文。 直控的一般流程如下: 主站下发执行命令→装置回执行确认报文→完成结束报文。 在整个遥控过程中,直到装置回执行确认前都可进行 而遥控命令的格式如下所示: 图片.png S/E为选择/执行位,0代表执行,1代表选择;QU代表遥控命令品质,0代表被控站内部确定遥控输出方式,不由控制站选择,1代表短脉冲方式输出,持续时间由被控站的系统参数决定,2代表长脉冲方式输出,持续时间由被控站的系统参数决定,3代表持续脉冲方式,其他值没有定义; SCS代表单点遥控命令状态,0代表分/开,1代表合/关;DCS代表双点遥控命令状态,1代表分/开,2代表合关,0、3代表不允许。 QU一般为0,那么单点遥控——遥控选择分:0x80;遥控执行或遥控撤销分:0x00;遥控选择合:0x81;遥控选择或遥控撤销合:0x01;双点遥控——遥控选择分:0x81;遥控执行或遥控撤销分:0x01;遥控选择合:0x82;遥控选择或遥控撤销合:0x02 7、交互流程 7.1 第一步:首次握手(U帧) 发送―>激活传输启动 : 68(启动符)04(长度)07(控制域) 00 00 00 接收―>确认激活传输启动: 68(启动符)04(长度)0B(控制域) 00 00 00 7.2 第二步:总召唤,召唤YC,YX(可变长I帧)初始化后定时发送总召唤 发送―>总召唤 : 68(启动符)0E(长度) 00 00(发送序号,2个字节)00 00(接收序号,2个字节)64(类型标识)01(可变结构限定词)06 00(传送原因,2个字节)01 00(公共地址,即RTU站址,2个字节)0000 00(信息体地址,3个字节)14(QOI,区分是总召唤还是分组召唤,如果是2002版基地址的没有分组召唤) 接收―>S帧:(记录接收到的长帧,双方都可以按频率发送,文本规定最多接收8帧I帧回答一S帧,但我们要求接收一帧I帧就应答一S帧) 68 04 01 00 02 00: 接收―>总召唤确认(发送帧的镜像,除传送原因不同): 68(启动符)0E(长度)00 00(发送序号,2个字节) 00 00(接收序号,2个字节) 64 (类型标识)01(可变结构限定词) 07 00(传送原因,2个字节) 01 00(公共地址,即RTU站址,2个字节)00 00 00(信息体地址,3个字节) 14 (QOI)

发送―>S帧 记录接收到的长帧,双方都可以按频率发送,文本规定最多接收8帧I帧回答一S帧,但我们要求接收一帧I帧就应答一S帧) 68 04 01 00 02 00 接收―>YX帧:(以类型标识1为例) 68(启动符) 1A(长度) 02 00 (发送序号,2个字节)02 00(接收序号,2个字节) 01(类型标识,单点遥信) 04(可变结构限定词,有4个遥信上送) 14 00 (传送原因,2个字节,响应总召唤)01 00 (公共地址,即RTU站址,2个字节)03 00 00(信息体地址,3个字节,第3号遥信) 00(遥信分) 05 00 00 (信息体地址,3个字节,第5号遥信)00(遥信分) 08 00 00(信息体地址,3个字节,第8号遥信)01 (遥信合)09 00 00 (信息体地址,3个字节,9号遥信)00(遥信分)

发送―>S帧: 68 04 01 00 04 00 接收―>YX帧:(以类型标识3为例) 68(启动符) 1E(长度) 04 00(发送序号,2个字节) 02 00(接收序号,2个字节)03(类型标识,双点遥信) 05 (可变结构限定词,有5个遥信上送)14 00(传送原因,2个字节,响应总召唤) 01 00 (公共地址,即RTU站址,2个字节)01 00 00 (信息体地址,3个字节,第1号遥信)02(遥信合) 06 00 00 (信息体地址,3个字节,第6号遥信)02(遥信合) 0A 00 00 (信息体地址,3个字节,第10号遥信)01(遥信分) 0B 00 00(信息体地址,3个字节,第11号遥信)02 (遥信合) 0C 00 00(信息体地址,3个字节,第12号遥信)01(遥信分)

发送―>S帧: 68 04 01 00 06 00 接收―>YC帧:(以类型标识9为例) 68(启动符) 13(长度) 06 00 (发送序号,2个字节)02 00 (接收序号,2个字节)09 (类型标识,带品质描述的遥测)82(可变结构限定词,有2个连续的遥测) 14 00 (传送原因,2个字节,响应总召唤)01 00(公共地址,即RTU站址,2个字节) 01 07 00(信息体地址,3个字节,从第0x701即0号遥测开始)A1 10(遥测值0x10A1) 00(品质描述) 89 15(遥测值0x1589) 00(品质描述)

发送―>S帧: 68 04 01 00 08 00 接收―>结束总召唤帧: 68(启动符) 0E(长度)08 00 (发送序号,2个字节)02 00(接收序号,2个字节) 64 (类型标识)01(可变结构限定词)0A 00 (传送原因,2个字节)01 00 (公共地址,即RTU站址,2个字节)00 00 00(信息体地址,3个字节) 14(QOI)

发送―>S帧: 68 04 01 00 0A 00 7.3 第二步:发送对时报文**(通过设置RTU参数表中的”对时间隔”单位是分钟,默认是20分钟左右.)** 发送―>对时命令: 68(启动符)14(长度) 02 00(发送序号,2个字节)0A 00(接收序号,2个字节)67(类型标识)01(可变结构限定词)06 00(传送原因,2个字节)01 00(公共地址,即RTU站址,2个字节)0000 00(信息体地址,3个字节)01 (毫秒低位) 02(毫秒高位) 03(分钟) 04(时) 81 (日与星期) 09(月) 05(年) 接收―>对时确认: 68(启动符)14(长度) 0C 00(发送序号,2个字节)04 00(接收序号,2个字节)67(类型标识)01(可变结构限定词)07 00(传送原因,2个字节)01 00(公共地址,即RTU站址,2个字节)0000 00(信息体地址,3个字节)** (毫秒低位) (毫秒高位) (分钟) 04(时) 81 (日与星期) 09(月) 05(年) 发送―>S帧: 68 04 01 00 0E 00

7.4 第三步:电度总召唤(如果没有电度此步骤可以省略且该步骤可以在对时之前发送,DF8900系统通过设置RTU参数表中的”全数据扫描间隔”单位是分钟.DF1800/DF8002系统在程序中写定,一般15分钟召唤一次,如果不需要召唤电度一定在RTU参数表中电度个数设置为0**)** 发送―>召唤电度 : 68(启动符)0E(长度) 04 00(发送序号,2个字节)0E 00(接收序号,2个字节)65(类型标识)01(可变结构限定词)06 00(传送原因,2个字节)01 00(公共地址,2个字节)0000 00(信息体地址,3个字节)45(QCC) 接收―>召唤确认(发送帧的镜像,除传送原因不同): 68(启动符)0E(长度)10 00(发送序号,2个字节) 06 00(接收序号,2个字节) 65 (类型标识)01(可变结构限定词) 07 00(传送原因,2个字节) 01 00(公共地址,2个字节)00 00 00(信息体地址,3个字节) 45 (QCC)

发送―>S帧: 68 04 01 00 12 00 接收―>电度数据:68(启动符) 1A(长度) 12 00(发送序号,2个字节) 06 00(接收序号,2个字节) 0F (类型标识)02(可变结构限定词,2个电度值) 05 00 (传送原因,2个字节)01 00(公共地址,2个字节)01 0C 00 (信息体地址,3个字节,0xc01,0号电度)00 00 00 00(电度值)00(描述信息)02 0C 00(信息体地址,3个字节,0xc01,1号电度)00 00 00 00 (电度值)01(描述信息)

发送―>S帧: 68 04 01 00 14 00 接收―>结束总召唤帧: 68(启动符) 0E(长度)14 00 (发送序号,2个字节)06 00(接收序号,2个字节) 65 (类型标识)01(可变结构限定词)0A 00 (传送原因,2个字节)01 00 (公共地址,2个字节)00 00 00(信息体地址,3个字节) 45(QCC)

发送―>S帧: 04 01 00 16 00

7.5 第四步**:如果RTU****有变化数据主动上送** 主动上送变位遥信,类型标识为1或3 接收―>变位遥信: 68(启动符) 0E(长度) 16 00 (发送序号,2个字节)06 00 (接收序号,2个字节)01(类型标识,单点遥信) 01(可变结构限定词,1个变位发生) 03 00 (传送原因,2个字节,表突发事件)01 00(公共地址,2个字节) 03 00 00(信息体地址,3个字节,3号遥信)00(分)

发送―>S帧: 04 01 00 18 00 接收―>变位遥信: 68(启动符)0E(长度) 18 00 (发送序号,2个字节)06 00(接收序号,2个字节) 03(类型标识,双点遥信)01(可变结构限定词,1个变位发生) 03 00(传送原因,2个字节,表突发事件) 01 00 (公共地址,2个字节)06 00 00(信息体地址,3个字节,6号遥信) 01(分)

发送―>S帧: 04 01 00 1a 00 SOE****主动上送,类型标识为0x1e或0x1f 接收―>SOE: 68(启动符) 15(长度) 1a 00(发送序号,2个字节) 06 00(接收序号,2个字节) 1E(类型标识,单点)01(可变结构限定词,1个SOE) 03 00 (传送原因,2个字节,表突发事件)01 00 (公共地址,2个字节)08 00 00(信息体地址,3个字节,8号遥信) 00(分)AD 39 (毫秒,2个字节)1C(分) 10(时)7A(日与星期) 0B(月) 05(年)

发送―>S帧: 04 01 00 1c 00 接收―>SOE: 68(启动符) 15(长度)1c 00(发送序号,2个字节) 06 00(接收序号,2个字节)1F(类型标识,双点)01(可变结构限定词,1个SOE) 03 00(传送原因,2个字节,表突发事件)01 00 (公共地址,即RTU站址,2个字节)0A 00 00 (信息体地址,3个字节,10号遥信)01(信息体元素) 2F 40 (毫秒,2个字节)1C(分) 10 (时)7A(日与星期) 0B(月) 05(年)

7.6 第五步如果主站超过一定时间没有下发报文或RTU也没有上送任何报文则双方都可以按频率发送U帧,测试帧 发送―>U帧: 68 04 43 00 00 00 接收―>应答: 68 04 83 00 00 00

7.7 第六步遥控 发送―>遥控预置:68(启动符) 0E(长度)** **(发送序号,2个字节) ** **(接收序号,2个字节) 2E (类型标识)01(可变结构限定词) 06 00(传送原因,2个字节) 01 00(公共地址,2个字节) 05 0B 00(信息体地址,3个字节,遥控号=0xb05-0xb01= 4) 82(控合) 接收―>遥控反校:68(启动符) 0E(长度) 0E 00(发送序号,2个字节) 06 00(接收序号,2个字节)2E(类型标识)01(可变结构限定词) 07 00 (传送原因,2个字节)01 00(公共地址,2个字节) 05 0B 00(信息体地址,3个字节,遥控号=0xb05-0xb01= 4) 82(控合)

发送―>遥控执行:68(启动符) 0E(长度) 04 00(发送序号,2个字节) 18 00(接收序号,2个字节)2E(类型标识)01(可变结构限定词)06 00(传送原因,2个字节)01 00(公共地址,即RTU站址,2个字节) 05 0B 00(信息体地址,3个字节,遥控号=0xb05-0xb01= 4) 02(控合) 接收―>执行确认:68(启动符) 0E(长度) 12 00(发送序号,2个字节)08 00(接收序号,2个字节)2E(类型标识)01(可变结构限定词) 07 00(传送原因,2个字节)01 00(公共地址,即RTU站址,2个字节)05 0B 00(信息体地址,3个字节,遥控号=0xb05-0xb01= 4)02(控合)

发送―>遥控撤销:68(启动符) 0E(长度) 04 00(发送序号,2个字节) 18 00(接收序号,2个字节)2E(类型标识)01(可变结构限定词)08(传送原因,2个字节)01 00(公共地址,即RTU站址,2个字节) 05 0B 00(信息体地址,3个字节,遥控号=0xb05-0xb01= 4)02(控合) 接收―>撤销确认:68(启动符) 0E(长度) 12 00 (发送序号,2个字节)08 00(接收序号,2个字节)2E(类型标识)01(可变结构限定词) 09 00(传送原因,2个字节,,停止激活确认)01 00(公共地址,即RTU站址,2个字节)05 0B 00(信息体地址,3个字节,遥控号=0xb05-0xb01= 4)02(控合)

8、104协议和其他协议的转换 在实际的工程项目中,经常会遇到需要把IEC104的协议转换成其他协议,比如modbus,profinet等。有时也需要把modbus转成104接入到电力104系统,这时候就需要使用协议转换网关进行转换。如下图所示,使用vfbox网关,把modbus协议转换成IEC104协议。图片.png