当前位置:网站首页 > 编程语言 > 正文

电力104协议(电力104协议讲解)



IEC 101和IEC 104对于智能变电站来说已经属于旧的协议了,其属于IEC 60870,但目前在电力自动化中仍然流行,对于IEC 61850和IEC 60870混用的场景也存在,目前官方赞助商似乎在推一些转换网关来将对应的协议做转换以此解决这种协议兼容问题,国内似乎也有在做这块的网关的企业。IEC 101为串行模式,而IEC 104走TCP/IP。

协议开源库:https://github.com/mz-automation/lib60870
IEC 101协议分析:https://www.ipcomm.de/protocol/IEC101/en/sheet.html
https://blog.csdn.net/weixin_/article/details/
IEC 104协议分析:https://www.ipcomm.de/protocol/IEC104/en/sheet.html
https://www.jianshu.com/p/a9db11
http://47.109.31.38/wp-content/uploads/2021/12/IEC104%E8%A7%84%E7%BA%A6%E6%8A%A5%E6%96%87%E5%AE%9E%E4%BE%8B%E5%88%86%E6%9E%90.pdf
lib60870的用户使用指南:https://github.com/mz-automation/lib60870/blob/master/user_guide.adoc





1、代码编译

没有坑点,cmake直接编译过了

 
  
 
  

aarch64_linux_setup.cmake:

 
  

全平台一键编译脚本:

 
  

结果:
image.png

2、IEC101运行示例及协议分析

IEC 60870-5-101(IEC101)是电力系统监测、控制和相关通信的标准,用于电力系统的远程控制、远程保护和相关通信。这与 iec60870-5-1 至 iec60870-5-5 标准完全兼容,并在 DTE 和 DCE 之间使用标准异步串行远程控制信道接口。该标准适用于点对点、星形、多点等多种配置。(使用主-从模式,和Modbus协议比较相似,主站一般发送内容,从站一般接收内容)

2.1 ISO/OSI网络模型

image.png
可以看到平衡模式走RS232串口,那么这种模式我们更好模拟一些。

2.2 示例运行测试

直接运行101的平衡模式示例,利用wsl和虚拟串口工具测试一下(代码就不分析了,比较简单,可以通过argv[1]指定串口端口,不指定的话端口是/dev/ttyUSB0,串口设置波特率是9600,8个数据位,检验位为’E’,停止位1)。
这里我使用虚拟的串口COM3和COM4,在wsl上就是/dev/ttyS3和/dev/ttyS4,先用Windows下的串口工具看一下能否收到主站发送的内容,可以看到能收到:
image.png
然后我们运行从站,通过ttyS4和主站通信,收发都没有问题:
image.png



2.3 帧数据分析
 
  

帧格式根据参考文章,示例为固定帧格式,启动字符为0X10,控制域字节为0XC9,链路地址域为0x03,帧校验和为0xCC,结束字符0x16:
image.png

  • 继续分析控制域0XC9:

image.png
image.png
再往下的功能码和非平衡模式我们暂时不再具体做分析,实际开发时需要对应获取协议标准文档来做进一步分析处理。

3、IEC104运行示例及协议分析

3.1 ISO/OSI网络模型

image.png
可以看到传输层走TCP。

3.2 示例运行测试

直接运行测试,然后抓包分析:
image.png

3.3 wireshark抓包分析

