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