董朝武, 李哲,蒲瑩,鐘啟迪,李明,郝俊芳
(1.國網經濟技術研究院有限公司, 北京市 102209;2.許繼集團有限公司,河南省 許昌市 461000)
在以新能源為主體的新型電力系統構建背景下,柔性直流輸電技術在遠距離清潔能源友好消納,推動雙碳目標實現方面發揮了重要作用[1-3]。控制保護系統是保障柔性直流輸電安全穩定運行的關鍵[4-7]。 柔性直流輸電相較于常規直流輸電,對控制保護設備的穩定性和可靠性要求更高[8]。控制保護設備應具備強大的實時運算和數據處理能力,具有更高速度的外部通信接口,能夠適應于高溫、高濕的海上風電送出等多種場景[9-10],因此采用了大量具備高速數據采集、快速運算處理等特點的高端芯片。 我國柔性直流輸電工程中,控制保護設備核心元器件所使用的芯片絕大部分為已在電力系統應用多年的進口芯片,技術嚴重受制于國外,迫切需要做好進口芯片與技術的斷供風險應變準備,開展柔性直流輸電控制保護系統芯片的國產化替代工作,保障我國的電力安全[11-12]。
在控制保護系統國產化替代背景下,柔性直流控制保護系統與電子式互感器合并單元高速通信接口相關的國產化替代,既要滿足高速通信的需求,也要保證與以往系統通信的兼容性。
電子式互感器合并單元的通信協議通常采用IEC60044-8,該協議規定了從互感器到控制保護裝置傳輸的數據格式,物理層采用FT3 幀格式[13],以曼徹斯特編碼(以下簡稱曼碼編碼)方式編碼。 由于常規直流對采樣速率要求不高,常用的5 Mbit/s、10 Mbit/s、20 Mbit/s 三種通信速率即可滿足通信要求。 而柔性直流輸電中電子式互感器的采集頻率達到100 kHz,必須以40 Mbit/s 的通信速率才可完成完整的數據傳輸。
在常規直流輸電的應用中,FT3 解碼算法需要事先指定通信幀的傳輸波特率,由于不同廠家的光接收或發送器件對光電信號相互轉換時對應的高低電平的定義存在差異,有可能導致控制保護設備解碼失敗,因此需要針對每一種傳輸速率及曼碼編碼方式設計不同的解碼算法,并根據實際應用要求進行選擇或設置。 適配不同的速率需要重新下載對應版本的解碼程序,一方面大大增加了程序的維護難度,另一方面也嚴重影響了工程調試效率。
本文在國產化柔性直流控制保護系統基礎上,基于國產FPGA 芯片,針對IEC60044-8 中的FT3幀格式,設計一種解碼方法,可以對輸入光信號的信號特征進行動態掃描,準確識別光信號波特率及曼碼編碼方式并完成自動調參,從而在不需要外部干預的情況下,對符合規范的不同通信速率及編碼方式的信號進行動態自適應正確解碼。
柔性直流控制保護系統外部通信通常使用的通信協議為xlinx Aurora、IEC60044-8、TCP/IP 等。對于控制保護系統與電子式互感器合并單元高速通信的國產化替代,xlinx Aurora 協議通用性不強,僅限于使用xlinx FPGA 器件的裝置,無法實現國產化。 TCP/IP 協議雖然具有兼容性強、傳輸速率高等特點,但會額外增加電路設計、程序設計的復雜度。 IEC60044-8 的FT3 幀格式具有良好的數據完整性,其幀結構使它可用于高速率的多點網絡同步數據鏈接,并且已在電子式互感器合并單元中大量應用,因此研究其協議內容并設計更加通用性的解碼算法,是解決其國產化替代后的兼容性問題的關鍵。 以下分別從物理層和鏈路層兩方面介紹該通信協議。
從合并單元到二次設備之間,通常采用光纖連接傳遞信號[14],并將光線亮定義為傳輸數據的“1”位,光線滅定義為傳輸數據的“0”位。
信號編碼采用曼徹斯特編碼[15],可以將時鐘信號和數據結合在一起,接收端從信號中分離出時鐘,從而實現對通信過程中收發雙方的數據同步。 正常情況下,二進制“1”被編碼為從低位到高位跳變,二進制“0”被編碼為從高位到低位跳變,這種曼碼編碼方式在本文中也被稱為“正曼碼編碼”,相反的編碼方式在本文中被稱為“反曼碼編碼”。 由于波特率表示單位時間內傳送的碼元符號的個數,由此可知,曼碼編碼后的數據波特率是編碼前的2 倍。
原始數據及經過正曼碼編碼、反曼碼編碼后的數據如圖1 所示。

