PROFI BUS-DP/MODBUS的網(wǎng)關(guān)結(jié)構(gòu)設(shè)計(jì)
引 言
??? 作為我國第一個(gè)工業(yè)通信領(lǐng)域現(xiàn)場總線技術(shù)國家標(biāo)準(zhǔn)的PROFIBUS現(xiàn)場總線,其應(yīng)用范圍已經(jīng)相當(dāng)廣泛,占有很大的市場份額。在PROFIBUS家族中,PROFIBUS-DP總線的應(yīng)用最為廣泛。
??? 國內(nèi)的一些廠商都在開發(fā)并相繼推出自己的現(xiàn)場總線系列產(chǎn)品。但是其FCS系列產(chǎn)品在快速接入主流現(xiàn)場總線系統(tǒng)中有一些阻力,所占市場份額比較小,其提供的系統(tǒng)設(shè)計(jì)方案大多還是在主推DCS系統(tǒng)。為了能夠快速接入主流現(xiàn)場總線,結(jié)合國家863課題,中國四聯(lián)儀器儀表集團(tuán)有限公司與本教研室共同研發(fā)PROFIBUS-DP/MODBUS網(wǎng)關(guān),以期實(shí)現(xiàn)其FCS系列輸入/輸出從站設(shè)備快速無縫接入PROFIBUS-DP網(wǎng)絡(luò),并借此來提高其自動化設(shè)備的應(yīng)用范圍。
1 系統(tǒng)的總體設(shè)計(jì)
??? MODBUS總線采用單主多從、查詢一回應(yīng)的工作方式,具有結(jié)構(gòu)簡單、可靠性高、受干擾的概率低、傳輸實(shí)時(shí)性能較好等優(yōu)點(diǎn);但是MODBUS總線沒有路由器、網(wǎng)關(guān)等網(wǎng)絡(luò)互聯(lián)設(shè)備,網(wǎng)絡(luò)規(guī)模有限,大型組網(wǎng)能力和網(wǎng)絡(luò)處理能力較差。
??? 本系統(tǒng)使采用MODBUS協(xié)議的現(xiàn)場設(shè)備無縫接入PROFIBUS-DP現(xiàn)場總線系統(tǒng),以此來提高現(xiàn)場設(shè)備選擇的靈活性。這樣做不僅僅擴(kuò)展了MODBUS網(wǎng)絡(luò)和PROFIBUS-DP網(wǎng)絡(luò)的互聯(lián)性,還大大降低了系統(tǒng)升級和更新?lián)Q代所需要的費(fèi)用。
??? 系統(tǒng)總體結(jié)構(gòu)如圖1所示。其關(guān)鍵部分是智能網(wǎng)關(guān),它實(shí)現(xiàn)了協(xié)議之間的相互轉(zhuǎn)換,無縫鏈接PROFIBUS-DP現(xiàn)場總線系統(tǒng)與MODBUS總線系統(tǒng),使同一系統(tǒng)內(nèi)同時(shí)存在PROFIBUS-DP總線和MODBUS總線的設(shè)備,已經(jīng)存在和使用的設(shè)備不必做任何改變就能夠直接接入PROFIBUS-DP網(wǎng)絡(luò)。
??? 其中,微控制器為中國四聯(lián)集團(tuán)開發(fā)的主控制器,本智能網(wǎng)關(guān)在設(shè)計(jì)上為其預(yù)留了一個(gè)用于和主控制器進(jìn)行通信的通信接口。底層的I/O模塊實(shí)現(xiàn)工業(yè)現(xiàn)場信號的檢測或控制執(zhí)行設(shè)備的運(yùn)行。
2 PROFIBUS-DP/MODBUS網(wǎng)關(guān)結(jié)構(gòu)設(shè)計(jì)
??? PROFIBUS-DP/MODBUS嵌入式網(wǎng)關(guān)硬件結(jié)構(gòu)如圖2所示。按照功能模塊劃分,網(wǎng)關(guān)可以分為電源管理模塊、中央處理器模塊、PROFIBUS-DP從站模塊和RS485通信模塊。
??? 本硬件設(shè)計(jì)要求串行口速率能夠達(dá)到921.6 kbps?;诖艘螅布脚_選用Philips公司的ARM7TDMI核的微處理器。電源管理模塊負(fù)責(zé)整套系統(tǒng)的電源供給。系統(tǒng)的穩(wěn)定運(yùn)行和電源模塊的穩(wěn)定性能關(guān)系密切,此處設(shè)計(jì)的電源模塊兼有熱插拔和電壓轉(zhuǎn)換的功能。PROFIBUS-DP從站模塊的核心功能由協(xié)議芯片(VPC3+C)來實(shí)現(xiàn),從站單元的配置和管理則由中央處理器模塊來完成。
?中央處理器模塊除了實(shí)現(xiàn)對PROFIBUS-DP從站模塊的配置和管理外,還要完成MODBUS協(xié)議的實(shí)現(xiàn)以及兩種協(xié)議數(shù)據(jù)交換協(xié)議棧的實(shí)現(xiàn)。為了提高系統(tǒng)的抗干擾能力,和外界進(jìn)行通信的部分需要和系統(tǒng)在物理接口上進(jìn)行電氣隔離,此處的3個(gè)通信接口都需要進(jìn)行隔離。根據(jù)通信速度要求的不同,選擇磁耦芯片模塊完成PROFIBUS-DP通信的隔離兼物理層電平轉(zhuǎn)換功能;用雙通道磁耦隔離芯片來完成另外兩路串行口通信的隔離。這兩款芯片都采用了最新的基于芯片尺寸的變壓器隔離技術(shù)的磁耦。和傳統(tǒng)的光耦比較,其轉(zhuǎn)換速度、瞬態(tài)共模抑制能力、功耗、尺寸及成本等方面均有很明顯的優(yōu)勢。
3 系統(tǒng)的軟件設(shè)計(jì)
3.1 軟件總體結(jié)構(gòu)設(shè)計(jì)
??? 一般情況下,現(xiàn)場總線協(xié)議之間的轉(zhuǎn)換器可分為物理層的中繼器、MAC層的網(wǎng)橋及應(yīng)用層的網(wǎng)關(guān)等幾種形式。中繼器方式需要更改底層硬件,網(wǎng)橋方式對應(yīng)MAC層的協(xié)議轉(zhuǎn)換復(fù)雜,而網(wǎng)關(guān)的形式則使得原有網(wǎng)段的協(xié)議不需做任何改變,實(shí)現(xiàn)起來最為簡單。
??? 本系統(tǒng)采用了網(wǎng)關(guān)形式,軟件總體流程如圖3所示,主要實(shí)現(xiàn)了PROFIBUS-DP協(xié)議芯片VPC3+C的驅(qū)動程序和MODBUS協(xié)議,同時(shí)在應(yīng)用層實(shí)現(xiàn)了PROFIBUS-DP總線和MODBUS總線協(xié)議數(shù)據(jù)幀的轉(zhuǎn)換。MODB-US協(xié)議只是定義了消息域的格局和內(nèi)容的公共格式,具體的物理層及應(yīng)用層可以由用戶根據(jù)需要定義。本網(wǎng)關(guān)MODBUS通信部分物理層采用標(biāo)準(zhǔn)的RS485總線,MAC協(xié)議是由軟件實(shí)現(xiàn)的。
??? CPU通過驅(qū)動VPC3+C來實(shí)現(xiàn)對PROFIBUS熔一DP通信過程的控制,包括通信接口檢查、正常和發(fā)生故障情況下診斷數(shù)據(jù)的發(fā)送及數(shù)據(jù)交換等過程;通過MODBUS協(xié)議實(shí)現(xiàn)對下掛的輸入/輸出從站模塊的查詢操作;通過對輸入/輸出模塊的應(yīng)答幀(或通信超時(shí))進(jìn)行分析來判斷模塊的狀態(tài)以及模塊的通道狀態(tài);根據(jù)模塊狀態(tài)信息填充PROFIBUS-DP的診斷域的數(shù)據(jù),并以此為依據(jù)來對網(wǎng)關(guān)狀態(tài)(正常通信、報(bào)告錯誤或警告信息)進(jìn)行控制。
3.2 網(wǎng)關(guān)協(xié)議棧設(shè)計(jì)
??? 網(wǎng)關(guān)協(xié)議棧為MODBUS輸入/輸出模塊和PROFI-BUS-DP通信的橋梁。協(xié)議棧采用分層結(jié)構(gòu):PROFIBUS-DP通信層、協(xié)議映射層和MODDBUs I/O通信層。協(xié)議棧結(jié)構(gòu)及報(bào)文處理流程如圖4所示。
??? (1)PROFIBUS-DP通信層
??? 負(fù)責(zé)對VPC3+C通信狀態(tài)的監(jiān)控管理,按照一定的規(guī)則將PROFIBUS-DP總線通信收到的數(shù)據(jù)映射到CPU內(nèi)部的存儲器,供I/O通信層調(diào)用,完成輸出數(shù)據(jù)的更新;把I/O通信層的輸入數(shù)據(jù)按照一定的規(guī)則映射到CPU內(nèi)部的寄存器,在適當(dāng)?shù)臅r(shí)候?qū)懭隫PC3+C的輸入數(shù)據(jù)緩沖區(qū),以完成輸入數(shù)據(jù)的更新。
(2)協(xié)議數(shù)據(jù)映射層
??? 負(fù)責(zé)將I/O模塊映射為標(biāo)準(zhǔn)PROFIBUS-DP I/O模塊的工作,包括對下掛的I/O模塊類型和通信接口控制字的檢查;各輸入模塊通道輸入數(shù)據(jù)在PROFIBUS-DP輸入數(shù)據(jù)中起始位置及所占長度的管理;PROFIBUS-DP輸出數(shù)據(jù)向各輸出模塊通道輸出數(shù)據(jù)上的映射關(guān)系管理。
??? (3)MODBUS通信層
??? 負(fù)責(zé)完成和下掛MODBUS從站I/O模塊的所有通信,包括讀取I/O模塊類型、讀取通道輸出值、設(shè)定通道輸出值和參數(shù)設(shè)置等工作;根據(jù)映射層提供的輸出數(shù)據(jù)映射關(guān)系,將PROFIBUS-DP的輸出數(shù)據(jù)在CPU存儲器里的映射數(shù)據(jù)更新到輸出模塊的相應(yīng)通道上;讀取各輸入模塊的通道輸入值,給映射層提供輸入數(shù)據(jù)資源。
3.3 PROFIBUS-DP總線驅(qū)動
??? 此網(wǎng)關(guān)PROFIBUS-DP部分采用協(xié)議芯片VPC3+C,其內(nèi)部含有4KB RAM,用戶可根據(jù)需要對其進(jìn)行設(shè)置;有兩種微處理器接口,數(shù)據(jù)/地址總線復(fù)用或單獨(dú)操作。因?yàn)锳RM核對外部RAM操作的速度較快,時(shí)序不能滿足VPC3+C的操作時(shí)序,因此這里不采用數(shù)據(jù)/地址總線復(fù)用的方式,而是用ARM的GPIO口來模擬VPC3+C的操作時(shí)序。在這里模擬的是其在Intel模式下內(nèi)部寄存器的讀寫時(shí)序。此驅(qū)動主要提供了以下功能:nxp_vpc3_read、nxp_vpc3_write、nxp_vpc3_init、nxp_vpc3_reset、nxp_vpc3_isr。這些函數(shù)分別向上層應(yīng)用提供了讀寫VPC3+C寄存器、對其初始化、復(fù)位操作及中斷的處理功能。其中對寄存器的讀寫操作是關(guān)鍵部分,函數(shù)原型如下:
??? unsigned char nxp_vpc3_read(unsigned int addr);
??? void nxp_vpc3_write(unsigned int addr,unsigned char data);
??? 其中,addr為要讀寫的寄存器地址,data為要寫入的數(shù)據(jù)。
3.4 MODBUS協(xié)議的實(shí)現(xiàn)
??? 為增加信號傳輸?shù)木嚯x并提高抗干擾能力,MODB-US物理層采用標(biāo)準(zhǔn)的RS485通信。MODBUS協(xié)議實(shí)現(xiàn)軟件的流程如圖5所示。
??? 為了提高協(xié)議處理報(bào)文的效率,并提供良好的擴(kuò)展性能,定義了函數(shù)指針數(shù)組,用于MODBUS應(yīng)用層的數(shù)據(jù)處理。函數(shù)指針數(shù)組指針按照模塊類型進(jìn)行信息處理的導(dǎo)向。
3.5 協(xié)議數(shù)據(jù)的映射處理
??? 此網(wǎng)關(guān)的主要任務(wù)是完成PROFIBUS-DP的數(shù)據(jù)和MODB-實(shí)現(xiàn)的流程US數(shù)據(jù)的相互轉(zhuǎn)換,為了保證數(shù)據(jù)的實(shí)時(shí)性采用單緩沖區(qū)技術(shù)來實(shí)現(xiàn)信息的及時(shí)更新。所謂“單緩沖區(qū)”,即不管是PROFIBUS-DP還是MODBUS中待轉(zhuǎn)換的數(shù)據(jù),只保留當(dāng)前最新的一幀??紤]到現(xiàn)場通信的數(shù)據(jù)主要是數(shù)據(jù)的采集或模擬量的輸出,采用單個(gè)緩沖區(qū)不僅僅大大降低了對內(nèi)存的需求,而且可以保證通信的實(shí)時(shí)性。因?yàn)镻ROFIBUS-DP的正常通信需要組態(tài)的軟件和下掛模塊的硬件一致,才能保證系統(tǒng)的可靠運(yùn)行。因此如何將MODBUS從站模塊合理地映射成PROFIBUS-DP的標(biāo)準(zhǔn)模塊很關(guān)鍵。這里根據(jù)模塊特點(diǎn)(類型、數(shù)字量/模擬量、通道數(shù)量等)定義了不同的通信接口控制字(CFG_DAT)。系統(tǒng)上電后,網(wǎng)關(guān)通過MODBUS功能碼0x11對下掛從站模塊進(jìn)行類型及狀態(tài)查詢,并根據(jù)類型得到對應(yīng)不同模塊的CFG_DAT。在PROFIBUS-DP進(jìn)行通信接口配置(CFG_CHK)的過程中檢查下掛模塊的CFG_DAT和對主站硬件組態(tài)的模塊對應(yīng)的CFG_DAT,并根據(jù)此來填充診斷數(shù)據(jù)。如果檢查通過,控制PROFIBUS-DP從站協(xié)議芯片進(jìn)入數(shù)據(jù)交換狀態(tài);否則主站在進(jìn)行診斷數(shù)據(jù)請求(DIAG-REQ)的時(shí)候,將診斷數(shù)據(jù)報(bào)告給主站。此網(wǎng)關(guān)判斷的診斷信息包括:對應(yīng)CFG_DAT錯誤的模塊地址、模擬量輸入MODBUS模塊的通道斷線標(biāo)志。
3.6 關(guān)鍵技術(shù)研究
??? (1)緩沖區(qū)數(shù)據(jù)映射——保證實(shí)時(shí)性
??? 網(wǎng)關(guān)在對兩種協(xié)議的數(shù)據(jù)進(jìn)行映射的過程中,采用了一次性內(nèi)存拷貝技術(shù)和單緩沖區(qū)技術(shù)來盡快完成數(shù)據(jù)的處理且保證是最新數(shù)據(jù),以此來保證數(shù)據(jù)傳輸在經(jīng)過網(wǎng)關(guān)時(shí)的實(shí)時(shí)性。
??? 一次性內(nèi)存拷貝技術(shù)是指,網(wǎng)關(guān)從協(xié)議芯片內(nèi)部讀取到PROFIBUS-DP的輸出數(shù)據(jù)后,直接將存到的數(shù)據(jù)填充到MODBUS輸出幀內(nèi);從MODBUS輸入模塊得到的數(shù)據(jù)直接填入到PROFIBUS-DP協(xié)議芯片的輸入緩沖區(qū)。這樣的方式可減少內(nèi)存拷貝過程中所耗費(fèi)的時(shí)間。如上所述,網(wǎng)關(guān)單緩沖區(qū)技術(shù)也是為了保證數(shù)據(jù)是最新采用的。此網(wǎng)關(guān)連接的兩種設(shè)備的正常數(shù)據(jù)通信都是周期性的,且周期一般是固定不變的。如果MODBUS數(shù)據(jù)交換的周期小于PROFIBUS-DP的數(shù)據(jù)交換周期,則網(wǎng)關(guān)的緩存中只有1幀有效數(shù)據(jù);如果MODBUS數(shù)據(jù)交換周期大于PROFIBUS-DP的數(shù)據(jù)交換周期,若采用鏈表保存PRO-FIBUS-DP的幀數(shù)據(jù),則不管緩沖區(qū)的大小有多少,肯定導(dǎo)致緩沖區(qū)溢出,從而使PROFIBUS-DP的輸出數(shù)據(jù)不能即時(shí)更新到MODBUS從站的通道上進(jìn)而影響系統(tǒng)的實(shí)時(shí)性。
??? (2)實(shí)時(shí)模塊通信檢查——保證可靠性
??? 系統(tǒng)除了在上電之后對下掛的MODBUS模塊進(jìn)行類型查詢并和PROFIBUS-DP主站組態(tài)模塊類型進(jìn)行比較外,在進(jìn)入正常數(shù)據(jù)交換之后,也會對模塊的狀態(tài)進(jìn)行查詢,判斷模塊是否發(fā)生錯誤。錯誤標(biāo)志是在網(wǎng)關(guān)和MODB-US從站進(jìn)行通信過程中根據(jù)從站的回應(yīng)幀來判斷的。在逐個(gè)檢查模塊錯誤標(biāo)志后,如果沒有錯誤標(biāo)識被置位,繼續(xù)正常通信過程;如果發(fā)現(xiàn)有錯誤標(biāo)識被置位,則控制PRO-FIBUS-DP協(xié)議芯片離開數(shù)據(jù)交換狀態(tài),并且填充診斷信息。在此之后,不斷查詢MODBUS模塊類型,直至模塊類型和對PROFIBUS-DP主站組態(tài)數(shù)據(jù)一致為止,再控制PROFIBUS-DP協(xié)議芯片進(jìn)入數(shù)據(jù)交換狀態(tài)。這樣采用實(shí)時(shí)查詢模塊是否出錯狀態(tài)的方式來保證軟件組態(tài)數(shù)據(jù)和硬件類型相一致,防止出現(xiàn)輸入/輸出數(shù)據(jù)的錯誤。
??? 此網(wǎng)關(guān)系統(tǒng)中MODBUS協(xié)議是由軟件來實(shí)現(xiàn)的,考慮到需要定時(shí)器等保證通信的可靠性,為了防止兩種協(xié)議通信的相互影響,對PROFIBUS-DP輸出數(shù)據(jù)的讀取采用查詢的方式而非中斷方式進(jìn)行。這樣在PROFIBUS-DP的數(shù)據(jù)到來后不會打斷正在進(jìn)行的MODBUS通信,尤其是在PROFIBUS-DP通信速率較高的情況下,這種設(shè)計(jì)的可靠性更加明顯。如果采用中斷的方式,在PRO-FIBUS-DP通信速率超過一定值,其勢必影響網(wǎng)關(guān)和MODBUS從站之間的通信(詳見下面性能分析部分),嚴(yán)重時(shí)會導(dǎo)致MODBUS幀傳輸?shù)牟煌暾?,從而?dǎo)致網(wǎng)關(guān)對MODBUS模塊通信狀態(tài)的誤判,進(jìn)而影響系統(tǒng)的穩(wěn)定性。
4 網(wǎng)關(guān)測試結(jié)果
??? 在規(guī)定的條件下,對通信次數(shù)進(jìn)行計(jì)數(shù),程序的每個(gè)掃描周期進(jìn)行一次MODBUS數(shù)據(jù)輸入/輸出的更新;PROFIBUS-DP輸入/輸出數(shù)據(jù)的更新,則是在VPC3+C收到PROFIBUS-DP的輸出數(shù)據(jù)標(biāo)志位置位后進(jìn)行。對這兩種數(shù)據(jù)更新的次數(shù)進(jìn)行計(jì)數(shù),分別為Cmidbus和Cdp在PROFIBUS-DP通信速率(λdp)變化的情況下,實(shí)際測試數(shù)據(jù)如表1所列。
??? 從表中可以看出,λdp=187.5 kbps時(shí),Cdp=Cmodbus,實(shí)際上,此時(shí)已經(jīng)出現(xiàn)了PROFIBUS-DP丟包現(xiàn)象。這也解釋了上邊所提到的如果λdp超過一定值,若采用中斷方式處理PROFIBUS-DP的輸出數(shù)據(jù),勢必影響正在進(jìn)行的MODBUS的通信。
5 結(jié) 論
??? 將中國四聯(lián)集團(tuán)采用MODBUS協(xié)議的輸入/輸出從站設(shè)備無縫接入PROFIBUS-DP網(wǎng)絡(luò)的智能通信網(wǎng)關(guān)的實(shí)現(xiàn)方案,有效地拓寬了其應(yīng)用范圍。在硬件設(shè)計(jì)上,采用電源管理模塊實(shí)現(xiàn)網(wǎng)關(guān)的熱插拔功能;采用專用芯片解析PROFIBUS-DP協(xié)議;采用磁耦隔離代替?zhèn)鹘y(tǒng)的光耦隔離,提高了系統(tǒng)的性能和可靠性。軟件方面,采用單緩沖區(qū)設(shè)計(jì)、一次性內(nèi)存拷貝技術(shù)、實(shí)時(shí)模塊狀態(tài)查詢方式以及合理的中斷應(yīng)用來保證系統(tǒng)的實(shí)時(shí)性和可靠性,還對網(wǎng)關(guān)的性能進(jìn)行了測試和簡單計(jì)算,給出了保證不丟包所需要滿足的公式。為其他工業(yè)通信網(wǎng)關(guān)的設(shè)計(jì)提供了參考。
評論
查看更多