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