CN101827026B - 一种iec61850高层协议报文发送的管理方法 - Google Patents
一种iec61850高层协议报文发送的管理方法 Download PDFInfo
- Publication number
- CN101827026B CN101827026B CN2010101404606A CN201010140460A CN101827026B CN 101827026 B CN101827026 B CN 101827026B CN 2010101404606 A CN2010101404606 A CN 2010101404606A CN 201010140460 A CN201010140460 A CN 201010140460A CN 101827026 B CN101827026 B CN 101827026B
- Authority
- CN
- China
- Prior art keywords
- message
- socket
- send
- layer protocol
- section
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Communication Control (AREA)
Abstract
本发明是一种IEC 61850高层协议报文发送的管理方法。发送报文时,从空闲发送报文缓冲区链表中分配一个发送报文缓冲区,对于数据报文,利用这个缓冲区生成一个会话层协议数据单元,发送时动态添加RFC1006报文头和传输层协议控制信息;对于连接管理报文,直接在这个缓冲区中生成一个传输层协议数据单元,然后加上RFC1006报文头;主任务将生成报文的控制信息,通过管道机制传递给网络守护任务进行发送。对于一个套接字上的报文发送,网络守护任务要么监视套接字是否可写,要么监视套接字对应的管道是否有要发送报文的消息。本方法提高了报文发送的实时性,并提高了传输效率。
Description
技术领域
本发明涉及一种IEC 61850高层协议报文发送的管理方法,属电力系统自动化领域。
背景技术
IEC 61850是智能变电站的系统通信标准。通过将抽象通信服务映射到具体的协议栈,IEC 61850解决了标准的稳定性与未来网络技术发展之间的矛盾。目前IEC 61850的很多服务映射到MMS(制造报文规范),国内外绝大部分厂家都是基于SISCO公司的MMSEASE-LITE软件来实现IEC 61850,在嵌入式装置中选用主流的VxWorks操作系统,其实现方式为TCP/IP+RFC 1006+传输层(服务等级0)+会话层+表示层+应用层。智能变电站强烈依赖于高速、可靠的网络通信,因此网络报文发送管理方式对系统的运行效率和可靠性起着非常重要的作用。现有技术主要有两类方法:
(1)、为每一个网络连接建立一个网络守护任务,网络守护任务使用阻塞方式调用recv(),在套接字上悬挂等待接收数据;在主任务中使用阻塞方式调用send()来发送网络数据。这种方法比较简单,但是效率低。一个网络守护任务只能为一个连接接收数据。在主任务中发送数据时,如果应用层报文较长、较多,主任务会阻塞在send()中,影响了主任务后续事件的实时处理。
(2)、系统在初始时创建一个网络守护任务,基于select()调用负责处理所有网络连接的数据接收,在主任务中使用非阻塞方式调用send()来发送网络数据。每发送一个应用数据报文,将其分割成几个带RFC1006报文头的传输层报文,放入套接字的发送报文链表中,然后从链表头开始依次发送报文。未能完全发送出去的报文继续保存在该套接字的发送报文链表中,设置标志,由网络守护任务择机进行继续发送。但网络守护任务利用select()调用的超时或者其它网络事件,在下次重新选择需要监视的文件描述字时才能判断此时该套接字是否能重新发送数据。如果在超时等待期间网络连接能够重新发送数据,则存在一个滞后发送的时间窗,影响了报文的实时发送。
智能变电站是一个实时系统,装置生成的大量报文在网络上传输,应尽可能提高传输效率。现有技术在用户发送数据、将会话层报文分割成传输层报文、以及报文进入发送链表时均存在报文复制,大大影响了传输效率。
发明内容
本发明所要解决的技术问题是,在VxWorks系统下,提供一种IEC 61850高层协议报文发送的管理方法,当网络资源拥挤报文不能完全发送出去时,采取一种报文的缓存机制,监视文件描述字,在可以发送报文时及时发送待发送的报文;采取一种高效的报文缓冲区管理方式,提高传输效率。
为了解决上述问题,本发明采用了以下技术方案。
一种IEC 61850高层协议报文发送的管理方法,其特征是:主任务初始时分配一个空闲发送报文缓冲区链表,每个发送报文缓冲区的大小比系统配置的会话层协议数据单元长度多7个字节;每建立一个套接字,就创建一个相应的管道,管道消息结构包括的数据成员有报文缓冲区起始指针、报文缓冲区长度、报文起始指针、报文实际长度、传输层报文类型;
发送报文时,从空闲发送报文缓冲区链表中分配一个发送报文缓冲区,对于数据报文,利用这个缓冲区从后向前进行报文编码,添加表示层协议控制信息和会话层协议控制信息;对于连接管理报文,直接在这个缓冲区中生成一个传输层协议数据单元,然后加上RFC1006报文头;主任务将生成报文的控制信息,包括报文缓冲区起始指针、报文缓冲区长度、报文起始指针、报文实际长度、传输层报文类型,通过管道机制传递给网络守护任务进行发送;
网络守护任务基于select()调用,监视一个读文件描述字数组、一个写文件描述字数组和一个错误文件描述字数组;网络守护任务为每一个套接字设置一个标志socketFlag,用来表示是等待网络套接字可写,还是等待套接字对应的管道有要发送的报文;网络守护任务初始时,将套接字对应的管道文件描述字设置在读文件描述字数组中;当网络守护任务等待的文件描述字就绪时,网络守护任务获得执行时机,检查存放系统返回值的文件描述字数组,对于每个套接字上的报文发送:
(1)判断当前报文是否发送完;
(2)如果当前报文没有发送完,使用send(),根据当前报文已经发送到的位置,继续发送当前报文,然后转到过程(5)执行;
(3)当前报文已发送完,将报文所在的发送报文缓冲区放入空闲发送报文缓冲区链表中;使用不等待的select()判断套接字对应的管道是否有消息;
(4)如果管道有消息,读取管道消息,获取管道消息所指报文作为当前要发送的网络报文,转到过程(1)继续执行;否则标记套接字的socketFlag为需要等待套接字对应的管道有要发送的报文,结束流程;
(5)根据send()的返回值,更新当前报文已经发送到的位置。如果send()的返回值小于希望发送的字节个数,标记套接字的socketFlag为需要等待网络套接字可写,结束流程;如果send()的返回值等于希望发送的字节个数,转到过程(1)继续执行;
根据每个套接字的socketFlag所作标记,如果需要等待套接字对应的管道有要发送的报文,则将管道文件描述字设置在读文件描述字数组中;如果需要等待网络套接字可写,则将套接字设置在写文件描述字数组中;按照新设置的文件描述字数组,网络守护任务进行下一轮文件描述字监视与处理流程。
对于数据类型的报文,将其按照传输层用户数据长度TpktUserLen从低地址开始分成若干段,只有当第n(n>=1)段报文发送完后,才进行第n+1段的发送;指针SessionPtr为会话层报文起始地址,第一段的RFC1006报文头起始指针为SessionPtr-7,第一段的传输层协议控制信息起始指针为SessionPtr-3,第一段的RFC1006报文头和传输层协议控制信息占用发送报文缓冲区中会话层协议数据单元没有使用的空间;当第n(n>=1)段报文发送完后,第n+1段报文的RFC1006报文头起始指针为SessionPtr+n*TpktUserLen-7,第n+1段报文的传输层协议控制信息起始指针为SessionPtr+n*TpktUserLen-3,第n+1段的RFC1006报文头和传输层协议控制信息占用了已发送的第n段报文的缓冲区空间。
本发明的积极效果在于:对于一个套接字上的报文发送,网络守护任务要么监视套接字是否可写,要么监视套接字对应的管道是否有要发送报文的消息,当套接字可写或者管道有要发送报文的消息时,操作系统唤醒网络守护任务及时进行报文发送,消除了具备发送条件而实际发送滞后的现象,提高了报文发送的实时性。对于数据类型的传输报文,发送时动态添加RFC1006报文头和传输层协议控制信息,避免了分段发送时的缓冲区复制,提高了传输效率。
附图说明
图1是处理一个套接字上的报文发送流程示意图。
图2是一个会话层协议数据单元被分割成多个传输段进行发送的示意图。
具体实施方式
下面结合附图和具体实施例进一步说明本发明。
主任务主要包括以下几个过程:
(1)主任务初始时分配一个空闲发送报文缓冲区链表,每个发送报文缓冲区的大小比系统配置的会话层协议数据单元长度多7个字节;
(2)每建立一个套接字,就创建一个相应的管道,管道消息结构包括的数据成员有报文缓冲区起始指针、报文缓冲区长度、报文起始指针、报文实际长度、传输层报文类型;
(3)发送报文时,从空闲发送报文缓冲区链表中分配一个发送报文缓冲区,对于数据报文,利用这个缓冲区从后向前进行报文编码,添加表示层协议控制信息和会话层协议控制信息;对于连接管理报文,直接在这个缓冲区中生成一个传输层协议数据单元,然后加上RFC1006报文头;主任务将生成报文的控制信息,包括报文缓冲区起始指针、报文缓冲区长度、报文起始指针、报文实际长度、传输层报文类型,通过管道机制传递给网络守护任务进行发送。
网络守护任务基于select()系统调用,监视一个读文件描述字数组、一个写文件描述字数组和一个错误文件描述字数组;网络守护任务为每一个套接字设置一个标志socketFlag,用来表示是等待网络套接字可写,还是等待套接字对应的管道有要发送的报文;任务初始时,将套接字对应的管道文件描述字设置在读文件描述字数组中,并且不存在上次没有发送完的报文。
当网络守护任务等待的文件描述字就绪时,网络守护任务获得执行时机,检查存放系统返回值的文件描述字数组,如果某个套接字可写,或者套接字对应的管道上有消息,则如图1所示,执行以下流程:
(1)判断当前报文是否发送完;
(2)如果当前报文没有发送完,使用send(),根据当前报文已经发送到的位置,继续发送当前报文,然后转到过程(5)执行;
(3)当前报文已发送完,将报文所在的发送报文缓冲区放入空闲发送报文缓冲区链表中;使用不等待的select()判断套接字对应的管道是否有消息;
(4)如果管道有消息,读取管道消息,获取管道消息所指报文作为当前要发送的网络报文,转到过程(1)继续执行;否则标记套接字的socketFlag为需要等待套接字对应的管道有要发送的报文,结束流程。
(5)根据send()的返回值,更新当前报文已经发送到的位置。如果send()的返回值小于希望发送的字节个数,标记套接字的socketFlag为需要等待网络套接字可写,结束流程;如果send()的返回值等于希望发送的字节个数,转到过程(1)继续执行。
根据每个套接字的socketFlag所作标记,如果需要等待套接字对应的管道有要发送的报文,则将管道文件描述字设置在读文件描述字数组中;如果需要等待网络套接字可写,则将套接字设置在写文件描述字数组中;按照新设置的文件描述字数组,网络守护任务进行下一轮文件描述字监视与处理流程。
以下是报文发送的具体实现:
发送报文时,对于数据类型的报文,将其按照传输层用户数据长度,添加3个字节的协议控制信息和4个字节的RFC1006报文头,利用socket接口进行分段发送;对于连接管理报文,直接利用socket接口进行发送;
如图2所示,对于数据类型的报文,将其按照传输层用户数据长度TpktUserLen从低地址开始分成若干段,只有当第n(n>=1)段报文发送完后,才进行第n+1段的发送。
指针SessionPtr为会话层报文起始地址,第一段的RFC1006报文头起始指针为SessionPtr-7,第一段的传输层协议控制信息起始指针为SessionPtr-3,第一段的RFC1006报文头和传输层协议控制信息占用发送报文缓冲区中会话层协议数据单元没有使用的空间;
当第n(n>=1)段报文发送完后,第n+1段报文的RFC1006报文头起始指针为SessionPtr+n*TpktUserLen-7,第n+1段报文的传输层协议控制信息起始指针为SessionPtr+n*TpktUserLen-3,第n+1段的RFC1006报文头和传输层协议控制信息占用了已发送的第n段报文的缓冲区空间。
Claims (2)
1.一种IEC 61850高层协议报文发送的管理方法,其特征是:主任务初始时分配一个空闲发送报文缓冲区链表,每个发送报文缓冲区的大小比系统配置的会话层协议数据单元长度多7个字节;每建立一个套接字,就创建一个相应的管道,管道消息结构包括的数据成员有报文缓冲区起始指针、报文缓冲区长度、报文起始指针、报文实际长度、传输层报文类型;
发送报文时,从空闲发送报文缓冲区链表中分配一个发送报文缓冲区,对于数据报文,利用这个缓冲区从后向前进行报文编码,添加表示层协议控制信息和会话层协议控制信息;对于连接管理报文,直接在这个缓冲区中生成一个传输层协议数据单元,然后加上RFC1006报文头;主任务将生成报文的控制信息,包括报文缓冲区起始指针、报文缓冲区长度、报文起始指针、报文实际长度、传输层报文类型,通过管道机制传递给网络守护任务进行发送;
网络守护任务基于select()系统调用,监视一个读文件描述字数组、一个写文件描述字数组和一个错误文件描述字数组;网络守护任务为每一个套接字设置一个标志socketFlag,用来表示是等待网络套接字可写,还是等待套接字对应的管道有要发送的报文;网络守护任务初始时,将套接字对应的管道文件描述字设置在读文件描述字数组中;当网络守护任务等待的文件描述字就绪时,网络守护任务获得执行时机,检查存放系统返回值的文件描述字数组,对于每个套接字上的报文发送:
(1)判断当前报文是否发送完;
(2)如果当前报文没有发送完,使用send(),根据当前报文已经发送到的位置,继续发送当前报文,然后转到过程(5)执行;
(3)当前报文已发送完,将报文所在的发送报文缓冲区放入空闲发送报文缓冲区链表中;使用不等待的select()判断套接字对应的管道是否有消息;
(4)如果管道有消息,读取管道消息,获取管道消息所指报文作为当前要发送的网络报文,转到过程(1)继续执行;否则标记套接字的socketFlag为需要等待套接字对应的管道有要发送的报文,结束流程;
(5)根据send()的返回值,更新当前报文已经发送到的位置。如果send()的返回值小于希望发送的字节个数,标记套接字的socketFlag为需要等待网络套接字可写,结束流程;如果send()的返回值等于希望发送的字节个数,转到过程(1)继续执行;
根据每个套接字的socketFlag所作标记,如果需要等待套接字对应的管道有要发送的报文,则将管道文件描述字设置在读文件描述字数组中;如果需要等待网络套接字可写,则将套接字设置在写文件描述字数组中;按照新设置的文件描述字数组,网络守护任务进行下一轮文件描述字监视与处理流程。
2.如权利要求1所述的IEC 61850高层协议报文发送的管理方法,其特征是:对于数据类型的报文,将其按照传输层用户数据长度TpktUserLen从低地址开始分成若干段,只有当第n(n>=1)段报文发送完后,才进行第n+1段的发送;指针SessionPtr为会话层报文起始地址,第一段的RFC1006报文头起始指针为SessionPtr-7,第一段的传输层协议控制信息起始指针为SessionPtr-3,第一段的RFC1006报文头和传输层协议控制信息占用发送报文缓冲区中会话层协议数据单元没有使用的空间;当第n(n>=1)段报文发送完后,第n+1段报文的RFC1006报文头起始指针为SessionPtr+n*TpktUserLen-7,第n+1段报文的传输层协议控制信息起始指针为SessionPtr+n*TpktUserLen-3,第n+1段的RFC1006报文头和传输层协议控制信息占用了已发送的第n段报文的缓冲区空间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101404606A CN101827026B (zh) | 2010-04-01 | 2010-04-01 | 一种iec61850高层协议报文发送的管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101404606A CN101827026B (zh) | 2010-04-01 | 2010-04-01 | 一种iec61850高层协议报文发送的管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101827026A CN101827026A (zh) | 2010-09-08 |
CN101827026B true CN101827026B (zh) | 2012-04-18 |
Family
ID=42690742
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101404606A Active CN101827026B (zh) | 2010-04-01 | 2010-04-01 | 一种iec61850高层协议报文发送的管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101827026B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102111339B (zh) * | 2011-03-24 | 2012-08-15 | 福建星网锐捷网络有限公司 | 报文发送方法及网络设备 |
CN102307138A (zh) * | 2011-07-18 | 2012-01-04 | 深圳市康必达中创科技有限公司 | 一种提高电力监控服务器端报文处理速度的方法 |
CN109672629B (zh) * | 2018-12-04 | 2023-04-07 | 迈普通信技术股份有限公司 | 一种报文发送方法及通信设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101266572A (zh) * | 2008-04-15 | 2008-09-17 | 烟台东方电子信息产业股份有限公司 | 一种iec 61850带缓冲报告的内存管理方法 |
CN101488910A (zh) * | 2007-12-18 | 2009-07-22 | 阿尔卡特朗讯公司 | 用于在多个套接字之间通信的方法和设备 |
-
2010
- 2010-04-01 CN CN2010101404606A patent/CN101827026B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101488910A (zh) * | 2007-12-18 | 2009-07-22 | 阿尔卡特朗讯公司 | 用于在多个套接字之间通信的方法和设备 |
CN101266572A (zh) * | 2008-04-15 | 2008-09-17 | 烟台东方电子信息产业股份有限公司 | 一种iec 61850带缓冲报告的内存管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101827026A (zh) | 2010-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101729589B (zh) | 一种提高端到端数据传输速率的方法及系统 | |
CN110365644B (zh) | 一种构建物联网设备高性能监控平台的方法 | |
CN102045772B (zh) | 一种数据传输方法及装置 | |
CN101986648B (zh) | 一种tcp选项的协商方法、装置及网络设备 | |
CN101626384B (zh) | 一种基于tcp协议传输数据包的方法和系统 | |
CN101877604B (zh) | 一种传输文件的方法及系统 | |
CN111683069A (zh) | 一种基于netty框架的自定义通信协议及服务方法 | |
CN108287905B (zh) | 一种网络流特征的提取与存储方法 | |
CN112822276B (zh) | 一种变电站站控层通信方法、系统、电子设备及存储介质 | |
CN100535886C (zh) | 一种节点之间的数据传输系统和装置及方法 | |
CN102611620A (zh) | 拥塞控制方法和报文处理设备 | |
CN101753584B (zh) | VxWorks系统下提高智能变电站快速报文处理速度的方法 | |
CN112087490A (zh) | 一种高性能移动端应用软件日志收集系统 | |
CN101404661B (zh) | 一种基于udp协议的实时数据通讯方法 | |
CN109547356B (zh) | 一种电能计量的数据传输方法、系统、设备及计算机存储介质 | |
CN101827026B (zh) | 一种iec61850高层协议报文发送的管理方法 | |
CN115174490B (zh) | 一种数据传输方法及网络应用终端 | |
CN113824594B (zh) | 一种报文发送方法及设备 | |
KR101328414B1 (ko) | 이기종 풍력발전기의 통합 게이트웨이 장치 | |
CN102143053A (zh) | 传输数据的方法、装置和系统 | |
CN102457387A (zh) | 多播封包的接收方法 | |
CN104683288A (zh) | 消息续传方法和装置 | |
CN113973091A (zh) | 一种报文处理方法、网络设备以及相关设备 | |
CN116248758A (zh) | 一种高效的内核-片上网络的桥式连接结构 | |
CN107623645A (zh) | 一种基于数据流转发的电力系统实时数据交换系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |