文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.172636
中文引用格式: 張琳,梅雪松,陳勇. 基于SoC FPGA的光伏電力通信管理機(jī)系統(tǒng)[J].電子技術(shù)應(yīng)用,2018,44(2):32-35,43.
英文引用格式: Zhang Lin,Mei Xuesong,Chen Yong. Photovoltaic power communication management system based on SoC FPGA[J]. Application of Electronic Technique,2018,44(2):32-35,43.
0 引言
光伏發(fā)電站利用大量的光伏電池板完成從光能到直流電能的轉(zhuǎn)換,再將直流電能使用逆變器轉(zhuǎn)換為50 Hz的交流電,輸送到電網(wǎng)中。整個(gè)光伏電站中電能控制及轉(zhuǎn)換設(shè)備需求量巨大。通信管理機(jī)作為電站中連接各個(gè)設(shè)備和電站中控臺(tái)的設(shè)備,通過(guò)控制平臺(tái)控制下行的Rtu設(shè)備,實(shí)現(xiàn)遙信、遙測(cè)、遙控等信息的采集,將消息反饋回調(diào)度中心,然后控制中心管理員通過(guò)對(duì)消息的處理分析,選擇將執(zhí)行的命令,達(dá)到遠(yuǎn)動(dòng)輸出調(diào)度命令的目標(biāo)[1-2]。
目前廣泛采用的通信管理機(jī)實(shí)現(xiàn)方案主要有3種:PowerPC處理器+串口擴(kuò)展芯片架構(gòu)、ARM處理器架構(gòu)、ARM處理器+FPGA架構(gòu)。其中:(1)PowerPC處理器+串口擴(kuò)展芯片架構(gòu)使用帶通信協(xié)處理器的PowerPC處理器作為系統(tǒng)的核心,使用串口通信擴(kuò)展芯片為PowerPC擴(kuò)展出最多16個(gè)串口[3]。所有數(shù)據(jù)處理和運(yùn)算全部由PowerPC處理器完成,在所有串口全部使用的情況下,整個(gè)系統(tǒng)運(yùn)行較為緩慢,數(shù)據(jù)的實(shí)時(shí)性難以保證。(2)使用單獨(dú)ARM處理器作為核心實(shí)現(xiàn)的通信管理機(jī)結(jié)構(gòu)簡(jiǎn)單,但是能夠支持的串口數(shù)量受到ARM處理器本身集成的串口數(shù)量限制,一般都不超過(guò)6個(gè)[4],無(wú)法滿足光伏電站中海量設(shè)備的需求。(3)ARM處理器+FPGA架構(gòu)利用FPGA完成串口擴(kuò)展,基于ARM處理器完成數(shù)據(jù)的處理和網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn),它本質(zhì)上和基于PowerPC+串口擴(kuò)展芯片的方案一致。該種方案增加了系統(tǒng)的復(fù)雜度,但單性能上提升并不明顯。以上3種方案都存在的問(wèn)題是系統(tǒng)有且僅有一個(gè)核心單元,一旦系統(tǒng)宕機(jī),就不得不重啟系統(tǒng),在系統(tǒng)未恢復(fù)的情況下,整個(gè)系統(tǒng)與電站中心控制臺(tái)處于完全斷開(kāi)的狀態(tài),無(wú)法接收中心控制臺(tái)的控制指令。
本文基于Intel全新的SoC FPGA芯片,將原本采用分立的FPGA和ARM處理器實(shí)現(xiàn)的系統(tǒng)使用單一的SoC FPGA芯片實(shí)現(xiàn),并在FPGA上搭建了冗余監(jiān)控系統(tǒng)。在提高系統(tǒng)性能的同時(shí),保證了系統(tǒng)的在線可恢復(fù)性。
1 系統(tǒng)建模
Intel Cyclone V SoC FPGA芯片5CSEMA4U23C6芯片是一款在單一芯片上集成了高性能的雙核ARM Cortex-A9 CPU和FPGA的SoC芯片,它是本系統(tǒng)的核心單元。
在本系統(tǒng)中,SoC FPGA芯片上的FPGA部分主要負(fù)責(zé)UART接口的擴(kuò)展以及MODBUS協(xié)議的加速。
在電力系統(tǒng)中,幾乎所有設(shè)備都支持標(biāo)準(zhǔn)的RS485接口,并使用MODBUS協(xié)議與其他設(shè)備進(jìn)行通信。光伏電站中,因?yàn)樵O(shè)備多、數(shù)據(jù)量大,通信管理機(jī)的一個(gè)RS485端口在同一時(shí)刻只能和一臺(tái)設(shè)備通信,因此導(dǎo)致數(shù)據(jù)傳輸速度出現(xiàn)瓶頸。為了解決這個(gè)問(wèn)題,往往采用多個(gè)MODBUS網(wǎng)絡(luò)端口來(lái)實(shí)現(xiàn)眾多設(shè)備的管理[2]。
眾多電力設(shè)備的數(shù)據(jù)在被通信管理機(jī)采集之后最終需要通過(guò)以太網(wǎng)接口與電站的中控后臺(tái)進(jìn)行數(shù)據(jù)交互,該數(shù)據(jù)交互主要通過(guò)IEC104協(xié)議實(shí)現(xiàn),而IEC104協(xié)議的實(shí)現(xiàn)是通過(guò)SoC FPGA中的硬件處理系統(tǒng)(Hard Process System,HPS)運(yùn)行成熟的Linux操作系統(tǒng)來(lái)完成的。
2 硬件電路方案設(shè)計(jì)
2.1 SoC FPGA 配置電路設(shè)計(jì)
為了使系統(tǒng)支持遠(yuǎn)程在線升級(jí),本系統(tǒng)設(shè)置SoC FPGA的FPGA部分接收HPS部分的配置數(shù)據(jù)。HPS部分可以接收串口或者網(wǎng)口傳輸?shù)腇PGA配置文件。運(yùn)行時(shí)SoC FPGA的HPS部分先啟動(dòng)并運(yùn)行Linux操作系統(tǒng),Linux操作系統(tǒng)啟動(dòng)完畢之后進(jìn)行FPGA部分的配置。如果需要遠(yuǎn)程更新FPGA的配置數(shù)據(jù),只需要通過(guò)網(wǎng)口將新的FPGA配置內(nèi)容傳輸?shù)讲僮飨到y(tǒng)所管理的磁盤(pán)上替換原來(lái)的配置文件,則系統(tǒng)下一次啟動(dòng)時(shí)就可以使用新的配置文件來(lái)配置FPGA。
2.2 SoC FPGA啟動(dòng)電路設(shè)計(jì)
SoC FPGA中的HPS部分運(yùn)行Linux操作系統(tǒng),HPS支持從SD卡、QSPI Flash、NAND Flash存儲(chǔ)器中啟動(dòng)。NAND Flash和QSPI Flash存儲(chǔ)器一般都采用焊接的方式安裝在電路板上,而SD卡則是可拆卸并單獨(dú)在PC上讀寫(xiě)的。在工業(yè)現(xiàn)場(chǎng),如果設(shè)備系統(tǒng)一旦損壞,需要重新燒錄系統(tǒng)時(shí),QSPI Flash和NAND Flash由于焊接在PCB板上,只能使用PC在線燒寫(xiě),而SD卡則可以采用預(yù)先燒錄好系統(tǒng)的SD卡進(jìn)行更換,因此節(jié)省了現(xiàn)場(chǎng)維修的工作量。
2.3 RS485接口電路設(shè)計(jì)
通信管理機(jī)作為一個(gè)工業(yè)設(shè)備,其通信接口可能承受各種沖擊,包括強(qiáng)共模電壓、高壓靜電、雷擊等[4],因此通信接口的防護(hù)措施至關(guān)重要。在本系統(tǒng)中,使用RSM3485模塊完成TTL電平到RS485電平的雙向轉(zhuǎn)換。RSM3485模塊實(shí)現(xiàn)標(biāo)準(zhǔn)RS485接口,具有ESD保護(hù)、短路或斷路失效保護(hù)功能,內(nèi)置120 kΩ上下拉電阻,雙絞線輸出,提供接觸情況下±4 kV和空氣放電情況下±8 kV的ESD放電功能,同時(shí)設(shè)計(jì)防雷電路,預(yù)防在雷擊的情況下?lián)p壞通信接口[5],該接口電路圖如圖1所示。
2.4 以太網(wǎng)接口方案設(shè)計(jì)
電力系統(tǒng)通信管理機(jī)都要求提供主備雙網(wǎng)口,以保證在其中一個(gè)網(wǎng)口出現(xiàn)故障時(shí),另一個(gè)網(wǎng)口能夠繼續(xù)傳輸必要數(shù)據(jù)。5CSEMA4U23C6芯片默認(rèn)提供了兩個(gè)千兆以太網(wǎng)MAC,但是這兩個(gè)MAC都是由HPS部分管理的,為了保證網(wǎng)口的可靠性,即使在ARM部分系統(tǒng)宕機(jī)的情況下,備用網(wǎng)口也能正常工作,設(shè)計(jì)時(shí)僅使用一個(gè)MAC層,并由HPS驅(qū)動(dòng),另一個(gè)網(wǎng)口使用NIOS II軟核控制集成的以太網(wǎng)通信芯片W5500實(shí)現(xiàn)。
W5500芯片是一個(gè)全硬件實(shí)現(xiàn)的單芯片TCP/IP協(xié)議芯片,支持8個(gè)Socket端口,使用非常方便可靠。使用NIOS II 控制W5500完成以太網(wǎng)傳輸,即使HPS工作異常,F(xiàn)PGA中的NIOS II CPU還可以繼續(xù)通過(guò)W5500進(jìn)行數(shù)據(jù)的收發(fā),保證備用網(wǎng)口的穩(wěn)定運(yùn)行。
3 SoC FPGA應(yīng)用架構(gòu)設(shè)計(jì)
由于SoC FPGA作為一種創(chuàng)新的架構(gòu),集成了FPGA和高性能HPS,因此在設(shè)計(jì)時(shí),可以充分利用HPS強(qiáng)大的數(shù)據(jù)處理能力、FPGA側(cè)靈活的定制特性以及HPS和FPGA之間高速通信橋,將各種工作根據(jù)其特性合理分配給FPGA或者HPS,通過(guò)兩者協(xié)作,以實(shí)現(xiàn)最高的性能。
FPGA側(cè)主要實(shí)現(xiàn)UART通信接口的擴(kuò)展和基于NIOS II 處理器的備用系統(tǒng)。HPS端主要實(shí)現(xiàn)大量數(shù)據(jù)處理和通信規(guī)約之間的轉(zhuǎn)換。圖2為SoC FPGA上的功能劃分框圖。
3.1 FPGA邏輯設(shè)計(jì)
FPGA側(cè)邏輯部分實(shí)現(xiàn)16個(gè)支持MODBUS幀自動(dòng)識(shí)別的UART通信控制單元,如圖3所示。每個(gè)單元由CRC校驗(yàn)邏輯、串口數(shù)據(jù)收發(fā)緩存、核心控制狀態(tài)機(jī)和MODBUS幀識(shí)別邏輯組成。各單元在核心控制狀態(tài)機(jī)的控制下自動(dòng)完成MODBUS數(shù)據(jù)幀的收發(fā)和數(shù)據(jù)校驗(yàn)碼的生成[6],并經(jīng)由Avalon MM Slave接口與HPS傳輸MODBUS接收和需要發(fā)送的數(shù)據(jù)。
圖4為支持MODBUS幀自動(dòng)識(shí)別的增強(qiáng)型UART通信控制單元接收數(shù)據(jù)時(shí)的工作狀態(tài)轉(zhuǎn)移圖。整個(gè)狀態(tài)機(jī)由空閑狀態(tài)(IDLE)、接收數(shù)據(jù)狀態(tài)(GET_DATA)、接收超時(shí)狀態(tài)(TIMEOUT)、接收字節(jié)數(shù)據(jù)完成狀態(tài)(GET_BYTE)、幀傳輸完成狀態(tài)(FRAME_DONE)組成。
當(dāng)主機(jī)發(fā)出MODBUS請(qǐng)求幀后,本模塊進(jìn)入接收數(shù)據(jù)狀態(tài)(GET_DATA),每接收到一個(gè)字節(jié),就跳轉(zhuǎn)進(jìn)入接收字節(jié)完成狀態(tài)(GET_BYTE),當(dāng)幀結(jié)束判定信號(hào)有效時(shí),表明一幀數(shù)據(jù)接收完成,此時(shí)進(jìn)入幀接收完成狀態(tài)。通過(guò)比對(duì)接收到的數(shù)據(jù)幀中CRC數(shù)據(jù)字段和FPGA中CRC校驗(yàn)單元對(duì)該幀產(chǎn)生的校驗(yàn)數(shù)據(jù),確定當(dāng)前幀是否正確。然后通過(guò)FPGA與HPS互聯(lián)橋向HPS發(fā)出中斷請(qǐng)求,并報(bào)告當(dāng)前幀的校驗(yàn)結(jié)果,HPS側(cè)的Linux驅(qū)動(dòng)程序則會(huì)根據(jù)校驗(yàn)結(jié)果完成相應(yīng)的處理,如果校驗(yàn)正確,則讀取該幀數(shù)據(jù)并遞交給上層MODBUS協(xié)議層進(jìn)行進(jìn)一步解析處理,如果該幀錯(cuò)誤,則丟棄該幀,并進(jìn)入錯(cuò)誤處理程序。
3.2 Linux軟件設(shè)計(jì)
SoC FPGA芯片中的HPS運(yùn)行Linux操作系統(tǒng),在Linux系統(tǒng)上運(yùn)行通信管理機(jī)的應(yīng)用程序。該應(yīng)用程序主要包括三大部分,分別為MODBUS協(xié)議主站、IEC104協(xié)議從站、MODBUS和IEC104協(xié)議間規(guī)約轉(zhuǎn)換程序。其中,MODBUS協(xié)議主站運(yùn)行開(kāi)源的Libmodbus協(xié)議棧,完成MODBUS指令和數(shù)據(jù)的收發(fā)。
Libmodbus協(xié)議棧是一個(gè)免費(fèi)開(kāi)源的MODBUS協(xié)議棧,支持MODBUS協(xié)議主站和從站功能。由于本系統(tǒng)在FPGA側(cè)使用硬件邏輯電路已經(jīng)實(shí)現(xiàn)了MODBUS協(xié)議的部分功能,如幀結(jié)束判定、CRC校驗(yàn)等。因此,對(duì)Libmodbus協(xié)議棧進(jìn)行了一定的刪減優(yōu)化,去掉了底層數(shù)據(jù)幀接收和校驗(yàn)的部分,僅使用其指令和數(shù)據(jù)解析部分,這也是本系統(tǒng)的優(yōu)勢(shì),通過(guò)FPGA側(cè)硬件實(shí)現(xiàn)MODBUS協(xié)議底層內(nèi)容,降低了處理器的工作量,使得處理器能夠輕松完成對(duì)多達(dá)16個(gè)基于MODBUS協(xié)議的端口的支持。
為了方便實(shí)現(xiàn)對(duì)FPGA側(cè)的16端口個(gè)MODBUS加速器的控制,在Linux側(cè)單獨(dú)開(kāi)設(shè)一個(gè)進(jìn)程用于16端口MODBUS加速器的控制,當(dāng)該任務(wù)被調(diào)度并得到執(zhí)行機(jī)會(huì)后,開(kāi)始依次查詢當(dāng)前端口的狀態(tài),然后根據(jù)得到的端口狀態(tài)執(zhí)行相應(yīng)的處理代碼。該程序流程如圖5所示。
空閑態(tài):當(dāng)查詢到一個(gè)端口的狀態(tài)為空閑時(shí),表明此端口已經(jīng)正確地完成了一輪數(shù)據(jù)收發(fā),在新的通信命令到來(lái)之前,該端口將處于空閑狀態(tài),即不需要發(fā)送數(shù)據(jù),也不需要接收數(shù)據(jù),MODBUS端口是處于空閑狀態(tài)的。
接收成功:當(dāng)查詢到某個(gè)端口成功接收到返回的數(shù)據(jù)后,則開(kāi)始進(jìn)行接收數(shù)據(jù)的處理工作,完成之后,進(jìn)入下一個(gè)端口的狀態(tài)查詢工作。
接收超時(shí):當(dāng)查詢到某個(gè)端口在設(shè)定的響應(yīng)時(shí)間內(nèi)無(wú)響應(yīng)時(shí),則返回接收超時(shí)狀態(tài)。若檢測(cè)到超時(shí)狀態(tài),系統(tǒng)開(kāi)始進(jìn)行超時(shí)處理工作。接收超時(shí)處理完成后,進(jìn)入下一個(gè)端口的狀態(tài)查詢工作。
接收錯(cuò)誤:當(dāng)查詢到某個(gè)端口接收數(shù)據(jù)出錯(cuò)時(shí),則進(jìn)行接收錯(cuò)誤處理工作。當(dāng)接收錯(cuò)誤處理完成后,進(jìn)入下一個(gè)端口的狀態(tài)查詢工作。該部分任務(wù)代碼框架如下所示:
for(i=0;i<=15;i++)
{
port_state=mdp_state_read(port_num);//讀取指定端口狀態(tài)
switch(port_state)
{
case NO_STATE:break;//無(wú)就緒端口
case RX_DONE://接收數(shù)據(jù)成功
…//接收到數(shù)據(jù)處理代碼模塊
break;
case RX_TIMEOUT://接收超時(shí)
…//接收超時(shí)端口處理代碼模塊
break;
case RX_ERROR://接收錯(cuò)誤
…//接收錯(cuò)誤端口處理代碼模塊
break;
default:
printf("default %d\n\n",port_num);//默認(rèn)為讀錯(cuò)
誤處理,將狀態(tài)寄存器設(shè)置為錯(cuò)誤標(biāo)志
FPGA_WR16((port_num<<8 | 128), 1);
}//讀到第16個(gè)端口后,回到0號(hào)口讀取
if(port_num == 15) port_num = 0;
else port_num ++; //端口號(hào)自加1
}
usleep(30000); //釋放CPU權(quán)限
3.3 NIOS II備用系統(tǒng)軟件設(shè)計(jì)
通常狀態(tài)下NIOS II CPU處于待機(jī)狀態(tài),若NIOS II CPU在設(shè)定的時(shí)間內(nèi)沒(méi)有接收到狀態(tài)消息,則表明HPS系統(tǒng)側(cè)軟件系統(tǒng)崩潰,NIOS II CPU再通過(guò)和HPS互聯(lián)的狀態(tài)指示信號(hào)確認(rèn)當(dāng)前是操作系統(tǒng)宕機(jī)或應(yīng)用程序異常。如果是應(yīng)用程序異常,則觸發(fā)Linux側(cè)安全監(jiān)視軟件重啟應(yīng)用程序;如果是操作系統(tǒng)異常,則啟動(dòng)備用網(wǎng)口上報(bào)當(dāng)前系統(tǒng)故障信息到電站中心控制臺(tái),并通過(guò)硬件復(fù)位來(lái)重啟HPS。圖6為NIOS II 備用系統(tǒng)的程序流程圖。
4 系統(tǒng)性能分析
表1為以16個(gè)RS485端口,每個(gè)端口每500 ms完成一次對(duì)總線上設(shè)備的數(shù)據(jù)讀取,每次通信數(shù)據(jù)幀長(zhǎng)度平均為64 B為例,分析1 s內(nèi)本系統(tǒng)方案(簡(jiǎn)稱SoC FPGA方案)和PowerPC+串口擴(kuò)展芯片ST16C2550方案(簡(jiǎn)稱PowerPC方案)在串口芯片數(shù)量、CPU的CRC運(yùn)算事務(wù)、CPU處理中斷次數(shù)、備用網(wǎng)口的獨(dú)立性等幾個(gè)方面的差異。
5 結(jié)論
本文設(shè)計(jì)的基于Intel SoC FPGA的光伏電力通信管理機(jī)系統(tǒng)充分發(fā)揮了FPGA在處理多路并行數(shù)據(jù)通信方面的優(yōu)勢(shì),極大地降低了傳統(tǒng)方案中嵌入式處理器在管理通信事務(wù)時(shí)的中斷開(kāi)銷,并提升了單個(gè)系統(tǒng)中支持MODBUS協(xié)議的RS485端口總量,能有效簡(jiǎn)化光伏電站的通信網(wǎng)絡(luò)布局布線。同時(shí),由于FPGA的可編程特性,在不改變硬件電路的前提下,通過(guò)對(duì)FPGA重新編程的方式,實(shí)現(xiàn)了系統(tǒng)的升級(jí),解決了光伏電力系統(tǒng)中多設(shè)備、大數(shù)據(jù)量的難題,增加了系統(tǒng)的應(yīng)用范圍。
參考文獻(xiàn)
[1] 李樹(shù)奇,李國(guó)營(yíng),林俊杰.通信管理機(jī)在變電站的應(yīng)用[J].信息通信,2011(6):188,190.
[2] 姚志璋,張羽翹,吳敏.光伏電站中的通信技術(shù)[J].農(nóng)村電氣化,2014(7):51-53.
[3] 何寶林,李明剛,劉波.MPC850在通信管理器的應(yīng)用[J].現(xiàn)代電子技術(shù),2005,28(1):71-73.
[4] 路小俊,吳在軍,鄭建勇,等.基于ARM平臺(tái)及嵌入式實(shí)時(shí)操作系統(tǒng)的通信管理機(jī)[J].電力自動(dòng)化設(shè)備,2005,25(5):46-49.
[5] 魯錦鋒,王蒙,張婷,等.光伏匯流箱中RS485通訊抗干擾方法分析[J].電子產(chǎn)品世界,2016,23(11):57-58.
[6] 于正林,張龍,黃勇.Modbus通信協(xié)議的FPGA實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2010,33(11):203-207.