基于FPGA的PROFIBUS-DP集線器設(shè)計
SD3的數(shù)據(jù)域長度可變,常用于SRD(發(fā)送數(shù)據(jù),且要求回復(fù)數(shù)據(jù))服務(wù),格式為:
SD4是令牌幀,格式如下:
SC為短應(yīng)答,格式為:
在PROFIBUS―DP協(xié)議中,RS485和光纖通常使用UART編碼格式,而在UART編碼中,每個字符由一個UART結(jié)構(gòu)的11位構(gòu)成,具體如下:
其中,Start=0;Parity=偶校驗位;Stop=1
為了保證數(shù)據(jù)的準(zhǔn)確傳輸,必須知道起始位和結(jié)束位。判斷起始和結(jié)束的條件是要知道DP的傳輸速率。
3 DP數(shù)據(jù)轉(zhuǎn)發(fā)方式比較
DP HUB的數(shù)據(jù)轉(zhuǎn)換方式大體可分為兩種,即不檢驗幀結(jié)束轉(zhuǎn)發(fā)和檢驗幀結(jié)束轉(zhuǎn)發(fā)。
3.1 不檢驗幀結(jié)束轉(zhuǎn)發(fā)
不檢驗幀結(jié)束轉(zhuǎn)發(fā)是當(dāng)一路485檢測到信號線上有低電平信號時(DP協(xié)議定義信號線上閑時為高電平),由FPGA將其余七路485設(shè)置成發(fā)送狀態(tài),而把一路進來的低電平脈沖信號轉(zhuǎn)發(fā)給其余七路。低電平脈沖結(jié)束后,FPGA再將其余七路恢復(fù)成接收狀態(tài),以等待下一個低脈沖的到來。
該方法的優(yōu)點是實現(xiàn)簡單,缺點是當(dāng)HUB的主站給從站發(fā)送數(shù)據(jù)時,其余路端如果進來低電平干擾且恰好遇到主站485接收的是高電平信號,則系統(tǒng)就會誤認為主站發(fā)送數(shù)據(jù)結(jié)束而將其變?yōu)閺恼?。然后將有低電平干擾的從站變?yōu)橹髡?,將低電平干擾當(dāng)作正常數(shù)據(jù)向其他從站轉(zhuǎn)發(fā)。
3.2 檢驗幀結(jié)束轉(zhuǎn)發(fā)
檢驗幀結(jié)束式轉(zhuǎn)發(fā)即一路485檢測到信號到來時,由FPGA將其余七路485設(shè)置成發(fā)送狀態(tài),并按位將其轉(zhuǎn)發(fā)。它采用一定方法判斷幀的結(jié)束位,并當(dāng)判斷這個幀結(jié)束時,由FPGA將七路485重新設(shè)置成接收狀態(tài),以等待下一個幀的到來。
該方式的優(yōu)點是數(shù)據(jù)傳輸準(zhǔn)確率高,但是也存在著系統(tǒng)資源占用較多的缺點。事實上,考慮到DP通信的安全性和可靠性,還是先檢測波特率后按位傳輸較好。下文將介紹DP―HUB是如何基于判斷幀結(jié)束這種方法來實現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā)的。
4 幀結(jié)束檢測
幀結(jié)束的檢測理論上可以分為碼元寬度檢測法和窮舉法判斷波特率兩種方法。
4.1 碼元寬度檢測法
本方法檢測的基本思想是找出13個脈沖中長度最小的位寬,該位寬即為碼元寬度,因為UART編碼和傳輸?shù)姆绞绞沟迷谝粋€字節(jié)包括11
個編碼位加上其前后2位共13個位,其中一定有1位碼元存在。這個碼元的寬度可用nT表示,其中T為時鐘周期,n為時鐘周期的個數(shù)。然后可以檢驗數(shù)據(jù)的高電平持續(xù)長度,如果這個數(shù)據(jù)有一段高電平的長度大于16nT,則認為該幀結(jié)束。這樣設(shè)計的依據(jù)是:一個幀的最短長度為一個字節(jié),一個字節(jié)是由11個碼元組成。通常為了保證結(jié)束判斷準(zhǔn)確而需要多取幾位,這里將其定為16個碼元。同時由于DP協(xié)議中規(guī)定報文幀中間的各個字符沒有空閑靜止?fàn)顟B(tài),而且數(shù)據(jù)通信上要有33個碼元的空閑時間來做為同步表示(SYN)。這樣,取16個碼元長度既能判斷出幀的結(jié)束,而又不會把下一次通信中的高電平信號誤認為是上一個幀的結(jié)束。
這種方法的優(yōu)點是算法簡單,不需要解析幀的結(jié)構(gòu)。缺點是檢測碼元的時鐘頻率要求較高(為了準(zhǔn)確的測量碼元的寬度),因而功耗較大。
評論