快速了解104协议

1、协议框架
1.1应用规约数据单元(APDU)定义
APDU 的组成
传输接口(TCP 到用户)是一个定向流接口,它没有为 IEC 60870-5-101 中的 ASDU定义任何启动或者停止机制(101协议中规定了启动或者停止等)。为了检出 ASDU 的启动和结束,每个 APCI 包括下列的定界元素: 一个启动字符, ASDU 的规定长度,以及控制域(见图 4)。可以传送一个完整的 APDU(或者出于控制目的,仅仅是 APCI 域也是可以被传送的)(见图 5)。
所使用的缩写出自IEC60870-5-3的第五节,如下所示:
APCI 应用规约控制信息
ASDU 应用服务数据单元
APDU 应用规约数据单元
2、协议详细结构
2.1  ACPI 定义
a、 启动字符 68H 定义了数据流中的起点。
b、 APDU 的长度域定义了 APDU 体的长度,它 包括 APCI 的四个控制域八位位组和 ASDU
        第一个被计数的八位位组是控制域的第一个八位位组,最后一个被计数的八位位组是 ASDU 的最后一个八位位组。 
         ASDU 的最大长度限制在 249 以内,因为 APDU 域的最大长度是 253(APDU 最大值=255 减去启动和长度八位位组),控制域的长度是 4 个八位位组。
c、 控制域定义了保护报文不至丢失和重复传送的控制信息,报文传输启动/停止,以及传输连接的监视等
2.2 三种类型报文格式的控制域定义
编号的信息传输格式(Information Transmit Format), 简称 I-格式
编号的监视功能格式(Numbered supervisory functions), 简称 S-格式
不编号的控制功能格式(Unnumbered control function) , 简称 U-格式
a、 I 格式(Information Transmit Format)- 编号的信息传输格式
I 格式控制域标志: 第一个八位位组的第一位 bit= 0,第三个八位位组第一位 bit= 0
I 格式特别规定: I 格式的 APDU 至少必须包含一个 ASDU I 格式的控制信息如表 1 所示:
作用:信息、用户数据传输
b、S 格式(Numbered Supervisory Function)- 编号的监视功能格式
S格式控制域标志 第一个八位位组的第一位 bit= 1 并且第二位 bit= 0, 第三个八位位组第一位 bit= 0
S格式特别规定 S 格式的 APDU 只包括 APCI S 格式的控制信息如表 2 所示:
c、 U 格式(Unnumbered Control Function)- 不编号的控制功能格式
U 格式控制域标志: 第一个八位位组的第一位 bit= 1 并且第二位 bit= 1,第三个八位位组第一位 bit= 0
U 格式特别规定: U 格式的 APDU 只包括 APCI在同一时刻, TESTFR, STOPDT 或 STARTDT 中只有一个功能可以被激活。U格式的控制信息如表3所示:
3、协议ASDU结构
应用服务数据单元基本格式, 结构定义如下:
ASDU报文
类型标识
可变结构限定词;
传送原因;
应用服务数据单元公共地址;
信息对象地址。
一组信息元素集可以是单个信息元素/信息元素集合、单个信息元素序列或者信息元素集合
ASDU长度
1
1
2
2
3
n
3.1  类型标识
第一个八位位组为类型标识,它定义了后续信息对象的结构、类型和格式,类型标识定义如下∶
信息对象是否带时标由标识类型的不同序号来区分。配电主站将舍弃那些类型标识未被定义的应用服务数据单元。
类型标识=TIE IDENTIFICATION∶ =UI8[1..8]<1..255>
<1..127>∶ =本配套标准的标准定义(兼容范围)
<128..135>∶ =为路由报文保留(专用范围)
<136..255>∶ =特殊应用(专用范围)。
a、配网自动化系统常用应用报文类型:
1) 监视方向的过程信息
    <1>∶=单点信息 M_SP_NA_1
    <3>∶ =双点信息 M_DP_NA_1
    <9>∶=测量值,归一化值 M_ME_NA_1
    <11>∶=测量值,标度化值 M_ME_NB_1
    <13>∶=测量值,短浮点数 M_ME_NC_1
    <30>∶=带 CP56Time2a 时标的单点信息 M_SP_TB_1
    <31>∶=带 CP56Time2a 时标的双点信息 M_DP_TB_1
    <42>∶=故障事件信息 M_FT_NA_1
    <206>∶=累计量,短浮点数 M_IT_NB_1
    <207>∶=带 CP56Time2a 时标的累计量,短浮点数 M_IT_TC_1