圖1 正反曼碼編碼Fig.1 Positive and negative Manchester codes
IEC60044-8 協議的鏈路層選用FT3 格式,其具有良好數據完整性的優點,在數據傳輸的過程中,并不需要二次設備進行應答。
FT3 幀由“幀頭”、“有效負載”、“循環冗余校驗(cyclic redundancy check, CRC)位”及“空閑位”幾個部分組成,其中“幀頭”為固定的16 進制數據0x0564,“有效負載”根據標準幀和擴展幀的不同分為3 個或者4 個數據塊,每個數據塊包含8 個16 bit的數據。 每個數據塊后是一個16 bit 的CRC 位,“空閑位”則是二進制的“1”[16-17]。 為提高通信的可靠性,幀與幀之間應至少傳輸70 個“空閑位”[18],以便驅動接收器為即將來臨的傳輸做準備。 鏈路層的通信數據幀組成如圖2 所示,其中空閑位的個數應大于等于70 個。

圖2 鏈路層通信數據幀組成Fig.2 The composition of the communication data frames of the link layer
在明確了物理層、鏈路層的編碼方式及幀格式后,即可設計相應的算法實現編解碼。 在對曼碼編碼的數據進行解碼的過程中,最終需要從編碼后的數據中提取出恢復時鐘,利用恢復時鐘與數據的同步性恢復出正確的數據。 在對FT3 幀的解碼過程中,傳統的曼碼解碼必須要提前知道編碼數據的波特率,并且必須保證從光器件接收并輸入到FPGA 中的曼碼編碼信號為正曼碼,才可以實現正確的解碼。
本文設計的波特率自動適應算法可以在不指定波特率的情況下,對輸入信號進行動態掃描,根據輸入信號的特征,再結合FT3 協議的幀格式,對輸入信號的波特率、正反曼碼編碼進行自動識別與鎖定,其架構設計如圖3 所示。

圖3 波特率動態自適應解碼流程圖Fig.3 The decoding flow chart for the dynamic baud rate
算法實現的關鍵為原始數據解碼及幀頭檢測。原始數據的解碼按照檢測特征點—計算波特率—恢復時鐘的順序執行,任何一個流程的失敗都會返回初始化狀態重新執行解碼流程。 上述流程中,對特征點完成檢測并成功計算出波特率即為波特率動態自適應的過程,也是本算法的核心。 在完成數據解碼后,通過幀頭檢測判斷解碼后的數據中是否包含協議中的幀頭,若不包含則對解碼數據的極性翻轉,直到成功提取到幀數據。 初始化到成功提取幀數據的過程發生在最初建立通信鏈路的階段,這個過程利用最初幾幀數據進行識別并自動調整參數,完成參數調整后即進入正常解碼流程。
曼碼編碼是一種雙向編碼,通過電平的高低轉換來表示數據“0”或“1”,編碼后波特率將翻倍。 若編碼前信號為連續的高電平“1”,或者連續的低電平“0”,將無法對待譯碼信號的波特率信息進行準確判斷,如圖4 所示。

