一种基于uCos-II操作系统和lwIP协议栈的IEEE-1588主站以及基于该主站的报文处理方法
主站以及应用于电力系统的支持IEEE‐1588协议的主时钟(IEEE‐1588主站)的实现方法。该方法是在一个低成本的硬件平台上,借助uCos‐II操作系统和TCP/IP的协议栈,对以太网数据进行了分类处理,实现了在同一个以太网端口提供基于二层和三层报文交换的IEEE‐1588的主站功能。另外,通过使用不同的操作系统进程来处理E2E和P2P对时,实现了两种对时模式在同一端口上的共存。
技术领域
[0001] 本发明属于电力系统电力电子与继电保护领域,具体涉及一种应用于电力系统的支持IEEE - 1588协议的主时钟(IEEE - 1588主站)的实现方案,该方案基于uCos-II操作系统和lwIP协议栈。
背景技术
[0002] IEEE - 1588对时技术是一种基于乒乓对时原理的精确时钟同步技术,它采用短帧传输,算法简单,对计算性能和网络带宽的要求都较低,适用于支持多播消息的分布式网络通信系统。
[0003]目前,随着电力系统中的智能电网建设的逐步深入,二次设备侧的数字化、网络化的特点愈发明显,且对对时精度也提出较高的要求。IEEE - 1588因其天然具备的网络化特性以及较高的对时精度,在当前的智能电网建设中受到了广泛的关注,并应用到智能电网的建设中来。
[0004] IEEE - 1588对时技术是一种主从式的时间同步技术,各对时终端作为时间同步系统中的从节点(从站),通过IEEE - 1588协议,与时间同步系统中支持IEEE - 1588协议的主时钟(主站)保持时间同步,进而保证各对时终端间的时间同步。
[0005] 目前,IEEE- 1588对时技术在智能电网中的应用目前还主要集中在过程层,由于过程层的数据基于二层报文交换,因而当前应用于电力系统的IEEE -1588的主时钟大多仅支持IEEE802.3的帧格式,支持IPv4帧格式的主时钟较少。
[0006] 目前,支持IPv4帧格式的主时钟,一方面由于其运行Linux、VxWorks之类的操作系统,需要使用高性能CPU及以之对应的DRAM和外部FLASH的支持。硬件成本高;另一方面,其在工作时对于IPv4和IEEE802.3帧格式的支持是互斥的,对于E2E和P2P的支持也是互斥的,不利于复杂环境下的应用。基于以上两方面因素,本中提出了一种基于低成本的硬件平台,且能同时支持多种帧格式和多种对时机制的IEEE - 1588主站的实现方法。
发明内容
[0007] 为解决现有的IEEE - 1588主站实现中存在的硬件成本高、功能支持单一等问题,本申请公开了一种基于uCos操作系统和lwIP协议栈的IEEE - 1588主站的实现方法,以及基于该主站的报文处理方法。
[0008] 本申请具体采用以下技术方案。
[0009] 一种基于uCos操作系统和lwIP协议栈的IEEE -1588主站,所述主站主要包括供电单元、逻辑处理单元、以太网接口单元、频率源单元,其特征在于:
[0010] 所述逻辑处理单元包括一 CPU,在所述CPU上移植uCos-II操作系统,并在该操作系统上使用lwIP协议栈,所述逻辑处理单元负责处理以太网数据的收发以及IEEE - 1588协议栈逻辑的实现;
[0011] 所述以太网接口单元包括一 SC接口光模块和一片IEEE - 1588专用PHY芯片,所述SC接口光模块和IEEE -1588专用PHY芯片相连,所述以太网接口单元中的PHY芯片通过MII接口连接至逻辑处理单元中的CPU以协助所述逻辑处理单元提供以太网数据的收发功能,在PHY芯片的IO脚上通过背板接入一路IRIG - B码信号作为基准源输入,所述PHY芯片捕获并记录输入的IRIG -B码,把IRIG -B码信号的高低电平的跳变方向、跳变时的时标信息封装成IEEE802.3格式的PSF (PHY Status Frame)报文,并为CPU提供分辨率为8ns的 IEEE - 1588 时标;
[0012] 所述频率源单元主要是负责给CPU和PHY提供时钟信号;
[0013] 所述供电单元负责为主站提供所需的电源。
[0014] 本申请还进一步公开了一种基于uCos操作系统和lwIP协议栈的IEEE - 1588主站的报文处理方法,方案如下:
[0015] 一种基于uCos操作系统和lwIP协议栈的IEEE -1588主站的报文处理方法,其特征在于,所述方法包括以下步骤:
[0016] (I)所述CPU接收以太网数据,在所述uCos-1I操作系统的基础上,所述CPU对以太网接收数据进行分类处理,把不同帧格式的报文分别放在操作系统的不同进程中处理,包括把封装在IEEE802.3和IPv4帧里的IEEE -1588报文放在不同的进程中处理;操作系统中负责以太网数据接收的进程,会把IEEE802.3、IPv4帧格式的报文以及PSF报文数据以消息邮箱的方式分发到不同的指定进程中,以便进行下一步的处理;
[0017] (2)在步骤(I)的基础上,所述CPU对于接收到的内含IRIG-B码的跳变沿时刻信息的PSF报文进行解析处理,所述CPU根据所述的跳变沿时刻解析出IRIG -B内信息,并计算出所解析出的信息与基准源间的误差;
[0018] (3)在步骤(I)的基础上,所述CPU对于接收的IEEE802.3帧格式的报文会再次进行分类处理,丢弃其中的非IEEE - 1588报文,并把剩余的IEEE - 1588报文分为:E2E查询报文(DelayReq 报文)、P2P 相关报文(PdelayReq、PdelayResp 和 PdelayResp Followup 报文)和BMC (Best Master Clock)相关报文(Announce报文),根据报文的类型,再次分发到不同的指定进程中去处理;
[0019] (4)在步骤(3)的基础上,对于IEEE802.3帧格式的IEEE - 1588报文中的同步报文(Sync和Followup报文)、P2P查询报文(PdelayReq报文)和Announce报文的发送,都分别有一个对应的进程来控制,进程间是相互独立的,有其自己固定的周期;
[0020] (5)在步骤(I)的基础上,对于接收的IPv4帧格式的报文会再次进行分类处理,把其中的非IEEE - 1588报文分给lwIP协议栈进程处理,其余的分给相应的IEEE - 1588处理进程;
[0021] (6)在步骤(5)的基础上,对于接收的IPv4帧格式的IEEE -1588报文会再次进行分类处理,将其分为:E2E查询报文(DelayReq报文)、P2P相关报文(PdelayReq、PdelayResp和PdelayResp Followup报文)和BMC相关报文(Announce报文),根据报文的类型,再次分发到不同的指定进程中去处理;
[0022] (7)在步骤(6)的基础上,对于IPv4帧格式的同步报文、P2P查询报文(PdelayReq报文)和Announce报文的发送,都分别有一个对应的进程来控制,进程间是相互独立的,有其自己固定的周期。
[0023] 本申请具有以下技术效果:
[0024] (I)基于一个低成本的硬件平台,实现了支持IEEE802.3、IPv4帧格式的IEEE - 1588 主站。
[0025] (2)实现了在同一个以太网端口上,同时提供基于二层和三层网络服务的IEEE - 1588主站功能。
[0026] (3 )实现了在同一个以太网端口上,同时提供对E2E和P2P延时测量机制的支持。
具体实施方式
[0029] 下面结合说明书附图对本发明的技术方案作进一步详细说明。
所示,其结构大体上可分为供电单元、逻辑处理单元、以太网接口单元、频率源单元等。所述逻辑处理单元包括一CPU,在所述CPU上移植uCos-II的操作系统,并在该操作系统上使用lwIP的协议栈,所述逻辑处理单元设置有逻辑处理单元,通过逻辑处理单元的以太网接口接收以太网数据,所述逻辑处理单元负责处理以太网数据的收发处理以及IEEE -1588协议栈逻辑的实现;所述以太网接口单元包括一 SC接口光模块和一片IEEE -1588专用PHY芯片,所述SC接口光模块和IEEE -1588专用PHY芯片相连,所述以太网单元通过MII接口连接至逻辑处理单元中的CPU以协助所述逻辑处理单元提供以太网数据的收发功能,在PHY芯片的IO脚上通过背板接入一路IRIG - B码信号作为基准源输入,所述PHY芯片捕获并记录输入的IRIG - B码,把其沿翻转极性、时标信息封装成IEEE802.3格式的PSF报文,并为CPU提供分辨率为8ns的IEEE - 1588时标;所述频率源单元主要是负责给CPU和PHY提供时钟信号;所述供电单元负责为主站提供所需的电源。

