??? 摘 要: 饋線終端單元(FTU)是配電自動(dòng)化系統(tǒng)中的重要組成部分,以DSP為核心構(gòu)成的FTU具有運(yùn)算速度快和精度高等特點(diǎn),,而DNP3.0則是FTU與配網(wǎng)主站通信的主流規(guī)約。討論了在DSP平臺(tái)上實(shí)現(xiàn)DNP3.0的特殊性,介紹了DSP片內(nèi)異步串口" title="串口">串口的使用方法,,給出了程序的主要流程圖和數(shù)據(jù)結(jié)構(gòu)以及涉及串行通信的C語言源碼,。
??? 關(guān)鍵詞: 分布式網(wǎng)絡(luò)規(guī)約? 數(shù)字信號(hào)處理器?? 配電自動(dòng)化? 饋線終端單元? 異步串行口
?
??? DNP(Distributed Network Protocol,分布式網(wǎng)絡(luò)規(guī)約)是HARRIS公司推出的一種遠(yuǎn)動(dòng)通信規(guī)約" title="通信規(guī)約">通信規(guī)約,,是目前電力系統(tǒng)自動(dòng)化產(chǎn)品市場上的一種主流通信規(guī)約,。它既可作為FTU(Feeder Terminal Unit,饋線終端單元)與配網(wǎng)主站之間的規(guī)約,,又可作為RTU與調(diào)度主站之間的規(guī)約,。由于目前我國的大部分配電自動(dòng)化(DA)產(chǎn)品都支持DNP3.0,為使產(chǎn)品更具兼容性和標(biāo)準(zhǔn)性,,F(xiàn)TU有必要采用DNP3.0作為其與配網(wǎng)主站之間的通信規(guī)約,。
??? FTU作為配電自動(dòng)化系統(tǒng)(DAS)中重要的組成部分,除擔(dān)負(fù)最基本的測量與控制任務(wù)外,,還要與中心子站或主站進(jìn)行通信,。某些FTU還具有微機(jī)保護(hù)功能,故而其核心部分一般采用高檔次的16位或32位單片機(jī)。但在交流采樣的情況下,,單片機(jī)計(jì)算U,、I有效值以及P、Q等參數(shù)往往力不從心,,導(dǎo)致實(shí)時(shí)性較差,。雖然可以通過采用主-從結(jié)構(gòu)來解決,但這樣無疑要增加成本,。DSP(數(shù)字信號(hào)處理器)恰恰以數(shù)學(xué)計(jì)算(如快速傅立葉變換)而見長,,雖然它的控制功能遜于單片機(jī),但由于FTU只負(fù)責(zé)監(jiān)控一路柱上開關(guān),,故而在這種測控量不多的情況下,,如果不需要就地保護(hù)功能,,一片DSP還是完全能夠勝任的。TMS320F206(以下簡稱F206)是TI公司生產(chǎn)的TMS320C2000系列中的一款主流DSP,,它屬于16位定點(diǎn)DSP,,可應(yīng)用于電機(jī)控制以及工業(yè)自動(dòng)化和電力行業(yè)中,價(jià)格接近普通16位單片機(jī),。FTU以一片TMS320F206為核心,,并輔以A/D轉(zhuǎn)換器等外圍器件,即可完成測控,、參數(shù)計(jì)算和通信等任務(wù),。
??? 由于DNP3.0幀格式中的基本單元是8位整型數(shù)(BYTE字節(jié)),而F206中的數(shù)據(jù)總線是16位的,,尋址時(shí)是以字(WORD)為單位,,而且TI提供的C語言中也沒有8位整型數(shù),這樣在F206平臺(tái)上實(shí)現(xiàn)DNP3.0時(shí)就存在一個(gè)8位/16位轉(zhuǎn)換的問題,。另外,,大多數(shù)DSP利用外接UART(通用異步收發(fā)器)來實(shí)現(xiàn)串行通信。本文著重討論如何在保證程序清晰和高效的前提下利用F206片內(nèi)異步串口實(shí)現(xiàn)以DNP3.0為通信協(xié)議的串行通信,。
1 DNP3.0簡介[4~5]
??? DNP3.0為純軟件的通信協(xié)議,,其結(jié)構(gòu)如圖1所示。它基于IEC 870-5標(biāo)準(zhǔn),,采用了ISO七層模型中的三層:物理層,、數(shù)據(jù)鏈路層" title="鏈路層">鏈路層和應(yīng)用層" title="應(yīng)用層">應(yīng)用層,其結(jié)構(gòu)為增強(qiáng)協(xié)議結(jié)構(gòu),。這種分層結(jié)構(gòu)使得數(shù)據(jù)傳送的可靠性大大提高,,同時(shí)也便于軟件編程的模塊化。物理層一般采用普通的RS232或RS485,;鏈路層采用CRC校驗(yàn),;為了滿足較長數(shù)據(jù)包的傳送,又增加了一個(gè)偽傳輸層,。發(fā)送數(shù)據(jù)時(shí)它可以將較長的應(yīng)用層報(bào)文拆分為多個(gè)短幀然后多幀傳送,,反之,接收時(shí)將短幀組裝成完整的應(yīng)用層報(bào)文,。
?
2 系統(tǒng)硬件
2.1結(jié)構(gòu)框圖
?? ?硬件結(jié)構(gòu)框圖如圖2所示,。
?
2.2?F206片內(nèi)異步串行口介紹[2~3]
??? F206片內(nèi)具有一個(gè)8位全雙工ASP(Asynchronous Serial Port,異步串行口),,可以完成并行數(shù)據(jù)與串行數(shù)據(jù)的相互轉(zhuǎn)換,,并可以產(chǎn)生可屏蔽硬件中斷TXRXINT,。有關(guān)的外部引腳共6個(gè):發(fā)送端TX,、接收端RX,、IO0、IO1,、IO2,、IO3,一般情況下只使用TX和RX就足夠了(另外還有一根地線)。
??? 與編程有關(guān)的片內(nèi)16位寄存器共4個(gè):異步數(shù)據(jù)發(fā)送和接收寄存器ADTR,、異步串口控制寄存器ASPCR,、I/O" title="I/O">I/O狀態(tài)寄存器IOSR、波特率除數(shù)寄存器BRD,,均映射至I/O空間,。ADTR為讀/寫寄存器,高8位恒為0,,向ADTR寫數(shù)據(jù)即可啟動(dòng)串口發(fā)送,。ASPCR用來控制串口的工作方式,BIT8為發(fā)送中斷屏蔽TIM,,BIT7為接收中斷屏蔽RIM, BIT6為停止位選擇STB,。IOSR反映串口的工作狀態(tài),BIT11為發(fā)送寄存器空指示位THRE,,BIT8為接收數(shù)據(jù)準(zhǔn)備就緒位DR,。BRD用作波特率發(fā)生器,BRD值=CLKOUT1頻率/(16×波特率),。
?? ?值得注意的是,,F(xiàn)206片內(nèi)串口與通用異步串口略有不同。它只支持最常見的1位起始位,、8位數(shù)據(jù)位,、1或2位停止位。另外幾種特殊格式不予支持,,如6或7位數(shù)據(jù)位,、1.5位停止位等。為適應(yīng)現(xiàn)場各種可能的通信方式,,還應(yīng)當(dāng)擴(kuò)展一路以上的通用異步收發(fā)器(UART),,本例采用TI公司的單路異步串口TL16C550。關(guān)于這類芯片有很多文章介紹過,,在此不再贅述,。
3 軟件部分
3.1編程語言
??? 采用C語言開發(fā)DSP程序不僅可讀性和可移植性都很好,還能大大加快開發(fā)速度,。但用C語言實(shí)現(xiàn)某些硬件控制不如匯編方便,,且實(shí)時(shí)性不如匯編[1]。因此采用在C程序中直接嵌入?yún)R編語句來完成通信模塊程序的編寫,,除極少數(shù)采用匯編語言以外,,絕大部分采用C語言編寫,。
3.2 數(shù)據(jù)結(jié)構(gòu)定義
?? ?由于F206中的數(shù)據(jù)總線為16位,故而TI提供的C語言(以下簡稱TI C)與標(biāo)準(zhǔn) C語言的數(shù)據(jù)類型略有不同,。char,、unsigned char、int和short均為16位,,enum也為16位,。相應(yīng)地,sizeof(int)和sizeof(short)的結(jié)果為1,,而不是2,,這一點(diǎn)在計(jì)算幀長度時(shí)尤為重要,習(xí)慣于標(biāo)準(zhǔn)C的編程人員一定要特別注意,。
??? 由于DNP3.0幀格式中的基本單元是字節(jié),,而TI C中卻沒有這一數(shù)據(jù)類型,在用結(jié)構(gòu)體類型定義具體的數(shù)據(jù)結(jié)構(gòu)時(shí),,都是按字(WORD)對(duì)齊的,,因此只能將DNP3.0數(shù)據(jù)格式中的BYTE定義為16位無符號(hào)整數(shù)WORD,將DNP3.0中的WORD定義為32位無符號(hào)整數(shù)DWORD。接收數(shù)據(jù)時(shí)將每個(gè)字節(jié)都存儲(chǔ)至一個(gè)字的低8位,,發(fā)送時(shí)則只取每個(gè)字的低8位,,這樣雖然浪費(fèi)了一半的存儲(chǔ)器空間,但程序編寫容易,,效率也較高,。
??? 根據(jù)DNP3.0的層次結(jié)構(gòu)定義三個(gè)結(jié)構(gòu)體——鏈路層DL_LAYER、傳輸層T_LAYER和應(yīng)用層APP_LAYER,,每個(gè)結(jié)構(gòu)體再按照DNP3.0中相應(yīng)層規(guī)定的字段去逐個(gè)定義相應(yīng)的成員即可,。如鏈路層包括報(bào)頭和n個(gè)數(shù)據(jù)塊,報(bào)頭又包括起始字,、長度,、控制字節(jié)等字段,控制字節(jié)按比特位又包括功能碼,、方向位和幀計(jì)數(shù)位等,。鏈路層結(jié)構(gòu)定義為:
?? ?(1)DL層控制字
?? ?typedef struct{
??? ?? ?WORD?b0-3_FuncCode:4, /*功能碼*/
???????? ????b4_FCV:1, ??/*幀計(jì)數(shù)有效位*/
?????????????b5_FCB:1, ??/*幀計(jì)數(shù)位*/
???????? ????b6_PRM:1, ??/*主站標(biāo)志位*/
???????? ????b7_DIR:1; ??/*方向位*/
??? }DL_CONTROL;
??? (2)DL層報(bào)頭?
?? ?typedef? struct{
????? ??DWORD dwStart;???/*起始字*/
????? ??WORD wLength; ???/*長度*/
????? ??DL_CONTROL DLCtrl; ??/*控制字*/
????? ??DWORD dwDest; ???/*目的地址*/
????? ??DWORD dwSource; ??/*源地址*/
????? ??DWORD dwCRC; ???/*校驗(yàn)碼*/
??? }DL_HEADER;
??? (3)DL層數(shù)據(jù)塊?
??? typedef? struct{??
????????WORD awUserData[16];??/*用戶數(shù)據(jù)*/
????? ??DWORD dwCRC; ???/*校驗(yàn)碼*/
????????}DL_DATABLOCK;
3.3 流程圖
??? DNP3.0已經(jīng)詳細(xì)規(guī)定了協(xié)議的層次結(jié)構(gòu)及每一層的功能,程序的層次結(jié)構(gòu)只要與其一致就會(huì)非常清晰,,編程時(shí)只需遵照這些層次間的數(shù)據(jù)流向編寫相應(yīng)的函數(shù)即可,。物理層對(duì)應(yīng)串口收發(fā)中斷子程序,鏈路層,、傳輸層和應(yīng)用層在接收與發(fā)送時(shí)各有一套函數(shù)去處理,,以對(duì)應(yīng)串口的全雙工工作方式。其中,鏈路層接收處理流程如圖3所示,。
?
3.4 ASP的相關(guān)程序
3.4.1 ASP的寄存器定義
??? ioport unsigned portFFF4;
??? #define ADTR portFFF4??/*收發(fā)寄存器*/
??? ioport unsigned portFFF5;
??? #define ASPCR portFFF5??/*控制寄存器*/
??? ioport unsigned portFFF6;
??? #define IOSR portFFF6??/*I/O狀態(tài)寄存器*/
??? ioport unsigned portFFF7;
??? #define BRD?portFFF7??/*波特率發(fā)生器*/
3.4.2 初始化ASP
??? void InitASP(){???/*初始化異步串口*/
??? ??ASPCR=0xE080;??/*RIM=1:允許接收中斷,STB=0:一位停止位*/
??? ??IOSR=0x1800;???/*THRE=1:ADTR空 */
??? ??BRD=0x0020;???/*20MHz/38400bps*/
??? }
3.4.3 異步串口中斷服務(wù)子程序
??? void interrupt aspint(){
??? ??if( (IOSR & 0x0100) == 0x0100 ){
??? ????? Recv();}???/*有接收數(shù)據(jù)*/
??? ??if((IOSR & 0x0400) == 0x0400 ){
???? ?? ? ......;}????/*幀錯(cuò)誤處理*/
?? ?if((IOSR & 0x0800) == 0x0800 ){
??? ??Send();}????/*可以發(fā)送數(shù)據(jù)*/
?? ?*IFR = 0x20; ???/*清中斷標(biāo)志*/;
?? ?asm(' clrc INTM')???/*開中斷*/;
??? }
?? ?由于采用F206的片內(nèi)串口作為通信工具,,充分利用了DSP的片內(nèi)集成外設(shè),不僅使得通信模塊可靠性較高,,而且接口方法簡單,ASP的控制和讀寫通過幾個(gè)寄存器就可完成,,非常方便,。采用本文所介紹的方法編寫的以DNP3.0為規(guī)約的通信子程序流程清晰,符合模塊化的要求,。自現(xiàn)場投入試運(yùn)行以來,,整個(gè)通信模塊工作穩(wěn)定可靠,能迅速響應(yīng)主站請(qǐng)求,,主動(dòng)上報(bào)數(shù)據(jù),,及時(shí)準(zhǔn)確。但是隨著現(xiàn)場總線技術(shù)的發(fā)展,,F(xiàn)TU還應(yīng)具備至少一個(gè)現(xiàn)場總線接口(如CAN總線接口),。這樣不光通信質(zhì)量有保證,還可以簡化通信規(guī)約(只保留一個(gè)應(yīng)用層即可),,這應(yīng)該是FTU通信方式的一個(gè)發(fā)展方向,。
參考文獻(xiàn)
1 張雄偉.DSP芯片的原理與開發(fā)應(yīng)用(第3版).北京:電子工業(yè)出版社,2003
2 張衛(wèi)寧.TMS320C2000系列DSPs原理及應(yīng)用.北京:國防工業(yè)出版社,2002.4
3 TMS320C20X? User’s Guide.Texas Instruments Incorporated,April 1999
4 蔡運(yùn)清. IEC 870-5系列及DNP3.0規(guī)約簡介.電力系統(tǒng)自動(dòng)化,,1998,;22
5 徐丙垠,張懌寧.淺談DNP3.0規(guī)約.電力自動(dòng)化設(shè)備,1999;19(2)