PROFI BUS-DP/MODBUS的網(wǎng)關(guān)結(jié)構(gòu)設(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所示。本文引用地址:http://m.butianyuan.cn/article/181148.htm
為了提高協(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錯(cuò)誤的模塊地址、模擬量輸入MODBUS模塊的通道斷線標(biāo)志。
評論