[0031] 主站的供电单元主要包括一片国半公司LM2812 - 3.3的DC - DC芯片及相关外围器件,其负责给其它单元提供工作时所需的3.3V电源输出。
个用户进程。在操作系统上使用了 lwIP协议栈,具体版本为V1.3.0。该单元对于以太网数据收发的处理,将在后续结合附图中的图2进行详细介绍。
[0033] 主站的以太网接口单元主要由一个Avago公司AFBR5803AZ (SC 口)的光模块和一片国半公司DP83640的IEEE - 1588专用PHY芯片组成。该单元主要通过MII接口协助(PU提供以太网数据的收发功能,并由DP83640芯片为CPU提供分辨率为8ns的IEEE-1588时标。另外,该单元还负责捕获输入的IRIG - B码,并把其沿翻转极性、时标等信息封装成IEEE802.3格式的PSF报文,上送给CPU做后续处理。所述PSF报文的源MAC地址会在初始化 DP83640 时被配置为 "08: 00: 17: 0B: 6B: 0F"。
[0034] 主站的频率源单元主要是负责给CPU和PHY提供时钟信号,在此为了保证输出能满足精度要求,使用了一个频率稳定度为±200ppb的恒温晶振,频点为25Mhz,经过一个时钟分发芯片CY2305的时钟分配芯片后供给CPU和PHY芯片使用。
[0035] 本发明中,对于IEEE - 1588主站功能的程序设计基于uCos-II操作系统和lwIP协议栈,其对以太网数据报文(尤其是IEEE - 1588协议相关的报文)采用分类、分层的处理方法。每一类、每一层的处理对应于操作系统中特定的一个进程,进程间通过操作系统提供的信号量、消息邮箱和信号量集来实现数据交换和进程调度。
[0036] 通过对DP83640的配置,可以让DP83640把IEEE - 1588报文的接收时标插入IEEE -1588报文中的保留字段,以便在进行报文处理时可以直接获取。对于IEEE -1588报文的发送时标的获取,需要CPU通过ΜΠΜ总线去访问DP83640的寄存器来获取。
所示,本申请还公开了一种基于uCos操作系统和lwIP协议栈的IEEE - 1588主站的报文处理方法,所述方法的处理步骤具体如下:
[0038] (I)以太网数据分类处理:
中序号为I的进程相对应。

[0040] 在所述过程中,CPU查询其内部以太网MAC的接收描述符,以判断是否接收完整的报文,并对报文的类型、长度及源、目的MAC地址进行识别。并根据报文的帧类型及源MAC地址进行分类,判断所述报文是IEEE802.3的报文、IPv4的报文、PSF报文或不相关报文。对于不相关报文,所述CPU会直接丢弃,不予处理。
[0041] CPU进行报文分类的依据及步骤如下:
[0042] 1.所述CPU识别报文的目的地址,判断所述报文是单播、多播还是广播报文。若所述单播报文的目的地址与所述CPU以太网MAC地址不匹配,则会被判定为不相关报文后丢弃。
中的序号为2的进程做后续处理。
的基础上,所述CPU继续识别报文的帧类型。若所述帧类型非0x88F7,则会被判定为不相关报文后丢弃;否则所述报文可能是PSF或IEEE802.3封装的IEEE - 1588报文,需要进一步判断。
的基础上,所述CPU判断报文的源MAC地址是否为"08:00:17:0B:6B:0F":
中的序号为3的进程做后续处理;
中的序号为11的进程做后续处理
[0048] (2) PSF报文处理(IRIG - B码的解析):
中序号为3的进程相对应。
个码元,共200个信号变化沿,对应有200个PSF报文。
中序号为3的进程,在接收到消息邮箱后会解析PSF报文,提取所述PSF报文内的有关IRIG - B码信号变化时的时标信息,将所述时标信息送入一个长度为200的FIFO缓存。通过计算所述缓存中相邻单元内的时标差值,即可解算出输入的IRIG - B码的信号脉宽,进而得出相应的码元,以最终解析出IRIG - B报文所含的UTC时间(协调世界时)。
[0052] 所述UTC时间代表的是所述IRIG - B报文的秒准时时刻的基准源时间。所述的IRIG -B码秒准时沿到达主站时,主站内部的时间可通过PSF报文内的时标来获取。通过计算所述时标与UTC时间的差值,即可得出主站内部时间与基准源间的误差。采用DP83640提供的Step Adjustment的调节方式,将所述误差值转换为相应的参数后,通过所述CPU与DP83640间的MIIM总线接口操作相应的寄存器后即可完成时间的调节。
[0053] (3) IEEE802.3帧格式的ffiEE - 1588报文的分类处理:
中序号为11〜14的进程相对应。
号进程中,CPU在接收到消息邮箱后,会解析所述邮箱内的IEEE-1588报文,根据所述报文内的messageType字段来识别IEEE -1588报文类型,并进行处理,具体处理流程如下:
号进程做后续处理;
号进程做后续处理;
号进程做后续处理;
号进程做后续处理;
号进程做后续处理;
[0061] 6.messageType为其它值时,所述报文被直接丢弃。
号进程中,CPU在接收到消息邮箱后,会解析所述邮箱内的DelayReq报文,所述CPU会提取出插入在所述报文的保留字段内的接收时标,并将所述时标封装成DelayResp报文后,通过以太网接口发送出去。
号进程中,CPU在接收到消息邮箱后,会解析所述邮箱内的报文,所述报文可能有三种,所述CPU对所述报文的处理方式具体如下:
[0064] 1.PdelayReq 报文:
[0065] a)所述CPU会提取出插入在所述报文的保留字段内的接收时标,并将所述时标封装成PdelayResp报文后,通过以太网接口发送出去。
[0066] b)所述CPU通过MIIM接口,获取步骤a中发送的PdelayResp报文的发送时标,并所述时标封装成PdelayRespFollowup报文后,通过以太网接口发送出去。
[0067] 2.PdelayResp 报文:
[0068] a)所述CPU提取并记录插入在所述报文的保留字段内的PdelayResp报文的接收时标。[0069] b)所述CPU提取并记录所述报文中携带的PdelayReq报文的接收时标。
[0070] 3.PdelayRespFollowup 报文:
[0071] a)所述CPU提取并记录所述报文中携带的PdelayResp报文的发送时标。
号进程以消息邮箱的方式提供),计算出主站与对端的链路延时。
号进程中,CPU在接收到消息邮箱后,会解析所述邮箱内的Announce报文,并参照IEEE -1588标准的第9.3章节有关BMC算法的Figure26〜28中的逻辑要求,来完成IEEE - 1588状态机的状态识别和切换。
[0074] 注:在步骤(3)中,相关进程收、发的所有IEEE -1588报文均为IEEE802.3的帧格式。
[0075] (4) IEEE802.3 帧格式的 Sync、Followup、PdelayReq 和 Announce 报文的发送处理:
中序号为15〜17的进程相对应。
号进程中,CPU依次完成如下操作:
[0078] 1.发送 PdelayReq 报文。
号进程。
[0080] 3.按照设定的P2P对时周期,定时休眠,待唤醒后重新开始执行步骤I。
号进程中,CPU依次完成如下操作:
[0082] 1.发送 Sync 报文。
[0083] 2.通过ΜΠΜ接口,访问DP83640的寄存器,获取并保存步骤I中所述Sync报文对应的发送时标。
中所获取的时标封装成Followup报文发送。
[0085] 4.按照设定的对时同步周期,定时休眠,待唤醒后重新开始执行步骤I。
号进程中,CPU依次完成如下操作:
[0087] 1.根据主站当前的状态,填充Announce报文的相应字段后发送
[0088] 2.按照设定的报文发送周期,定时休眠,待唤醒后重新开始执行步骤I。
[0089] 注:在步骤(4)中,相关进程收、发的所有IEEE -1588报文均为IEEE802.3的帧格式。
[0090] (5) IPv4报文的分类处理:
中序号为2的进程相对应。
中,CPU需要识别出封装在UDP报文中的IPv4帧格式的IEEE -1588报文,并以消息邮箱的方式转给4号进程,将其余报文转给18号进程。
[0093] 所述CPU在识别待判断报文是否为IPv4帧格式的IEEE - 1588报文,是依据以下几个判定条件:
[0094] 1.所述报文为UDP报文。
或320。
[0096] 3.所述报文的目的 IP 为 224.0.0.107 或 224.0.1.129。
个条件时,即可判定为IPv4帧格式的IEEE - 1588报文。
[0098] (6) IPv4帧格式的ffiEE - 1588报文的分类处理:
中序号为5〜7的进程相对应。
[0100] 封装在IEEE802.3帧中的IEEE - 1588报文的格式定义与封装在IPv4帧中的IEEE - 1588报文的格式定义是完全一样的,因此这部分的处理的流程和判定条件,与上述的步骤(3)是一致的。唯一的不同点在于步骤(3)中处理的是封装在IEEE802.3帧中的IEEE - 1588报文数据,而本步骤中处理的是封装在IPv4帧中的IEEE - 1588的报文数据。
[0101] (7) IPv4 巾贞格式的 Sync、Followup、PdelayReq 和 Announce 报文的发送处理:
中序号为8〜10的进程相对应。
[0103] 封装在IEEE802.3帧中的IEEE - 1588报文的格式定义与封装在IPv4帧中的IEEE - 1588报文的格式定义是完全一样的,因此这部分的处理的流程和判定条件,与上述的步骤(4)是一致的,唯一的不同点在于步骤(4)中发送的报文的数据是封装成IEEE802.3帧后发送的,而本步骤中发送的报文是封装成IPv4帧后发送的。
SRC=http://www.google.com/patents/CN103532953A
一种基于uCos-II操作系统和lwIP协议栈的IEEE-1588主站以及基于该主站的报文处理方法的更多相关文章
- 操作系统和Python的发展历程
一:操作系统的发展历史: 操作系统:什么是操作系统?我们首先想到的是电脑,,也就是所谓的Windows8,Windows7,或者XP系统和Windows10,当然也包括我们手机的安卓系统或者IPhon ...
- UNIX操作系统和Linux操作系统介绍
UNIX操作系统(尤尼斯),是一个强大的多用户.多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson.DennisRitchie和DouglasMcI ...
- 【嵌入式开发】裸机引导操作系统和ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 )
[嵌入式开发]ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 ) 一. 内存 ...
- 【大数据技术】操作系统和Hadoop版本选择
1.操作系统选择 Hadoop产品是由Java语言开发的,所以推荐的是Linux操作系统,理由很简单开源免费,推荐的操作系统CentOS. CentOS是一个基于Red Hat 企业级 Linux 提 ...
- 实现windows操作系统和VB下Linux虚拟操作系统相互传取文件方式总结
在windows上执行虚拟机跑的是Linux的操作系统,怎样才干在不同的操作系统之间传递文件呢? 这是本人切身体会到的,假设你没有好的方法的话.确实非常痛苦.下面是我个人的方法总结: 方法一.很好用的 ...
- windows操作系统和java常识
一.java5和java8版本更新很大,现在都是java8; 二.数据存储最小单位Byte字节八个比特位: 三.没有图形操作界面的windows系统: 四.java语言跨平台性:JVM充当不同操作系统 ...
- 看看大网站都用什么操作系统和Web服务器
以下内容为网络上转载总结,不是很准确 Google 用哪些软件做 Web Server? 除了有两个节点操作系统看出来是 Linux 外,其他的都是未知的. Web 服务器用的都是 GWS ? 我估计 ...
- Linux操作系统和Windows操作系统的区别
1.免费与收费 在中国,windows和linux都是免费的,至少对个人用户是如此,如果那天国内windows真的严打盗版了,那linux的春天就到了!但现在linux依然是任重道远,前路漫漫. 2. ...
- 学习操作系统和Linux内核的新体会
算起来是第三次看内核了吧,要从源码的细节中爬出来: (1)先拎清楚主要的数据结构,就把握住了骨架: (2)再看每个系统调用的功能的流程是如何围绕上述数据结构展开.举个栗子,块设备驱动层的主要数据结构有 ...
随机推荐
- Android 快速下载 Android framework 源码
官网 Android framework源码git地址 github: https://github.com/android/platform_frameworks_base google 官方: h ...
- python分解质因数
将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. # !/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wa ...
- springmvc hibernate整合
今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多 了,Spring-Security的就留在下一篇吧,这篇主 ...
- 【Codeforces Round #442 (Div. 2) A】Alex and broken contest
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 注意是所有的名字里面,只出现了其中某一个名字一次. [代码] #include <bits/stdc++.h> usin ...
- 洛谷——P2241 统计方形(数据加强版)
https://www.luogu.org/problem/show?pid=2241 题目背景 1997年普及组第一题 题目描述 有一个n*m方格的棋盘,求其方格包含多少正方形.长方形 输入输出格式 ...
- Maven报错Missing artifact jdk.tools:jdk.tools:jar:1.7--转
原文地址:http://blog.csdn.net/u013281331/article/details/40824707 在Eclipse中检出Maven工程,一直报这个错:“Missing art ...
- Spring Boot Freemarker特别篇之contextPath【从零开始学Spring Boot】(转)
需求缘起:有人在群里@我:请教群主大神一个问题,spring boot + freemarker 怎么获取contextPath 头疼死我了,网上没一个靠谱的 .我就看看之前博客中的 [Spring ...
- [Yarn] Use Yarn to Create an Alternative Import Name of an Installed Library
In this lesson we'll show how to use yarn to alias the names of same npm libraries but install diffe ...
- 修改Linux中的用户名 分类: B3_LINUX 2014-07-24 11:40 440人阅读 评论(0) 收藏
需要修改2个文件: /etc/hosts /etc/sysconfig/network 然后重启 1.修改/etc/sysconfig/network NETWORKING=yes HOSTNAME= ...
- ConcurrentLinkedQueue的实现原理分析
1. 引言 在并发编程中我们有时候需要使用线程安全的队列.如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法.使用阻塞算法的队列可以用一个锁(入队和出队用同 ...