根据参考文章(https://www.jianshu.com/p/a9db11)中的内容,主要分为三种帧数据:U帧、I帧、S帧,参考文章中分析过程很详细,参考着抓包再分析梳理一下。
基本的帧格式如下:

wireshark抓包(104apci+104asdu):
image.png



3.3.1 U帧
  • (1)报文格式

不编号的控制功能格式(U帧),控制用报文,一共6种,如下图所示:

  • (2)STARTDT通讯建立,包括TCP连接建立、数据传输启动,数据传输流程如下:


image.png

  • (3)STOPDT通讯中断,包括数据传输的中断和TCP连接的中断:


这里要说一下,demo中是没有发送STOPDT的,自行在demo中增加后重新编译进行测试(解决编译问题:修改头文件以及增加pthread库链接):
image.png
image.png


  • (3)TESTFR
3.3.2 I帧
  • (1)、帧格式

编号的信息传输格式(I帧),用于传输应用数据,捎带确认对方的发送。
根据类型标识(TYP)不同,报文形式各有差异。
总体格式为基本格式中的68H+APDU长度+①+②。

  • (2)、发送序号和接收序号

I帧中的控制域1与控制域2为发送序号,控制域3与控制域4为接收序号。其格式图如下所示:

image.png
序号主要用于判断丢失和重传情况。


  • (3)、类型标识

类型标识符,黄色标记为常见类型标识符:

通过asdu查看(这里是11就是测量值,标度化值):
image.png
对应原文还介绍了很多标识符的概念,需要的自行查阅,这里就不展开了:
①短时标与CP56Time2a时标(长时标)
②归一化值、标度化值、短浮点数
③品质描述词






  • (4)、可变结构限定词


当可变结构限定词最高位为1表示连续,其对应n个信息对象中,第一个信息对象中含有信息体地址(3个字节)表示此帧报文中的信息从这个地址开始,第二个信息对象中不再包含信息体地址,第二个信息对象地址是在第一信息对象中的信息体地址递增。
当可变结构限定词最高位为0表示不连续,每个信息对象中都包含信息体地址。
image.png


  • (5)、传送原因

共计2个字节。但传送原因实际上只是占两个字节中的6位。其完整结构如下图所示:

其中T代表试验位(0未试验,1试验),它说明了应用服务数据单元是在测试条件下所产生的,被用于测试传输和设备,但不控制过程。工程中很少使用。
P/N位用以对由启动应用功能所请求的激活以肯定或者否定确认。P=0表示肯定确认,P=1表示否定确认。在工程上,主要用于表示遥控选择成功或失败。
传送原因如下图所示:

针对上表中的部分内容进行一个说明:
第一、周期、循环(01H)与背景扫描(02H)光看标准的话会感觉他们两个差不多,我这里仅从实际应用上来讲述它们的区别。
周期、循环(01H)适用于传输变化很慢的数据,例如水位、油温等,这类数据定时主动上送,并且不再响应总召唤过程中传送。而背景扫描(02H)则是从站周期性主动将响应总召唤过程中传送的数据上送,使得主站和从站数据库保持一致。背景扫描数据传送时可被中断,当同时又背景扫描数据和实时数据时,优先传送实时数据。
第二、什么样的情况算是突发(03H)呢?有两种情况:1、当前的背景扫描发现该点的模拟量数据与前一次模拟量数据传输值的差值超出越死区传输设定值。即前后两次的模拟量数据差值不超出死区设定值,但与上次传输数据的累计差值超出死区设定值也立即作为突发数据向主站传输。2、当前的背景扫描发现该点的状态量数据与前一次状态量数据不一致,即发生了状态变位。
第三、对于分组召唤,新版标准已对分组内容不做约定,但一般设计时仍以标准作为参考。
上述结构中还有源发地址,他用来表明来自哪个主站的召唤,一般情况下不适用。规定源发地址不使用时,应置零。
image.png











  • (6)、ASDU公共地址

首先ASDU地址为2个字节,一般作为站地址,在低版本远动程序中,一般高字节固定为0,1254表示站地址,255表示全局地址。新远动程序则可支持165534为站地址,而65535为全局地址。
全局地址用于再一个特定系统中在所有站在同一时刻同时启动同一个应用功能,一般只用于召唤、电度召唤、时钟同步、复位进程。
控制站将舍弃那些公共地址未定义的ASDU。如果该地址设置与主站不一致,会出现遥测、遥信能正常刷新,但是无法上送初始状态,无法遥控的现象。
image.png


  • (7)、信息对象地址

通俗来说,信息对象地址即通讯过程中的点号,104规约均对点号范围做了规定,常见问题就是遥测、遥控的起始点号与主站不一致。而且主站提供的点表一般都是从0或1开始的顺序号,我们需要确认0或1对应的实际起始信息体地址。
image.png

  • (8)、常见I帧报文分析

具体看参考文档中的说明,涉及具体业务时再去参考分析一下,主要也需要参考具体的国标及行业标准文档,这里不再展开了。(遥信(数字量输入DI)、遥控(数字量输出)、遥测(模拟量输入)、遥调(模拟量输出)、遥脉(电度量)、对时、测试、复位进程、初始化结束)

3.3.3 S帧

编号的监视功能格式(S帧),用于无应用数据可传输时,确认对方的发送。
其控制域格式如下:

从上表可以看出,S帧的控制域1+控制域2已经被固定为0001H,即S帧不存在发送序号,只有接收序号。其报文如下所示:


 
  

主站可按频率发送S帧,比如接收8帧I帧回答一帧S帧,也可以接收1帧I帧就应答1帧S帧。与104规约中的特定参数有关,我这里抓包似乎刚好是8帧I帧一个S帧,第一个S帧的序号也正好是0b1000也就是8:
image.png

对比一下IEC 60870相较于IEC 61850确实感觉会功能相对少一些,扩展性稍微差一些,但理解上相对简单一些。下一节对照着电力行业标准再来细化分析一下IEC104协议。

到此这篇电力104协议(电力104协议讲解)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • linux怎么删掉目录(linux系统怎么删除目录)2025-08-06 22:27:08
  • 富文本框和文本框有什么区别(富文本框什么意思)2025-08-06 22:27:08
  • 打印机控件怎么装(打印机控件怎么装在系统里)2025-08-06 22:27:08
  • hutool的dateutil工具类(hutool常用方法)2025-08-06 22:27:08
  • 莫默是谁(莫默是男是女)2025-08-06 22:27:08
  • ad9501替代(ad9520)2025-08-06 22:27:08
  • max31856中文手册(max3160手册)2025-08-06 22:27:08
  • now是什么意思中文(now是什么意思中文翻译怎么读)2025-08-06 22:27:08
  • jmj是哪个明星(jej是哪个明星)2025-08-06 22:27:08
  • assassin名字(as的英文名字)2025-08-06 22:27:08
  • 全屏图片