??? 摘??要: 分析了總線遠(yuǎn)程I/O應(yīng)用現(xiàn)狀,,提出以ARM為平臺開發(fā)PROFIBUS-PA遠(yuǎn)程I/O從站設(shè)計思想。以AT91SAM7SE32為管控CPU,基于協(xié)議芯片DPC31和西門子公司的SIM1-2,,給出其硬件設(shè)計方案,。分析PA協(xié)議的層次結(jié)構(gòu),給出PA從站的軟件組成,。充分利用ARM的快速性實現(xiàn)了PA總線要求的高實時性,、高可靠性。?
??? 關(guān)鍵詞: PROFIBUS-PA; ARM; 遠(yuǎn)程I/O
?
??? 總線遠(yuǎn)程I/O是基于現(xiàn)場總線控制系統(tǒng)FCS中的主要設(shè)備,。據(jù)統(tǒng)計,,目前典型的FCS系統(tǒng)中可直接接入現(xiàn)場總線的儀表、設(shè)備不超過22%,;其余超過78%的現(xiàn)場儀表,、設(shè)備是由總線遠(yuǎn)程I/O或Hart協(xié)議接入現(xiàn)場總線的??偩€遠(yuǎn)程I/O的主要功能分為輸入,、輸出兩部分。輸入是將采集到的現(xiàn)場模擬信號(如4 mA~20 mA)和數(shù)字量信號(如24 VDC)轉(zhuǎn)換成數(shù)據(jù)報文,,并按照通信協(xié)議傳送到現(xiàn)場總線中,。輸出是將現(xiàn)場總線通信數(shù)據(jù)轉(zhuǎn)換成模擬量輸出和數(shù)字量信號輸出。?
??? PROFIBUS-PA是專為過程控制應(yīng)用而設(shè)計的,,它是PROFIBUS-DP的延伸和擴(kuò)展,,其通信協(xié)議以DP-V1為基礎(chǔ),是一種非循環(huán)通信,,與DP-V0循環(huán)通信同時存在于一個系統(tǒng)中,。由于PA設(shè)備必須由DP段的主站控制,所以PA網(wǎng)段總是嵌入在DP網(wǎng)絡(luò)中,。?
1設(shè)計要求與實現(xiàn)方案?
1.1 設(shè)計要求?
??? 總線遠(yuǎn)程I/O作為PA從站連接到PROFIBUS-PA網(wǎng)段中,,處理收集到的外部數(shù)字量/模擬量數(shù)據(jù),通過PROFIBUS-PA現(xiàn)場總線傳送這些數(shù)據(jù),,同時能夠獲取一類主站與二類主站的輸出數(shù)據(jù)進(jìn)行相應(yīng)處理后輸出,。?
1.2 實現(xiàn)方案?
??? 使用ProfiScript(軟件)+ProfiCore(硬件)來充當(dāng)主站。ProfiScript是經(jīng)過PROFIBUS認(rèn)證,,能夠測試DP,、DP-V1和PA設(shè)備協(xié)議功能的分析工具,通過PC機(jī)的USB端口和PROFIBUS-DP總線之間的通信管理機(jī)(ProfiCore)與DP/PA耦合器相接,形成完整的PA通信通道,。編寫ProfiScript的腳本文件,,可形成用戶想要的PROFIBUS運行機(jī)制,單步或連續(xù)地發(fā)送各種報文,。?
??? (1) 硬件設(shè)計上,,主體部分由完全集成了PROFIBUS的V0狀態(tài)機(jī)制及部分V1機(jī)制的專用協(xié)議芯片DPC31、SIEMENS最新推出的SIM1-2信號調(diào)制芯片及ATMEL公司的基于ARM7內(nèi)核的AT91SAM7SE32芯片構(gòu)成,。?
??? (2) 外部8點數(shù)字量輸入,,8點數(shù)字量輸出,輸入/輸出使用LED顯示,。?
??? (3) 外部8路模擬量輸入,。?
??? (4) ARM+Firmware軟件實現(xiàn)CPU與專用ASIC芯片結(jié)合。?
??? (5) 編寫相應(yīng)產(chǎn)品的GSD文件,,對該從站的特性與性能進(jìn)行說明,,包括用戶自定義的參數(shù)值(如擴(kuò)展報警信息,擴(kuò)展診斷信息等),。?
2 硬件設(shè)計?
??? 電路設(shè)計的主體示意圖如圖1所示,。?
?
?
2.1 微處理芯片AT91SAM7SE32?
??? AT91SAM7SE32是由ATMEL公司推出的AT91SAM7SE系列芯片,具有ARM7TDMI內(nèi)核,。其優(yōu)點是:高運算速度,,低功耗,3.3 V低電壓供電,,內(nèi)部具有32 KB的可在線調(diào)試Flash,,8 KB的SRAM,保證程序運行的需求,。具有外部總線接口EBI,,EBI擁有8個片選信號,可同時接8個片外設(shè)備,。EBI是與協(xié)議芯片DPC31通信所必須的接口,,它支持NAND Flash,和SDRAM接口,,方便片外Flash與SDRAM的擴(kuò)展,。同時片內(nèi)還集成了8路最高10位轉(zhuǎn)換精度的A/D轉(zhuǎn)換器,從而免去了外部再接A/D轉(zhuǎn)換電路,降低了硬件成本,。多達(dá)3個PIO控制器共88個可編程I/O口,,這對多路的數(shù)字量輸入/輸出是極有好處的,避免了因I/O口不足而需要加入的鎖存電路,。?
2.2 協(xié)議芯片DPC31?
??? DPC31內(nèi)部已經(jīng)集成了PROFIBUS中的V0機(jī)制,,從而減少了產(chǎn)品開發(fā)的難度,,并集成部分PROFIBUS的V1機(jī)制,。內(nèi)部共8 KB可尋RAM地址,,用戶可用部分RAM(大約為5.5 KB)。由于其集成了V0機(jī)制,,所以在V0工作方面,,從DPC31的初始化至正常工作,都由其內(nèi)部狀態(tài)機(jī)制進(jìn)行控制完成,,不需要太多的人為干預(yù),。而重點在于將DPC31中的寄存器及數(shù)據(jù)緩沖區(qū)進(jìn)行正確的配置,對DPC31內(nèi)部RAM的讀寫操作即相當(dāng)于完成了主站與從站間的通信工作,。而對于V1機(jī)制,,還需要對其進(jìn)行軟件設(shè)計建立其工作機(jī)制,包括在DPC31的RAM內(nèi)建立SAP類型,,同樣需要進(jìn)行數(shù)據(jù)緩沖區(qū)的相應(yīng)設(shè)置等工作,。?
??? DPC31使用8 MHz晶振,取其2分頻4 MHz作為ARM的時鐘輸入,再經(jīng)過ARM內(nèi)部的分頻/倍頻后,,得到期望的內(nèi)部時鐘(如48 MHz),。DPC31與CPU的通信類型,可通過設(shè)置DPC31的“BUS TYPE”相應(yīng)引腳使其工作在INTEL或MOTOROLA方式,。對于本設(shè)計,,應(yīng)設(shè)為“000”,即異步INTEL方式,。需要指出的是,,DPC31上的“RAEDY”信號與AT91SAM7SE32上使用EBI時的“NWAIT”信號運行時序機(jī)制是不匹配的,不可使用,。應(yīng)該分析DPC31在此模式下對其進(jìn)行讀寫的信號時序,,從而在ARM中EBI的時序設(shè)置寄存器(SMC_CSRx)中對相應(yīng)的值進(jìn)行正確的設(shè)置,來完成對DPC31雙口RAM的讀寫,。?
2.3 Modem芯片SIM1-2 ?
??? SIEMENS公司繼SIM1-1之后最新推出了SIM1-2芯片,,與SIM1-1功能相同,接收PROFIBUS-PA上的IEC61158-2信號,,解調(diào)成可與DPC31通信的四線制RXS,、RXE、TXS,、TXE信號,,同樣反方向調(diào)制成PA總線上的IEC61158-2信號。相比而言,,SIM1-2采用了MLPQ封裝,,具有更小的體積,同時去掉了SIM1-1中的本地供電功能,即SIM1-2上的電源只能從PA總線上獲取,,而不能再由外部對其進(jìn)行供電,,但SIM1-2通過內(nèi)部電源轉(zhuǎn)換功能,可作為外部芯片電源,。通過設(shè)置相應(yīng)電阻阻值,,可使其對外供電電流設(shè)定在2 mA~50 mA之間,避免了原SIM1-1供電電流不可設(shè)定存在的隱患:因PA從站出現(xiàn)某種故障,,使得從站耗電量大幅增長,,從而造成總線供電不足影響其他設(shè)備工作。SIM1-2對外可供電壓也由原來的恒定3.3?V更改為可設(shè)置在2~5 V之間,,這顯然為外部芯片的選擇提供了更大的空間,。SIM1-2時鐘晶振為固定值2 MHz。?
??? 由于SIM1-2芯片自身電源電流只能從PA總線上獲取,,最大為50 mA,,而I/O設(shè)計中有多路數(shù)字量輸入/輸出的LED顯示,產(chǎn)品化時需要考慮到對輸入/輸出進(jìn)行的光電隔離,,再加上模擬量輸入電路的電流消耗以及各芯片的電流消耗,,因此芯片電源電流單從總線上獲取是滿足不了要求的。這就需要將供電電路分成兩個部分:SIM1-2部分電路從PA總線上汲取電流,,其他電路全由外部電源供電,。因而在DPC31與SIM1-2之間的四線通信線路需要光電隔離(見圖1)。?
??? 圖2所示是SIM1-2與PA總線的連接圖,。需要特別指出的是,,對PNP三極管Q1的選擇要注意它的“最大消散功率”指標(biāo),由于PA總線上電壓較高(9~32 V之間,,由用戶選擇的DP/PA Link決定),,再加上如果用戶設(shè)置的汲取電流較高,將造成開關(guān)三極管的消散功耗較大,。若此三極管選擇不當(dāng),,不但極易燒毀且將損壞SIM1-2芯片,其最大消散功率應(yīng)大于1 W,。?
?
?
2.4 模擬量輸入部分?
??? PA適用于過程控制領(lǐng)域,,其中有大量的模擬量數(shù)據(jù)處理,硬件設(shè)計中可充分利用AT91SAM7SE32上自帶的8路最高10位分辨率的逐次逼近式A/D轉(zhuǎn)換控制器來實現(xiàn)數(shù)據(jù)采集,,該ADC給每路A/D轉(zhuǎn)換配置一個相應(yīng)數(shù)據(jù)寄存器,,以減少CPU的中斷開銷。每個通路可單獨允許和禁止,,多種觸發(fā)方式:硬件或軟件觸發(fā),、外部觸發(fā)引腳觸發(fā),、利用定時器/計數(shù)器輸出進(jìn)行觸發(fā)。電路設(shè)計中,,采用外部取穩(wěn)定3.3 V作為轉(zhuǎn)換的參考電壓,,通過電位器變化輸入電壓的方式,來實現(xiàn)外部模擬量輸入,。如圖3所示,,為一路模擬量輸入的電路原理圖,其余7路與此路相同,。其中AD5~AD8與PIO復(fù)用,在CPU程序初始化時應(yīng)將它們分配給A/D外設(shè),。?
?
?
3 軟件設(shè)計?
3.1 Firmware 結(jié)構(gòu)?
??? PROFIBUS-PA通信基于DP-V1,,包含了循環(huán)通信與非循環(huán)通信,在非循環(huán)通信中,,又分為從站與一類主站,、二類主站間的通信,即MS1與MS2之間的通信,。程序軟件運行于ARM7中,,稱為Firmware,根據(jù)用戶具體的硬件條件編寫,。圖4是本設(shè)計的Firmware的整體結(jié)構(gòu)圖,。軟件中,DPC31的驅(qū)動為其通信底層,,其上層為C0 Firmware和C2 Firmware,,其中,C0 Firmware 包含一類主站循環(huán)通信MSCY1S,、非循環(huán)通信中的MSAC1S(數(shù)據(jù)讀/寫),、MSAL1S(報警確認(rèn)功能);C2 Firmware 包含相比而言有其特殊性的二類主站通信MSAC2S,??梢愿鶕?jù)實際需要,在程序的宏定義中設(shè)定本遠(yuǎn)程I/O所希望支持的通信功能,。?
?
?
3.2? 程序主體結(jié)構(gòu)?
??? 整個總線遠(yuǎn)程I/O的通信,,是通過對DPC31的內(nèi)部寄存器、內(nèi)部雙口RAM的讀寫過程來實現(xiàn)的,。在DPC31中,,已經(jīng)對PROFIBUS相應(yīng)的狀態(tài)機(jī)制進(jìn)行了集成,分配了相應(yīng)的讀/寫寄存器的物理地址,。為了方便ARM對DPC31相應(yīng)寄存器的訪問,,應(yīng)該將整個DPC31已經(jīng)定義的寄存器結(jié)構(gòu),,再加上用戶所想加入的“指示隊列”結(jié)構(gòu)、SAP訪問存取點結(jié)構(gòu),、用戶初始化數(shù)據(jù)結(jié)構(gòu),,歸于一個較為龐大的結(jié)構(gòu)體中,再定義一指向此類型結(jié)構(gòu)體的指針,,并將此指針強制定義到DPC31內(nèi)部RAM基地址處,。其基地址與ARM上所選用的片選信號有關(guān),本設(shè)計中選擇為CS0,,其絕對基地址為0x10000000,,其代碼為:?
??? #pragma pack(1)????? //字節(jié)必須對齊?
??? Typedef struct?
??? {…?
??? ?.. .???????????????? ? //DPC31內(nèi)部結(jié)構(gòu)?
??? } *V1SLPS_STRUC_PBC_DPC31;?
??? #pragma pack()?
??? #define DPC31_BASE_STR ((V1SLPS_STRUC_PBC_DPC31)?0x10000000)?
??? V1SLPS_STRUC_PBC_DPC31??? dpc31=DPC31_BASE_STR;?
??? 至此對DPC31的訪問通過“dpc31->”的方式來進(jìn)行。?
??? 如圖5所示為整個Firmware 的流程圖,。?
?
?
3.3 中斷處理?
??? 在程序進(jìn)入永久循環(huán)后,,對中斷事件的響應(yīng)處理是進(jìn)行通信的關(guān)鍵所在,程序設(shè)計中采用了在永久循環(huán)中不斷查詢中斷寄存器,,根據(jù)判斷相應(yīng)位的值進(jìn)入中斷處理程序的方法,。由于ARM擁有快速處理能力,從而能夠保證中斷響應(yīng)的及時性,。雖然循環(huán)與非循環(huán)對中斷事件的處理都在中斷查詢中進(jìn)行,,但其中斷產(chǎn)生是不一樣的。對循環(huán)通信,,當(dāng)從站接收到相應(yīng)的V0報文,,判斷其正確后將會給中斷寄存器相應(yīng)位進(jìn)行置位。而非循環(huán)通信中斷的產(chǎn)生,,是經(jīng)過請求“指示隊列”來完成,。對主站的非循環(huán)通信請求,不要求從站像循環(huán)通信那樣迅速得到所請求的內(nèi)容,,當(dāng)接收到非循環(huán)報文時,,DPC31會自動生成一個條目(Entry),一個條目占3 B,,分別為:Command_Code,、Value1、Value2,,Value值根據(jù)不同命令代碼(Command_Code)而定,。眾多條目構(gòu)成“指示隊列”,讀/寫指針指向“指示隊列”,,用戶只需要對隊列讀指針進(jìn)行操作,,寫指針由MAC進(jìn)行管理,中斷只在讀/寫指針不一致時產(chǎn)生,。因此,,在“Passive Idle”模式下“指示隊列”的合理初始化是很重要的,。一次非循環(huán)通信的完成可能要經(jīng)過好幾個總線周期,在主站得到想要的數(shù)據(jù)前會不斷地進(jìn)行輪詢,。圖6所示為查詢方式中的中斷程序流程,。?
?
?
??? 二類主站與一類主站不同,它不像一類主站有一個上電初始化過程,,通過這個過程(參數(shù)設(shè)置,、組態(tài)和診斷),來識別和鎖定屬于它的從站,。二類主站沒有這個過程,,所以在和從站進(jìn)行數(shù)據(jù)交換之前,它必須先和相應(yīng)的從站建立聯(lián)系,,即初始化數(shù)據(jù)通道,,同時根據(jù)內(nèi)存設(shè)定可與二類主站通信的數(shù)目。MS1與MS2均會用到“Req_Pdu_Ind”(接收到請求報文),、“Poll_End_Ind”(已經(jīng)對請求進(jìn)行了應(yīng)答)和“SAP_Act_Deact”(FDL_SAP激活或非激活)三個條目類型,由于MS2通信擁有數(shù)據(jù)通道超時放棄功能,,因此它比MS1多一個“FDL_Timer_Expired”(FDL監(jiān)視計時器溢出)條目類型,。?
3.4 運行測試?
??? 如圖7所示,配置S7-300的CPU314+CP342-5為主站對遠(yuǎn)程I/O進(jìn)行測試,,使用ProfiTrace 監(jiān)測到的進(jìn)入數(shù)據(jù)交換循環(huán)通信部分報文結(jié)果,。?
?
?
??? PROFIBUS是目前應(yīng)用最為廣泛的現(xiàn)場總線,在國內(nèi)對其開發(fā)的主要產(chǎn)品是DP,,由于PA必須加入非循環(huán)通信,,并需實現(xiàn)相應(yīng)設(shè)備的PA行規(guī),開發(fā)難度較大,,對PA產(chǎn)品的開發(fā)還較為鮮見,。文中具體介紹了PROFIBUS-PA從站遠(yuǎn)程I/O設(shè)備的實現(xiàn)方案,經(jīng)測試達(dá)到了良好的通信效果,。但在開發(fā)設(shè)計中,,由于外部電源引入時未考慮其本安特性,所以此PA從站設(shè)備是不符合本質(zhì)安全要求的,,這將是未來的改進(jìn)方向,。?
參考文獻(xiàn)?
[1] 王永華,VERWER A.現(xiàn)場總線技術(shù)及應(yīng)用教程——從PROFIBUS到AS-i[M].北京:機(jī)械工業(yè)出版社,,2007.?
[2] SIEMENS AG.DPC31 hardware description of step C[EB/CD],,Version 2.1,April 2004.?
[3] SIEMENS AG.ASIC SIM1-2 function manual[EB/CD],,F(xiàn)eb. 2007.?
[4] ATMEL.User manual of AT91SAM7SE series[EB/CD],,Mar. 2007. ?
[5] 陽憲惠.現(xiàn)場總線技術(shù)及其應(yīng)用[M].北京:清華大學(xué)出版社,,1999.