圖4 連續高低電平可按兩種波特率解碼Fig.4 Schematic diagram of two baud rate decoding for continuous high and low levels
從圖4 中可以看出,對于同樣的波特率為n的待譯碼信號,可以譯碼為波特率為n的信號“11”或者“00”,也可以將其譯碼為波特率為2n的信號“1010”。 因此要從待譯碼的數據中恢復出正確的時鐘信號以及數據,關鍵是要識別出波特率并從正確的譯碼起始點位開始解碼。
從上述分析可知,連續不變原始數據經過編碼后將發生失真,無法解碼。 根據信號特征,若原始信號有變位,變位處的信號經過曼碼編碼后其脈沖寬度是非變位處的2 倍,因此可以在信號的解碼過程中,對信號的最寬脈沖寬度和最窄脈沖寬度進行動態掃描,若最寬脈沖寬度是最窄脈沖寬度的2 倍,則最寬脈沖的中點處即為原始信號跳變的特征點位,即變位點。經過動態掃描并檢測到變位點后,可將該變位點作為一個曼碼編碼位的起點,從而確定出待譯碼的時鐘信號在編碼后數據中所處的正確位置,變位點所處位置如圖5 所示。

圖5 變位點在編碼數據中的位置Fig.5 The position of the change point in the coded data
在實際工程中,兩幀數據之間一般會被全部填充為空閑位,而連續的空閑位編碼后并不包含變位點。也就是說,動態掃描變位點的時間長度一定要覆蓋空閑位出現的時間長度。 對于工程中常用的幾種波特率傳輸協議,根據一般工況的信號傳輸幀率,即可確定空閑位最多出現的次數,從而確定出動態掃描變位點所需時間。 在實際應用中,可以根據經驗值選擇一段比較長的時間即可。
識別出變位點后,即可恢復出正確的數據編碼時鐘。 使用高頻時鐘對數據編碼時鐘進行采樣并計算兩者之間的關系,即可確定信號的波特率。 為保證波特率可以被正確穩定地識別,高頻時鐘的頻率至少應為待識別信號編碼時鐘頻率的4 倍。 根據協議標準,編碼后信號的上升和下降時間由幅值的10%和90%兩點確定。
在FPGA 中,可以使用鎖相環模塊來產生高頻時鐘,并依據算法設計相應的解碼邏輯。 考慮到穩定性,FPGA 產生的時鐘頻率不易過高。 以40 Mbit/s波特率曼碼數據為例,使用鎖相環產生160 MHz 高頻采樣時鐘進行識別即可,如圖6 所示。

圖6 160 MHz 采樣時鐘下40 Mbit/s 波特率信號的采樣落點Fig.6 Sampling point diagram of 40 Mbit/s baud rate signal under 160 MHz sampling clock
從圖6 中可以看出,在理想的信號質量下,160 MHz時鐘在40 Mbit/s 波特率編碼后的數據含有變位點的寬脈沖處共有8 個采樣落點,若考慮到信號波動產生的誤差,可采用式(1)、(2)計算得到。 實際檢測出采樣落點個數在7 ~9 之間即可判斷出待譯碼數據為40 Mbit/s波特率。

式中:N為理想信號在160 MHz 時鐘下的理論采樣落點數;Nmin、Nmax為考慮信號波動的最小、最大落點數。
根據公式(1)、(2)可計算出4 種常用波特率對應采樣落點的個數,如表1 所示。

