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