王長(zhǎng)清,趙天恩,李 彥,江長(zhǎng)青,蔡 菠,何 嶸
(南京南瑞繼保電氣有限公司,江蘇 南京 211102)
電力系統(tǒng)自動(dòng)化設(shè)備配置時(shí)鐘同步系統(tǒng),為不同的設(shè)備提供了時(shí)鐘同步所需的時(shí)鐘源。自動(dòng)化設(shè)備多采用分布式系統(tǒng)架構(gòu),設(shè)備內(nèi)模塊之間也要進(jìn)行時(shí)鐘同步。自動(dòng)化設(shè)備和模塊的時(shí)鐘同步,便于進(jìn)行信息綜合[1];同時(shí),只有采用時(shí)鐘同步手段,才能滿足事件順序記錄(sequence of event,SOE)時(shí)標(biāo)誤差不大于1 ms的要求[2-3]。尤其在系統(tǒng)發(fā)生故障時(shí),SOE時(shí)標(biāo)的統(tǒng)一、準(zhǔn)確,有利于事故原因分析。
時(shí)鐘同步裝置接收北斗/GPS衛(wèi)星發(fā)送的授時(shí)信號(hào),處理后向自動(dòng)化設(shè)備提供時(shí)鐘同步信號(hào)。時(shí)鐘同步裝置輸出同步信號(hào)的方式主要有IRIG-B、IEEE 1588、秒脈沖(pulse per second,PPS)、分脈沖(pulse per minute,PPM)、簡(jiǎn)單網(wǎng)絡(luò)時(shí)間協(xié)議(simple network time protocol,SNTP)、IEC 103報(bào)文等[4]。
本文主要研究了分布式系統(tǒng)內(nèi)的串行通信對(duì)時(shí)設(shè)計(jì)。文獻(xiàn)[5]介紹了一種采用串口對(duì)時(shí)和脈沖對(duì)時(shí)結(jié)合的方式。串口報(bào)文連接線負(fù)責(zé)設(shè)備日歷時(shí)間的對(duì)時(shí)。PPS連接線下發(fā)同步信息。文獻(xiàn)[6]介紹了一種采用串口分時(shí)復(fù)用的方式。串口連接線先下發(fā)日歷時(shí)間,在整秒時(shí)刻再下發(fā)PPS同步碼。以上兩種方法均能實(shí)現(xiàn)較精確的對(duì)時(shí)。但方法一串口和脈沖對(duì)時(shí)線分開(kāi),受限于布線數(shù)目;方法二在中斷中響應(yīng)整秒同步碼,中斷響應(yīng)延時(shí)不確定,影響對(duì)時(shí)精度和總線復(fù)用。本文設(shè)計(jì)的方案彌補(bǔ)了上述兩種方法的缺陷。
系統(tǒng)包含主控模塊、高速串行通信總線以及掛接在高速串行通信總線上的輔控模塊。主控模塊借助現(xiàn)場(chǎng)可編程門陣列(field programmable gate array,F(xiàn)PGA)實(shí)現(xiàn)串行通信,在高速串行通信總線上傳輸數(shù)據(jù)通信和對(duì)時(shí)報(bào)文。數(shù)據(jù)通信報(bào)文采用主從輪詢方式,輔控模塊接收到該報(bào)文后回復(fù)報(bào)文;對(duì)時(shí)報(bào)文采用廣播方式,輔控模塊接收到該報(bào)文后只進(jìn)行對(duì)時(shí)處理流程,不回復(fù)報(bào)文。
本文設(shè)計(jì)的分布式系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 分布式系統(tǒng)結(jié)構(gòu)圖Fig.1 Structure of the distributed system
主控模塊軟件劃分為管理、控制算法、對(duì)時(shí)、串行通信等模塊。本文僅闡述與對(duì)時(shí)相關(guān)的內(nèi)容。主控模塊內(nèi)部通過(guò)共享內(nèi)存的方式進(jìn)行數(shù)據(jù)交換。共享內(nèi)存分為循環(huán)報(bào)文緩存區(qū)和管理內(nèi)存區(qū)。
一方面,主控模塊集成的FPGA通過(guò)IRIG-B方式從北斗/GPS授時(shí)裝置接收授時(shí)信息,并將解碼后的信息和整秒對(duì)應(yīng)的時(shí)鐘節(jié)拍(TICK)通過(guò)管理內(nèi)存區(qū)共享給對(duì)時(shí)模塊。對(duì)時(shí)模塊負(fù)責(zé)守時(shí),并將下一個(gè)整秒對(duì)應(yīng)的TICK值和這一秒對(duì)應(yīng)的TICK值通過(guò)管理內(nèi)存區(qū)共享給FPGA,由FPGA完成對(duì)時(shí)報(bào)文組幀和發(fā)送。
另一方面,F(xiàn)PGA接收到串行通信報(bào)文后,使用直接內(nèi)存訪問(wèn)(direct memory access,DMA)方式推送到循環(huán)報(bào)文緩沖區(qū),更新管理內(nèi)存區(qū)報(bào)文索引并通知其他模塊處理。
主控模塊硬件如圖2所示。
圖2 主控模塊硬件框圖Fig.2 Hardware block diagram of the main control module
目前,串行通信總線較為常見(jiàn)的實(shí)現(xiàn)方式有控制器局域網(wǎng)(controller area network,CAN)和RS-485總線。本文高速串行通信總線采用RS-485。
主控模塊通過(guò)串行通信總線與輔控模塊進(jìn)行通信。通信報(bào)文包括短周期的變量交換報(bào)文、長(zhǎng)周期的對(duì)時(shí)報(bào)文,突發(fā)的調(diào)試下載報(bào)文等。短周期報(bào)文是實(shí)時(shí)報(bào)文,與主控模塊任務(wù)周期相關(guān)。長(zhǎng)周期報(bào)文和突發(fā)報(bào)文是非實(shí)時(shí)報(bào)文[7]。對(duì)時(shí)報(bào)文數(shù)據(jù)通信報(bào)文分時(shí)復(fù)用該通信總線,簡(jiǎn)化了系統(tǒng)硬件設(shè)計(jì)和布線成本,有利于現(xiàn)場(chǎng)施工和問(wèn)題排查。
輔控模塊硬件采用微控制單元(microcontroller unit,MCU)芯片原生通用異步收發(fā)器(universal asynchronous receiver/transmitter,UART)實(shí)現(xiàn)高速串行通信。系統(tǒng)設(shè)計(jì)DMA方式完成報(bào)文收發(fā),從而有效地減少了MCU頻繁收發(fā)報(bào)文的耗時(shí)[8]。
輔控模塊MCU在UART接收超時(shí)中斷中處理接收到的串口報(bào)文,在UART發(fā)送完成中斷中進(jìn)行RS-485收發(fā)方向控制,保證了收發(fā)控制的實(shí)時(shí)性。硬件上,MCU外部有RS-485總線驅(qū)動(dòng)控制電路。這使得MCU必須周期性地向驅(qū)動(dòng)控制電路發(fā)送脈沖才能發(fā)出報(bào)文,否則只能接收。軟件上,MCU增加收發(fā)方向防誤控制。當(dāng)超過(guò)任務(wù)周期沒(méi)有收到報(bào)文或者報(bào)文發(fā)送超時(shí),則將收發(fā)方向強(qiáng)制為接收。這可以防止由于MCU軟件跑飛或者收發(fā)方向控制失敗導(dǎo)致高速串行總線掛死,增強(qiáng)了通信總線的健壯性。
輔控模塊通過(guò)MCU自帶捕獲單元獲取對(duì)時(shí)報(bào)文起始時(shí)刻。當(dāng)MCU不具備捕獲功能時(shí),也可外擴(kuò)FPGA處理高速串行通信報(bào)文并記錄報(bào)文起始時(shí)刻。
輔控模塊硬件如圖3所示。
圖3 輔控模塊硬件框圖Fig.3 Hardware block diagram of the auxiliary control module
為了提高對(duì)時(shí)精度,主控模塊串行通信模塊由FPGA實(shí)現(xiàn)。雖然對(duì)時(shí)報(bào)文與數(shù)據(jù)通信分時(shí)復(fù)用同一總線,但由于主控模塊發(fā)出的對(duì)時(shí)報(bào)文中包含發(fā)送起始時(shí)刻對(duì)應(yīng)的精確時(shí)間戳,所以主控模塊下發(fā)對(duì)時(shí)報(bào)文時(shí)刻不受整秒或者固定時(shí)間間隔限制??紤]到輔控模塊的守時(shí)精度,主控模塊下發(fā)廣播對(duì)時(shí)報(bào)文的時(shí)間間隔一般在10 s以內(nèi)。本系統(tǒng)中主控模塊廣播下發(fā)對(duì)時(shí)報(bào)文,將時(shí)鐘同步功能集成于通信通道的空閑時(shí)隙中,每隔1 s左右下發(fā)一次??紤]輔控模塊守時(shí)進(jìn)秒機(jī)制,下發(fā)對(duì)時(shí)報(bào)文時(shí)刻一般在該秒的100~900 ms之間。
輔控模塊接收主控模塊下發(fā)的對(duì)時(shí)報(bào)文,并記錄接收?qǐng)?bào)文時(shí)刻對(duì)應(yīng)的輔控模塊內(nèi)部時(shí)鐘。由于輔控模塊采用硬件捕獲報(bào)文起始時(shí)刻,故捕獲時(shí)刻不受關(guān)中斷等程序執(zhí)行的影響。
該報(bào)文時(shí)間戳信息,除串行通信模塊發(fā)出報(bào)文起始時(shí)刻對(duì)應(yīng)協(xié)調(diào)世界時(shí)(coordinated universal time,UTC)秒外,還包含發(fā)出報(bào)文時(shí)刻的納秒時(shí)間,以及閏秒標(biāo)志等。該報(bào)文中的納秒時(shí)間是主控模塊FPGA在對(duì)時(shí)報(bào)文發(fā)出時(shí)實(shí)時(shí)打上的時(shí)間戳,用于減少發(fā)送處理產(chǎn)生的誤差。
主控模塊下發(fā)的對(duì)時(shí)報(bào)文幀格式如圖4所示。
圖4 對(duì)時(shí)報(bào)文幀格式Fig.4 Frame format of the time synchronization message
輔控模塊接收對(duì)時(shí)報(bào)文處理流程如圖5所示。
圖5 對(duì)時(shí)報(bào)文處理流程圖Fig.5 Process flow of time synchronization message
輔控模塊接收對(duì)時(shí)報(bào)文并記錄報(bào)文起始到達(dá)時(shí)刻,并對(duì)接收?qǐng)?bào)文的時(shí)刻的有效性進(jìn)行校驗(yàn)。有效性校驗(yàn)包含絕對(duì)偏差和相對(duì)偏差兩部分校驗(yàn)。絕對(duì)偏差是相鄰2個(gè)對(duì)時(shí)報(bào)文攜帶時(shí)間戳的時(shí)間差與輔控模塊內(nèi)部節(jié)拍對(duì)應(yīng)的時(shí)間差;相對(duì)偏差是2個(gè)對(duì)時(shí)報(bào)文的時(shí)間差歸算到1 s后,與歷史記錄的偏差。當(dāng)絕對(duì)偏差超過(guò)一定范圍時(shí),認(rèn)為時(shí)鐘發(fā)生跳變或受到干擾,偏差范圍取主控模塊和輔控模塊晶振偏差之和,本系統(tǒng)取100 μs。當(dāng)相對(duì)偏差超過(guò)一定范圍時(shí),認(rèn)為時(shí)鐘受到干擾,本系統(tǒng)取5 μs。當(dāng)對(duì)時(shí)報(bào)文受到干擾時(shí),該對(duì)時(shí)報(bào)文將被丟棄;當(dāng)發(fā)生時(shí)鐘跳變時(shí),對(duì)時(shí)報(bào)文進(jìn)行3次有效性確認(rèn)。
根據(jù)相鄰2幀報(bào)文中時(shí)間戳差值和輔控模塊記錄的TICK差值,計(jì)算1 s對(duì)應(yīng)輔控模塊的TICK差值T1s。其中,TICK即輔控模塊系統(tǒng)時(shí)鐘節(jié)拍??紤]到晶振抖動(dòng)和上升沿捕獲等誤差,根據(jù)歷史記錄T1s,采用卡爾曼濾波算法計(jì)算出平均Tavg1s值[9-10]。結(jié)合主控模塊下發(fā)時(shí)刻、輔控模塊接收時(shí)刻和傳輸延時(shí),即可計(jì)算輔控模塊本地時(shí)刻。輔控模塊在定時(shí)中斷中對(duì)本地時(shí)鐘進(jìn)行維護(hù),進(jìn)入中斷時(shí)讀取當(dāng)前TICK值,再根據(jù)Tavg1s對(duì)TICK差值進(jìn)行修正,獲取每次進(jìn)中斷的絕對(duì)時(shí)刻,從而進(jìn)行守時(shí)管理。
串行通信網(wǎng)絡(luò)一般沒(méi)有轉(zhuǎn)發(fā)環(huán)節(jié),報(bào)文發(fā)送傳輸延時(shí)可以根據(jù)理論值推算。由于通信線長(zhǎng)度改變?cè)斐蓚鬏斞訒r(shí)的影響在幾個(gè)納秒級(jí)別,可以忽略不計(jì)。
當(dāng)具有轉(zhuǎn)發(fā)環(huán)節(jié)時(shí),可以根據(jù)以下方法獲取報(bào)文傳輸延時(shí)。主控模塊向輔控模塊發(fā)送報(bào)文包含時(shí)間戳T1。輔控模塊接收到報(bào)文的時(shí)間戳為T2。輔控模塊回復(fù)報(bào)文的時(shí)間戳為T3。主控模塊收到回復(fù)報(bào)文的時(shí)間戳為T4。則報(bào)文發(fā)送傳輸延時(shí)d為[11]:
(1)
本文主要分析圖1中沒(méi)有轉(zhuǎn)發(fā)環(huán)節(jié)的串行通信網(wǎng)絡(luò)。為了提高系統(tǒng)對(duì)時(shí)的精確度和可靠度,輔控模塊需要補(bǔ)償報(bào)文發(fā)送傳輸延時(shí)和晶振偏差引起的時(shí)間差。輔控模塊根據(jù)主控模塊對(duì)時(shí)報(bào)文時(shí)間戳、報(bào)文發(fā)送傳輸延時(shí)和晶振偏差,推算輔控模塊與主控模塊時(shí)鐘源的精確時(shí)間差,進(jìn)而推算本地精確時(shí)間[12]。具體步驟如下。
①主控模塊FPGA發(fā)出廣播對(duì)時(shí)報(bào)文的時(shí)刻為S0、S1,...,Sn。輔控模塊接收對(duì)時(shí)報(bào)文對(duì)應(yīng)的輔控模塊內(nèi)部節(jié)拍依次為I0,I1,...,In。設(shè)輔控模塊內(nèi)部時(shí)鐘源晶振理論頻率為FS、實(shí)際內(nèi)部時(shí)鐘源晶振頻率為FI,則輔控模塊內(nèi)部節(jié)拍到實(shí)際時(shí)鐘的轉(zhuǎn)換系數(shù)k為:
(2)
式中:n=1,2,...,N。
②使用相鄰2次對(duì)時(shí)報(bào)文計(jì)算k值,會(huì)出現(xiàn)一定抖動(dòng)。因此,本文采用上文提及的濾波算法進(jìn)行計(jì)算。
③采用輔控模塊理論晶振頻率時(shí),時(shí)間上距離輔控模塊接收時(shí)刻In一定的時(shí)間間隔t。由于晶振偏差,對(duì)應(yīng)實(shí)際時(shí)間間隔為:
t′=k×t
(3)
④若不考慮報(bào)文發(fā)送傳輸延時(shí)d,則對(duì)于主控模塊當(dāng)前時(shí)刻S,對(duì)應(yīng)輔控模塊的當(dāng)前節(jié)拍I。則輔控模塊的時(shí)刻為:
(4)
若考慮報(bào)文發(fā)送傳輸延時(shí)d,則對(duì)于主控模塊當(dāng)前時(shí)刻S,對(duì)應(yīng)輔控模塊的當(dāng)前節(jié)拍I,輔控模塊的時(shí)刻為:
(5)
結(jié)合上述過(guò)程,本系統(tǒng)產(chǎn)生誤差主要在于以下幾個(gè)方面。
①主控模塊發(fā)送對(duì)時(shí)報(bào)文時(shí),報(bào)文中的納秒精度,誤差一般在百納秒級(jí)別。該部分誤差一方面由FPGA硬件邏輯電路延時(shí)引起,另一方面由FPGA時(shí)鐘精度和時(shí)鐘顆粒度決定。
②線路傳輸延時(shí),由傳輸介質(zhì)決定,對(duì)于本文所述分布式系統(tǒng)內(nèi)一般在幾個(gè)納秒級(jí)別。
③輔控模塊捕獲報(bào)文誤差,受捕獲邊沿的波形質(zhì)量和MCU捕獲時(shí)刻精度影響,一般在幾十納秒級(jí)別。
綜合以上誤差,采用該方案后,輔控模塊的對(duì)時(shí)精度可以達(dá)到微秒級(jí)別。采用實(shí)際系統(tǒng),在輔控模塊中斷檢測(cè)整秒邊沿并輸出波形,與時(shí)鐘同步裝置秒脈沖輸出對(duì)比,實(shí)測(cè)對(duì)時(shí)偏差在±2.5 μs以內(nèi)。該測(cè)試包括中斷響應(yīng)引起的誤差,已完全滿足系統(tǒng)對(duì)時(shí)精度要求。
對(duì)時(shí)精度測(cè)試結(jié)果如圖6所示。
圖6 對(duì)時(shí)精度測(cè)試結(jié)果Fig.6 Accuracy test results of time synchronization
本文介紹了一種基于串行通信的對(duì)時(shí)設(shè)計(jì),將時(shí)鐘同步功能集成于通信通道的空閑時(shí)隙中,布線方便、性能可靠。采用該對(duì)時(shí)設(shè)計(jì)的分布式系統(tǒng)已應(yīng)用在光伏發(fā)電和電池管理領(lǐng)域,SOE精度經(jīng)測(cè)試完全滿足現(xiàn)場(chǎng)要求,在多個(gè)工程現(xiàn)場(chǎng)投入運(yùn)行,得到良好的應(yīng)用效果。