2) 控制方向的过程信息
    <45>∶=单点命令 C_SC_NA_1
    <46>∶=双点命令 C_SC_NB_1
3) 在监视方向的系统命令
    <70>∶=初始化结束 M_EI_NA_1
4) 在控制方向的系统命令
    <100>∶=站总召唤命令 C_IC_NA_1
    <101>∶=电能量召唤命令 C_CI_NA_1
    <103>∶=时钟同步命令 C_CS_NA_1
    <104>∶=测试命令 C_TS_NA_1
    <105>∶=复位进程命令 C_RP_NA_1
    <200>: = 切换定值区 C_SR_NA_1
    <201>: = 读定值区号 C_RR_NA_1
    <202>: = 读参数和定值 C_RS_NA_1
    <203>: = 写参数和定值 C_WS_NA_1
    <210>: = 文件传输 F_FR_NA_1
    <211>: = 软件升级 F_SR_NA_1
3.2 可变结构限定词
在应用服务数据单元中,其数据单元标识符的第二个八位位组定义为可变结构限定词,规定如下
可变结构限定词域值语义定义如下:
可变结构限定词=VARIABLE STRUCTURE QUALIFIER∶ =CP8{number、 SQ}
number =N=数目∶ =UI7[1..7]<0..127>
<0>∶ =应用服务数据单元不含信息对象
<1..127>∶ =应用服务数据单元信息元素(单个信息元素或同类信息元素组合)的
数目
SQ=单个或者顺序∶ =BS1[8]<0..1>
<0>∶ =寻址同一种类型的许多信息对象中单个的信息元素或者信息元素的集合,
<1>∶ =寻址 ASDU 单个信息对象中 顺序的单个信息元素的同类集合
SQ<0>和 N<0..127>∶ = 信息对象的数目 i
SQ<1>和 N<0..127>∶ = 每个应用服务数据单元中单个对象的信息元素或者信息元素的集合的数目 j
SQ 位规定寻址后续信息对象或单个信息元素/信息元素集合的方法。
SQ∶ =0 由信息对象地址寻址的单个信息元素或信息元素集合。应用服务数据单元可以由一个或者多个同类的信息对象所组成。数目 N 是一个二进制数,它定义了信息对象的数目。
SQ∶ = 1 单个信息元素或者信息元素同类集合的序列(即同一种格式测量值)由信息对象地址来寻址,信息对象地址是顺序单个信息元素或者信息元素集合的第一个信息元素或者集合的地址。后续单个信息元素或者信息元素集合的地址是从这个地址起顺序加 1。数目 N是一个二进制数,它定义了单个信息元素或者信息元素集合的数目。在顺序单个信息元素或者信息元素集合的情况下每个应用服务数据单元仅安排一个信息对象。
3.3 传输原因
传送原因域值语义定义如下:传送原因=CAUSE OF TRANSMISSION∶ =CP8{Cause,P/N,T}
Cause∶ =UI6[1..6]<0..63>
<0>∶ =未定义
<1..63>∶ =传送原因序号
<1..47>∶ =本配套标准的标准定义(兼容范围)如下表
<48..63>∶ =专用范围
P/N∶ =BS1[7]<0..1>
<0>∶ =肯定确认
<1>∶ =否定确认
T=test ∶ =BS1[8]<0..1>
<0>∶ =未试验
<1>∶ =试验
配电主站将舍弃那些传送原因值没有被定义的应用服务数据单元。
将应用服务数据单元送给某个特定的应用任务( 程序) 时,应用任务( 程序) 根据传送原因的内容便于进行处理。 P/N位用以对由始发应用功能所请求的激活以肯定或者否定确
认,在无关的情况下P/N置零。
国家电网公司配电自动化使用传送原因如表5:
在监视方向上的应用服务数据单元,其数据单元标识符( 可变结构队限定词除外) 值未定义;
在监视方向上的应用服务数据单元,其信息对象地址值未定义;
由于控制方向未知( 类型标识符 45 至 51) 的序号的镜像的应用服务数据单元。
接收这些应用服务数据单元不会影响后续报文的处理。
表5:
<0>∶=未用
<1>∶=周期、循环per/cyc
<2>∶=背景扫描back
<3>∶=突发(自发) spont
<4>∶=初始化init
<5>∶=请求或者被请求req
<6>∶=激活act
<7>∶=激活确认actcon
<8>∶=停止激活deact
<9>∶=停止激活确认deactcon
<10>∶=激活终止actterm
<13>∶=文件传输 file
<20>∶=响应站召唤introgen
<21>:=响应第1组召唤
<22>:=响应第2组召唤
<23>:=响应第3组召唤
<24>:=响应第4组召唤
<25>:=响应第5组召唤
<26>:=响应第6组召唤
<27>:=响应第7组召唤
<28>:=响应第8组召唤
<29>:=响应第9组召唤
<30>:=响应第10组召唤
<31>:=响应第11组召唤
<32>:=响应第12组召唤
<33>:=响应第13组召唤
<34>:=响应第14组召唤
<35>:=响应第15组召唤
<36>:=响应第16组召唤
<44>:=未知的类型标识
<45>:=未知的传送原因
<46>:=未知的应用服务数据单元公共地址
<47>:=未知的信息对象地址
<48>∶=遥控执行软压板状态错误
<49> ∶=遥控执行时间戳错误
<50> ∶=遥控执行数字签名认证错误
3.4  应用服务数据单元公共地址
应用服务数据单元 ASDU 中数据 单元标识符的第五个、第六个八位位组定义为应用服务数据单元 ASDU 公共地址,公共地址的长度 (2 个八位位组)是一个系统参数,其余规定遵循 DL/T634.5104-2009 的规定。
3.5  信息对象地址
3.6  信息元素
信息元素用于本实施细则定义的应用服务数据单元中,遵循 DL/T634.5104-2009 标准 7.2.6 定义。
4、应用报文格式
详细参考《配电自动化系统应用DLT634.5104-2009实施细则(试行).pdf》 第7节
5、应用传输流程
详细参考《配电自动化系统应用DLT634.5104-2009实施细则(试行).pdf》 第7节
6、异常处理机制
6.1 防止报文丢失和报文重复传送控制
    发送序列号 N(S)和接受序列号 N(R)的使用与 ITU-T X.25 定义的方法一致。两个序列号在每个 APDU 和每个方向上都应按顺序加一。
    发送方增加发送序列号而接受方增加接收序列号。当接收站按连续正确收到 APDU 的数字返回接收序列号时,表示接收站认可这个 APDU 或者多个 APDU。 发送站把一个或几个 APDU 保存到一个缓冲区里直到它将自己的发送序列号作为一个接收序列号收回,而这个接收序列号是对所有数字小于或等于该号的 APDU 的有效确认,这样就可以删除缓冲区里已正确传送过的 APDU。
    如果更长的数据传输只在一个方向进行,就得在另一个方向发送 S 格式,在缓冲区溢出或超时前认可 APDU。这种方法应该在两个方向上应用。在创建一个 TCP 连接后,发送和接收序列号都被设置成 0。