表1 160 MHz 采樣時鐘下常用波特率的采樣落點數Table 1 The number of sampling points of common baud rate under 160 MHz sampling clock
正反曼碼的自適應可以解決由于不同廠家協議、不同硬件之間的差異引起曼碼編碼正反特性與標準不同而導致的通信失敗。 通常,曼碼編碼后的數據的正反特性不影響信號編碼時鐘等特征的動態掃描及恢復,在成功恢復出時鐘并完成波特率識別,利用該恢復時鐘解碼得到解碼后的數據后,需要對已恢復數據的正反性做出正確判斷。
根據前文所述,FT3 幀由幀頭“0x 0564”、有效負載組成,幀與幀之間填充盡可能多的空閑位。 實際應用中是通過識別幀頭來開始一幀數據提取的,如果數據的正反性發生翻轉,最顯著的特征是無法在正確的位置檢測到幀頭, 例如原始數據中若包含“0xFA9B”,經過翻轉后也將會被識別為幀頭,因此僅根據解碼后的數據是否包含幀頭并不能對數據的正反性做出正確的判斷。
數據的正反性發生翻轉的另外一個重要特征是所有恢復數據中的空閑位全部發生翻轉。 由于正確的空閑位為“1”,因此恢復的數據中將出現大量的“0”。 因此可以通過檢測恢復數據中“0”的個數來判斷是否發生數據正反性翻轉。
有效負載由8 個16 bit 的數據和一個16 bit 的CRC組成,若不考慮FT3 有效負載的實際傳輸值,假設傳輸的8 個16 bit 數據全部為0,根據CRC 的計算規則,此時的CRC 為0xFFFF,一個數據集最多出現128 個連續的“0”位。 因此,在首次識別幀頭的過程中,把數據當作曼碼處理,若檢測到有超過連續128 個“0”位的出現,即可對恢復數據進行翻轉,重新檢測幀頭。
一般情況下,信號在傳輸的過程中,其傳輸數據的曼碼正反不會再次發生翻轉,因此當檢測到空閑位后緊跟的幀頭后,即可將翻轉與否進行鎖定,認為其不再發生變化。
在完成波特率識別及正反曼碼鎖定后,即可對數據進行正確解碼,后續數據的恢復及CRC 校驗等操作可按照GB/T 20840.8—2007[13]描述的方式進行。
實驗過程中,采用IEC60044-8 專用測試儀模擬信號發送,對本文設計的波特率動態自適應解碼算法進行驗證。 模擬信號的報文類型選擇IEC60044-8 國網擴展幀,采樣頻率配置為40 點/周波。
驗證本文算法的解碼裝置使用基于HCM5000G系統的光接收板卡SORG,其中解碼芯片為國產化FPGA,實驗通過信號監視工具對數據接收后的解碼情況進行監視。 在信號監視圖中,receive_data 表示接收并解碼得到的傳輸數據,clk_gen 表示從傳輸數據中獲得的恢復時鐘,BAUD 表示自適應解碼算法自動識別到的波特率,Manchester_polarity 表示自適應解碼算法自動識別到的信號正反曼碼編碼方式。
整個實驗在保證光接收板卡不掉電不重啟的情況下,通過調整測試儀發出信號的光波特率,使用曼碼編碼,分別以5 Mbit/s、10 Mbit/s、20 Mbit/s和40 Mbit/s 波特率發送數據至光接收板卡SORG,使用專用工具監視SORG 板卡中FPGA 解碼得到的信號,如圖7 所示。 從圖7 中可以看出,使用本文提出的解碼算法,可以成功恢復時鐘信號并完成同步,能夠對不同波特率進行準確識別,實現數據的正確接收及解碼。

圖7 不同波特率下的監視信號Fig.7 Monitoring signals at different baud rates
調整測試儀,在40 Mbit/s 波特率下,通過對發送的光信號電平取反來模擬反曼碼編碼的情況,得到的信號解碼如圖8 所示。 從圖8 中可以看出,被監視信號Manchester_polarity 改變為高電平,并成功完成了數據接收,實現了對反曼碼編碼信號的準確識別及解碼。

圖8 40 Mbit/s 反曼碼編碼的監視信號Fig.8 Monitoring signals at 40 Mbit/s baud rates with negative Manchester encoding
經過測試,使用本文所述的解碼算法,得到的監視信號與預期結果吻合,實現了對不同波特率和正反曼碼編碼信號的動態自適應,完成了數據的正確接收及解碼。
柔性直流輸電控制保護系統的國產化替代中,對于電子式互感器合并單元的通信速度要求很高,同時需要考慮與原有系統的兼容性問題。 傳統的IEC60044-8 通信解碼算法,無法實現信號的自動識別及解碼,增加了國產化替代的難度。 為了解決這個問題,本文設計了一種波特率動態自適應算法,通過對輸入信號進行動態掃描,自動識別出信號的波特率并調整相應的參數,完成正反曼碼的識別及正確接收和解碼。
在實際工程中,使用本文設計的解碼算法可以實現信號即通即用,無需額外配置,可以解決柔性直流系統國產化替代中的兼容性問題,對于全面提升柔性直流輸電控制保護系統自主化、智能化程度,推進柔性直流系統國產化進程有重要意義,為我國直流輸電系統的安全運行提供堅強保障。