IEC104规约由国际电工委员会制定。IEC104规约把IEC101的应用服务数据单元(ASDU)用网络规约TCP/IP进行传输的标准,该标准为远动信息的网络传输提供了通信规约依据。采用104规约组合101规约的ASDU的方式后,可很好的保证规约的标准化和通信的可靠性。
104规约
104是厂站与配网主站进行通讯的规约,以以太网为载体,服务模式是平衡模式,用于远动控制通信的,用于调度自动化系统,厂站之间的通讯。
104规约的报文帧分为三类,I帧,S帧,U帧;
I帧为信息帧,用于传输数据,长度大于6个字节,为长帧;
S帧为确认帧,用于确认接收的I帧,长度为6个字节,为短帧;
U帧为控制帧,用于控制启动/停止/测试,长度为6个字节,为短帧;
长帧报文分为APCI和ASDU两个部分,统称为APDU,而短帧报文只有APCI部分;
APCI的6个字节的构成:起动字符68H,1个字节;后面的报文长度,1个字节(最大253);控制域位组,4个字节;区分I,S,U帧:
I帧的4字节控制域位组规定为:字节1和字节2位发送序号,字节3和字节4为接收序号;
注意:
1.由于字节1和字节3的最低位固定为0,不用于构成序号,所以在计算序号时,要先转换成十进制数值,再除以2;
2.由于低位字节在前,高位字节在后,所以计算时要先做颠倒;
S帧的字节1固定为01H,字节2固定为00H,字节3和字节4位接收序号计算时仍要注意以上两点;
U帧的字节2,3,4均固定为00H,字节1包含TESTFR,STARTDT,STOPDT三种功能,同时只能激活其中的一种功能;启动(STARTDT)和停止(STOPDT)都是由主站(104的客户端)发起的,先由主站发送生效报文,子站随后确认。而主站和子站都可发送测试(TESTFR)报文,由另一方确认。
客户端发起:(请求连接报文和确认连接报文)
STARTDT:68 04 07 00 00 00(启动激活);68 04 0B 00 00 00(启动确认)
07 = 00000111,最后两个1表示信息传输格式为U格式,倒数第3个1表示请求连接;
0B = 00001011,最后两个1表示信息传输格式为U格式,倒数第4个1表示连接确认;
客户端发起:
STOPDT:68 04 13 00 00 00(停止激活);68 04 23 00 00 00(停止确认)
客户端和服务器对发:
TESTFR:68 04 43 00 00 00 (测试激活); 68 04 83 00 00 00(测试确认)
104协议是101协议的网络版,101协议每次只能发送一个链路帧,而104协议可以连续发送多个链路帧,其传输效率明显高于101协议,而且具有TCP/IP的冲突检测和错误重传机制,具有比101协议更高的可靠性和稳定性,另外对通信延时的限制更宽松。
心跳机制
t0:TCP连接建立的超时时间,即RTU(服务器)端进入等待连接的状态后,若超过了此时间,主站(客户)端还没有connect()过来就主动退出等待连接的状态;规约推荐的缺省值为30秒;
t1:RTU端启动U格式测试过程后等待U格式测试应答的超时时间,若超过了此时间还没有收到主站端的U格式测试应答,就主动关闭TCP连接;规约推荐的缺省值为15秒;
t2:RTU端以突发的传送原因向主站端上送了变化信息或以激活结束的传送原因向主站端上送了总召唤/电度召唤结束后,等待主站端回S格式的超时时间,若超过了此时间还没有收到,就主动关闭TCP连接;规约推荐的缺省值为10秒;
t3:当RTU端和主站端之间没有实际的数据交换时,任何一端启动U格式测试过程的最大间隔时间;推荐的缺省值为20秒;
举例说明它的组成部分:
68 0E 00 00 00 00 64 01 07 00 01 00 00 00 00 14
68 0E 02 00 12 00 2D 01 06 00 01 00 02 60 00 81
启动字符 + APDU长度 + 4个控制域8位位组 + 类型标识 + 可变结构限定词(个数) + 传输原因 + 公共地址(ASDU地址)+ 信息体地址 + 召唤限定词
常见的几种报文:
站初始化:
TX: 68 04 07 00 00 00 U格式启动帧
RX:68 04 0B 00 00 00 响应帧
链路测试:
TX:68 04 43 00 00 00 链路测试报文
RX:68 04 83 00 00 00 响应帧
对时:
TX:68 14 08 00 04 00 67 01 06 00 01 00 00 00 00 A4 92 06 0F EA 05 0F
RX:68 14 0A 00 04 00 67 01 07 00 01 00 00 00 00 A4 92 06 0F EA 05 0F
A4 92:即37540毫秒
06:6分
0F:15时
EA:111 01010 星期天 10号
05:5月
0F:2015年
常用的类型标识:
遥测:
09---带品质描述的遥测量,每个遥测值占三个字节
0A---带3个字节时标的且具有品质描述的遥测值,每个遥测值占6个字节
0B---不带时标的标度化值,每个遥测值占3个字节
0C---带3个字节时标的标度化值,每个遥测值占6个字节
0D---带品质描述的浮点值,每个遥测值占5个字节
0E---带3个字节时标且具有品质描述的浮点值,每个遥测值占8个字节
15---不带品质描述的遥测值,每个遥测值占2个字节
遥信:
01---不带时标的单点遥信,每个遥信占1个字节
03---不带时标的双点遥信,每个遥信占1个字节
14---具有状态变位检测的成组单点遥信,每个字节包括8个遥信
SOE:记录即事件顺序记录
02---带3个字节短时标的单点遥信
04---带3个字节短时标的双点遥信
1E---带7个字节时标的单点遥信
1F---带7个字节时标的双点遥信
遥调:
0F---不带时标的电度量,每个电度量占5个字节
10---带3个字节短时标的电度量,每个电度量占8个字节
25---带7个字节长时标的电度量,每个电度量占12个字节
其他:
2D---单点遥控
2E---双点遥控
2F---双点遥调
64---召唤全数据
65---召唤全电度
67---时钟同步
常用的传送原因列表:
1---周期,循环
2---背景扫描
3---突发,自发上传
4---初始化
5---请求或被请求
6---激活
7---激活确认
8---停止激活
9---停止激活确认
0A---激活结束
14---响应总召唤
IEC104规约流程
IEC104 规约作为网络通信规约,由客户端和服务端组成,服务端口默认为2404 。它的基本流程如下:
1. 由客户端向服务器建立连接,同时,发送链路启动帧。
2.服务端在收到链路启动帧后,向客户端发送启动确认帧。
3.客户端收到启动确认帧后,发送总召数据请求帧。
4.服务端收到总召数据请求后,发送总召数据响应帧,然后继续发送总召数据。总召数据发送完成后,发送总召数据结束帧。
5.客户端在收到总召数据结束帧后,发送对时请求帧。
6.服务器收到对时请求帧后,发送对时响应帧。
7.由服务器主动向客户端发送变化数据帧。同时,收到客户端发送的控制类命令,回复相应的操作结果。
8.客户端等到下一个数据总召周期,重复第4步之后的流程。
二、IEC104 报文格式IEC104使用TCP协议通信,标准TCP端口号是2404。
APCI----------------------- Application Protocol Control Information 控制信息 ASDU -----------------------Application Service Data Unit 服务数据单元 APDU -----------------------Application Protocol Data Unit 规约数据单元
说明:
I帧:编号的信息传输帧,包含APCI和ASDU。控制域1的bit1=0,表示I帧。
S帧:编号监视帧。控制域1的bit1=1 ,bit2=0表示S帧,只包含APCI。
U帧:未编号的控制帧。控制域1的bit1=1, bit2=1表示U帧,只包含APCI。
U帧、控制功能帧U 格式帧具有不计数的控制功能,包括启动、停止、测试帧。
长度为 6 个字节的固定帧长,用于控制报文。
C:表示确认 V:表示生效
控制域1的第一个bit=1,第二个bit=1定义了U帧。
启动帧:用于启动应用层传输
停止帧:用于停止应用层传输
测试帧:元数据传输时候,用于维持链路活动状态。
U帧只跟【控制域1】有关,不需要记表格,用的时候查就行了。
U 格式帧使用到以下三种命令:
1) 启动 U 帧,用于启动应用层传输控制命令
主站发送:680407000000 从站返回:68040B000000
07 0B为控制域
2) 停止 U 帧,用于停止应用层传输控制命令
主站发送:680413000000 从站返回:680423000000
13 23为控制域
3) 测试 U 帧,双方均无发送时,维持链路活动状态控制命令:
主站发送:680443000000 从站返回:680483000000
43 83为控制域
I帧、信息传输帧I 帧的控制域包含发送序列号和接收序列号两个参数,两个序列号在每个 APDU 和每个方向上都应按顺序加一。
发送序列号和接受序列号在 0~32767 之间循环,发送方增加发送序列号而接受方增加接收序列号。
接收站认可连续正确 接收的一个 APDU 或者多个 APDU,将最后一个正确接收的 APDU 的发送序列号作为接收序列号返回。
这个接收序列号是对所有发送序列号小于或等于该号的 APDU 的有效确认。
如只在一个方向进行较长的数据传输,就得在另一个方向发送 S 格式认可这些 APDU。
这种方法应该在两个方向上采用。在创建一个 TCP 连接后,发送和接收序列号都被设置成 0。
控制域1的比特1=0定义了I格式,I格式的APDU包含ASDU。
其中,高位有8bit,低位有7bit。比如发送序列号1000,转换成2进制是 0000 0011 1110 1000 。
因为序列号是由7+8bit组成的,所以高位就是0000 0011,低位就是110 1000。
发送一个I帧报文,发送序列号+1,接收一个I报文,接收序列号+1。
TCP重连后,调度主站和子站的接收序号和发送序号都要清零。
S帧、确认帧S 格式具有计数的监视功能, S 格式帧为短帧,长度 6 个字节。接收方接收到 I 帧数据,但本身没有信息要发送的情况下, S 帧用于确认接收到对方的帧。
控制域1的第一个bit1=1,第二个bit2=0定义了S帧。
主站发送 68 04 01 00 0e 00
从站回复 68 04 01 00 1a 00
ASDU类型标识ASDU的格式
发送接收的步骤
服务端,【收到的发送号】【自己的接受号】----------------报文丢失
不管丢失还是重复,服务端需要断开连接重连。
k---默认值12,未被确认的I格式的最大数,适用于服务端,达到k指停止发文
w---默认值8,最迟收到w个I格式后必须确认。
t0 ----------默认30s--------建立连接超时---------客户端
t1-----------默认15秒-------发送或测试报文超时-----------服务端
t2-----------默认10秒------无报文时候,确认超时------客户端
t3--------默认20秒----------长期空闲,发测试帧超时----------双方
报文分析时钟同步报文:
发包
Byte[0] 2d 为控制符 即为功能码
Byte[1] 01 可变结构限定词、若信息对象毫秒低位的地址不连续则为0、若信息对象的地址连续则为1
Byte[2] 06 传输的原因
Byte[3] 00 公共地址 即RTU站址
Byte[4] 01 00 信息体地址
接下来看IOA这个结构体内的
Byte[0] 00 00 00 信息体地址,数据点在数据库中的序号,低位在前高位在后
Byte[1][7] 09 88 1f 0a 0d 05 14 即为时间
09 毫秒低位
88 毫秒高位
1f 分钟
0a 时
0d 日与星期
05 月
14 年
回包
与发包一致
其实他的I帧的都是发什么就回什么、确认信息以及控制是S帧的U帧
单点遥控:
发包
I帧共有两层、第一层为控制域与序列计数
Byte[0] 68 只要是IEC104规约那么开头规定的即为是68 也就为启动符吧
Byte[1] 0e 为长度 自此往后的长度
Byte[3][4] 1c 00 发送序号,计数
Byte[3][4] 1c 00 接收序号,计数
看下一层:
Byte[0] 2d 为控制符 即为功能码
Byte[1] 01 可变结构限定词、若信息对象的地址不连续则为0、若信息对象的地址连续则为1
Byte[2] 06 传输的原因
Byte[3] 00 公共地址 即RTU站址
Byte[4] 01 00 信息体地址
接下来看IOA这个结构体内的
Byte[0][2] IOA 00 00 00 信息体地址,数据点在数据库中的序号,低位在前高位在后
Byte[0][2] SCO 80 代表单点遥控的分合状态
回包
跟发包都是一样 I帧发送了数据 那么会有S或U帧确认或控制这个信息 所以I帧的回应包与发包一致
单点:
68 15 F8 05 DA 00 01 03 03 00 01 0B 72 00 00 01 75 00 00 00 78 00 00 01
双点:
68 15 F8 05 DA 00 03 03 03 00 01 0B 72 00 00 01 75 00 00 02 78 00 00 01
说明:0x01,0x03 ASDU类型:单点遥信数据。0x03 ASDU类型:双点遥信数据
0x03 可变机构限定词:第七位定义该帧应用数据的数目,低位在前高位在后。最高位不为1,表示每个应用数据前带有一个3个字节的信息体地址(inf),可以不是连续的。因为是遥测数据,所以每个信息体地址后都有一个1个字节的开关量数据。若最高位为1,见2总召遥测报文举例
0x0003 传送原因:定义数据上送的原因,低位在前高位在后。3表示变化上送,若20为召唤上送,1为主动上送等
0x0b01 公共地址:主站个子站设定的地址,低位在前高位在后。由主站方确定,子站严格按此地址设定
0x000075每个遥信数据的信息体地址:数据点在数据库中的序号,低位在前高位在后
0x01 信息体地址后的遥信数据值,单点可以为0或1;双点可以为0,1,2,3
总召唤上送遥信或告警报文(单点):
68 15 F8 05 DA 00 01 83 14 00 01 0B 72 00 00 01 00 01
遥信变位或告警报文(双点)举例:
68 15 F8 05 DA 00 03 83 14 00 01 0B 72 00 00 01 02 03
说明:定义同2召唤遥测。不同点在于遥测是3个字节一个量,遥信是一个字节
SOE(双点)报文:
68 15 F8 05 DA 00 1F 01 03 00 01 OB 72 00 00 02 78 49 35 0E 01 01 00
SOE(单点)报文举例:
68 15 F8 05 DA 00 1E 01 03 00 01 0B 72 00 00 01 78 49 35 0E 01 01 00
说明:前面定义同遥信。78 49 35 0E 01 01 00为动作时间,从后到前依次为年、月、日、时、分、毫秒(2字节)。时间为00年1月1日14时53分18808毫秒(18秒808毫秒)
三、IEC104 模拟器使用这里介绍两个IEC104模拟器,模拟器下载,请移步:
(539条消息) IEC104模拟器,支持多种操作码,亲测可用_104模拟器,iec104模拟器-其它文档类资源-CSDN文库
(539条消息) IEC60870-104模拟器-网络基础文档类资源-CSDN文库
① 01_104_MASTER
首先要把本地IP改到和从站一个网段,并保证可ping通。
1. 工具界面。
2. 点击101_104,点‘配置’,选择104规约 。
3. 以下红框部分需要修改,从站地址根据实际情况填写,端口一般默认2404,当然可以主从站约定;公共地址也是,跟据实际情况填写,主从约定好是几就是几,然后点‘确定’ 。
4. 然后点击‘开始104通讯’ 。
5. 如果连接成功,会提示‘TCP/IP建立连接成功’,图中为失败情况,因为没连设备。
6. 连接正常后,不用召唤,数据会自动发送过来,但显示不全,需要执行总召。
7. 点击‘发送报文’,如果想要召唤某个点的数据,则在信息体地址处,输入点号,然后点发送,如果想要所有数据,则直接点发送,不用修改配置。
8.报文类型,有很多,100为总召,即召唤从站发来的所有数据,还有其他可模拟遥调发令的,例如:50为设点命令,短浮点数。
一般50、100这种的,在104里叫ASDU类型。
注:104规约,公共地址一定要对好。
② IEC60870-5-104ServerSimulator
第一步:打开程序
第二步、点击addServer
第三步,加载配置
第四步,启动服务
这时候就可以通过客户端连接了。