注:为了保证通信的兼容性,接收方在接收数据时只检查接收序列号,发送序列号不予检查。
6.2 链路测试过程
    未使用但已打开的链接可通过发送测试 APDU(TESTFR=act)并由接收站发送 TESTFR=con, 在两个方向上进行周期性测试。发送站和接收站在规定时间段内没有数据传输(超时)均可启动测试过程。每接收一帧(I 帧、 S 帧或 U 帧)重新启动定时器 t3。
    B 站应独立地监视连接。但是,如果它接收到从 A 站传来的测试帧,就不再发送测试帧。
    当连接长时间缺乏活动性,又需要确保不断时,测试过程也可以在“激活”的连接上启动。
6.3 端口号
    每一个 TCP 地址由一个 IP 地址和一个端口号组成。每个连接到 TCP-LAN 上的设备都有自己特定的 IP 地址,而为整个系统定义的端口号却是一样的。
    本标准要求, 端口号 2404 由 IANA(互联网数字分配授权)定义和确认。
6.4  I 格式报文的发送方保存和接收方确认机制
    k 表示在某一特定的时间内未被 DTE 确认(即不被承认)的连续编号的 I 格式 APDU的最大数目。每一 I 格式帧都按顺序编好号,从 0 到模数 n-1,这里的“模数”是指序列号对参数 n 的模数。以 n 为模的操作中 k 值永远不会超过 n-1。
    特别规定:
