本發明公開了一種基于 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] 下面結合說明書附圖對本發明的技術方案作進一步詳細說明。
[0030] 本發明中, IEEE-1588 主站的結構原理框圖如附圖中的圖 1 所示,其結構大體上可分為供電單元、邏輯處理單元、以太網接口單元、頻率源單元等。所述邏輯處理單元包括一 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 電源輸出。
[0032] 主站的邏輯處理單元主要包括一片 Freescale 的 Kinetis K60 系列 CPU, 其采用高達 100MHz 的 ARM Corte - M4 內核,內部集成 FLASH 、 SRAM 以及 PLL ,并提供了以太網接口。為了滿足 CPU 運行時所需的內存開銷,還在 CPU 的外部總線上擴展了一片型號為 CY62157 的 16*512KB 的 SRAM 。該 CPU 主要負責處理以太網數據的收發處理以及 IEEE -1588 協議棧邏輯的實現,并為此搭建了 uCos-II 的操作系統,具體版本是 V2.84 ,最多可允許創造 254 個用戶進程。在操作系統上使用了 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 的寄存器來獲取。
[0037] 如附圖中圖 2 所示,本申請還公開了一種基于 uCos 操作系統和 lwIP 協議棧的 IEEE - 1588 主站的報文處理方法,所述方法的處理步驟具體如下 :
[0038] (I) 以太網數據分類處理 :
[0039] 這部分的處理,與圖 2 中序號為 I 的進程相對應。
[0040] 在所述過程中, CPU 查詢其內部以太網 MAC 的接收描述符,以判斷是否接收完整的報文,并對報文的類型、長度及源、目的 MAC 地址進行識別。并根據報文的幀類型及源 MAC 地址進行分類,判斷所述報文是 IEEE802.3 的報文、 IPv4 的報文、 PSF 報文或不相關報文。對于不相關報文,所述 CPU 會直接丟棄,不予處理。
[0041] CPU 進行報文分類的依據及步驟如下 :
[0042] 1. 所述 CPU 識別報文的目的地址,判斷所述報文是單播、多播還是廣播報文。若所述單播報文的目的地址與所述 CPU 以太網 MAC 地址不匹配,則會被判定為不相關報文后丟棄。
[0043] 2. 在步驟 I 的基礎上,所述 CPU 識別報文的幀類型。若所述幀類型是 0x0800 ,則所述 CPU 判定所述報文是 IPv4 的報文,并將所述報文封裝成一個 uCos-II 的消息郵箱發送給圖 2 中的序號為 2 的進程做后續處理。
[0044] 3. 在步驟 2 的基礎上,所述 CPU 繼續識別報文的幀類型。若所述幀類型非 0x88F7, 則會被判定為不相關報文后丟棄;否則所述報文可能是 PSF 或 IEEE802.3 封裝的 IEEE - 1588 報文,需要進一步判斷。
[0045] 4. 在步驟 3 的基礎上,所述 CPU 判斷報文的源 MAC 地址是否為 "08:00:17:0B:6B:0F":
[0046] a) 是,則所述報文是 PSF 報文,所述報文會被封裝成一個 uCos-II 的消息郵箱發送給圖 2 中的序號為 3 的進程做后續處理;
[0047] b) 否,則所述報文是 IEEE802.3 封裝的 IEEE - 1588 報文,所述報文會被封裝成一個 uCos-II 的消息郵箱發送給圖 2 中的序號為 11 的進程做后續處理
[0048] (2) PSF 報文處理 (IRIG - B 碼的解析 ):
[0049] 這部分的處理,與圖 2 中序號為 3 的進程相對應。
[0050] 一個 IRIG -B 碼幀有 100 個碼元,共 200 個信號變化沿,對應有 200 個 PSF 報文。
[0051] 圖 2 中序號為 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 報文的分類處理 :
[0054] 這部分的處理,與圖 2 中序號為 11 ? 14 的進程相對應。
[0055] 在所述的 11 號進程中, CPU 在接收到消息郵箱后,會解析所述郵箱內的 IEEE-1588 報文,根據所述報文內的 messageType 字段來識別 IEEE -1588 報文類型,并進行處理,具體處理流程如下 :
[0056] 1.messageType 為 0x01 時 , 所述報文為 DelayReq 報文 , 所述報文封裝成消息郵箱后,發送給 12 號進程做后續處理;
[0057] 2.messageType 為 0x02 時 , 所述報文為 PdelayReq 報文 , 所述報文封裝成消息郵箱后,發送給 13 號進程做后續處理;
[0058] 3.messageType 為 0x03 時 , 所述報文為 PdelayResp 報文 , 所述報文封裝成消息郵箱后,發送給 13 號進程做后續處理;
[0059] 4.messageType 為 0x0A 時,所述報文為 PdelayRespFollowup 報文,所述報文封裝成消息郵箱后,發送給 13 號進程做后續處理;
[0060] 5.messageType 為 0x0B 時 , 所述報文為 Announce 報文 , 所述報文封裝成消息郵箱后,發送給 14 號進程做后續處理;
[0061] 6.messageType 為其它值時 , 所述報文被直接丟棄。
[0062] 在所述的 12 號進程中, CPU 在接收到消息郵箱后,會解析所述郵箱內的 DelayReq 報文,所述 CPU 會提取出插入在所述報文的保留字段內的接收時標,并將所述時標封裝成 DelayResp 報文后 , 通過以太網接口發送出去。
[0063] 在所述的 13 號進程中, 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 報文的發送時標。
[0072] b) 所述 CPU 依據步驟 a 中獲取的 PdelayResp 報文的發送時標,以及解釋 PdelayResp 報文時獲取的 PdelayResp 報文的接收時標和 PdelayReq 報文的接收時標,外加 PdelayReq 報文的發送時標 ( 所述時標由 7 號進程以消息郵箱的方式提供 ) ,計算出主站與對端的鏈路延時。
[0073] 在所述的 14 號進程中, 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 報文的發送處理 :
[0076] 這部分的處理,與圖 2 中序號為 15 ? 17 的進程相對應。
[0077] 在所述的 15 號進程中, CPU 依次完成如下操作 :
[0078] 1. 發送 PdelayReq 報文。
[0079] 2. 通過 ΜΠΜ 接口,訪問 DP83640 的寄存器,獲取步驟 I 中發送的 PdelayReq 報文對應的發送時標。將所述時標裝成成消息郵箱的方式發送給 13 號進程。
[0080] 3. 按照設定的 P2P 對時周期,定時休眠,待喚醒后重新開始執行步驟 I 。
[0081] 在所述的 16 號進程中, CPU 依次完成如下操作 :
[0082] 1. 發送 Sync 報文。
[0083] 2. 通過 ΜΠΜ 接口,訪問 DP83640 的寄存器,獲取并保存步驟 I 中所述 Sync 報文對應的發送時標。
[0084] 3. 將步驟 2 中所獲取的時標封裝成 Followup 報文發送。
[0085] 4. 按照設定的對時同步周期,定時休眠,待喚醒后重新開始執行步驟 I 。
[0086] 在所述的 17 號進程中, CPU 依次完成如下操作 :
[0087] 1. 根據主站當前的狀態,填充 Announce 報文的相應字段后發送
[0088] 2. 按照設定的報文發送周期,定時休眠,待喚醒后重新開始執行步驟 I 。
[0089] 注 : 在步驟 (4) 中,相關進程收、發的所有 IEEE -1588 報文均為 IEEE802.3 的幀格式。
[0090] (5) IPv4 報文的分類處理 :
[0091] 這部分的處理,與圖 2 中序號為 2 的進程相對應。
[0092] 在所述進程 2 中, CPU 需要識別出封裝在 UDP 報文中的 IPv4 幀格式的 IEEE -1588 報文,并以消息郵箱的方式轉給 4 號進程,將其余報文轉給 18 號進程。
[0093] 所述 CPU 在識別待判斷報文是否為 IPv4 幀格式的 IEEE - 1588 報文,是依據以下幾個判定條件 :
[0094] 1. 所述報文為 UDP 報文。
[0095] 2. 所述報文的目的端口為 319 或 320 。
[0096] 3. 所述報文的目的 IP 為 224.0.0.107 或 224.0.1.129 。
[0097] 當所述報文同時滿足以上 3 個條件時,即可判定為 IPv4 幀格式的 IEEE - 1588 報文。
[0098] (6) IPv4 幀格式的 ffiEE - 1588 報文的分類處理 :
[0099] 這部分的處理 , 與圖 2 中序號為 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 報文的發送處理 :
[0102] 這部分的處理,與圖 2 中序號為 8 ? 10 的進程相對應。
[0103] 封裝在 IEEE802.3 幀中的 IEEE - 1588 報文的格式定義與封裝在 IPv4 幀中的 IEEE - 1588 報文的格式定義是完全一樣的,因此這部分的處理的流程和判定條件,與上述的步驟 (4) 是一致的,唯一的不同點在于步驟 (4) 中發送的報文的數據是封裝成 IEEE802.3 幀后發送的,而本步驟中發送的報文是封裝成 IPv4 幀后發送的。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