(1) 当未确认 I 格式 APDU 达到 k 个时,发送方停止传送。 如果 t1 超时仍未收到 DTE 确认,则重启链路。
(2)w 是接收方最大接收到不确认 I 格式的报文数量。一般接收到 w 个以下 I 格式报文就需给发送方确认。
  (3) k 值的最大范围:推荐值为 12,精确到一个 APDU。
  (4) w 值的最大范围:推荐值为 8,精确到一个 APDU。
  注意:
k发送窗口计数,连续发送K 个I 帧 后 还未得到确认,停止发送数据
w接收窗口计数,连续接收到 W 个 I  帧 后 ,必须发送确认
6.5  超时时间定义
参数
设定值
备注
t0
30s
建立连接的超时
t1
15s
发送或测试 APDU 的超时
t2
10s
无数据报文时确认的超时, t2<t1
t3
20s
长期空闲状态下发送测试帧的超时
t1 :
启动T1条件: 启动站发送I格式或U格式(包含启动、停止、测试)数据帧启动T1
停止T1条件:接收到S格式、 U格式应答 (包含启动、停止、测试)、T1超时
清零T1条件:   接收到I数据帧,重新计数
作用:用于保证发送I格式数据帧不丢失,或者U格式测试
t2:
启动T2条件: 启动站发送I格式数据帧启动T2
停止T2条件:接收到I格式、S 格式
清零T2条件:   T2超时,清零并发送S格式;T1超时网络断线
作用:用于保证发送I格式数据帧不丢失,  发送I格式帧开始 ,如果T2时间内没有再收到I格式帧且收到I格式帧未给确认的,则发送S帧以确认
       
t3:
启动T3条件: 链路连接成功
停止T3条件: T1超时网络断线、
清零T3条件:    接收到I、S、U格式数据帧
作用:长期空闲时保证链路不掉线, 链路连接成功开始 ,如果T3时间内没有再收到 I、S、U数据帧 ,则发送U格式的测试帧     
### IEC 60870-5-104协议详解 #### 协议概述 IEC 60870-5-104 是一种用于电力系统的远动数据传输标准,基于TCP/IP网络实现。该协议主要用于变电站自动化系统中的监控和控制操作。通过定义一系列的信息对象和服务来支持远程终端单元(RTU)与主站之间的通信。 #### 报文结构 报文由应用服务数据单元(ASDU),即Application Service Data Unit组成,其内部包含了多个信息体。每个ASDU都有特定的功能码表示不同的命令或状态报告。例如: - 类型标识 `01` 表示单点遥信[^2] - 类型标识 `03` 表示双点遥信 这些类型标识符帮助接收端理解所接收到的数据的具体含义及其用途。 #### 数据交换过程 当客户端发起连接请求并与服务器建立成功后,双方可以按照约定好的格式发送和接受消息。对于某些特殊功能如总召唤(`64`) 或者时间同步 (`67`) ,则会触发相应的处理逻辑以完成相应任务。 #### 开发环境搭建指南 为了更好地理解和实践此协议,在开发环境中安装并配置好必要的库文件是非常重要的一步。推荐使用版本为 lib60870-2.3.2 的开源实现作为基础框架来进行项目构建[^1]。可以从指定的GitHub仓库获取最新源代码,并遵循官方文档指导完成编译部署工作。 ```bash git clone https://github.com/lib60870/lib60870-C.git cd lib60870-C/ make && sudo make install ``` 以上命令展示了如何克隆仓库以及编译安装的过程。 #### 示例程序展示 下面给出一段简单的Python脚本用来模拟一个基本的客户端行为,它能够向服务器发出读取某个测量值(假设为温度传感器)的请求。 ```python from ctypes import cdll, c_char_p, create_string_buffer # 加载共享库 iec_lib = cdll.LoadLibrary('lib60870.so') def read_temperature(address): buffer = create_string_buffer(b'\x00' * 1024) iec_lib.IEC60870_ReadTemperature.argtypes = [c_char_p, type(buffer)] result = iec_lib.IEC60870_ReadTemperature(c_char_p(bytes(address)), buffer) return float(result.decode()) temperature_value = read_temperature("192.168.1.100") print(f"The current temperature is {temperature_value}°C.") ``` 这段代码利用了外部链接到 C 库的方式实现了对设备地址参数化访问的能力;实际应用场景下可能还需要考虑更多细节比如错误处理机制等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

keven-wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值