新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Modbus通訊注意事項(xiàng)及測試

Modbus通訊注意事項(xiàng)及測試

作者: 時間:2016-12-13 來源:網(wǎng)絡(luò) 收藏
很多同學(xué)在做Modbus通訊時,需要連續(xù)讀取多個現(xiàn)場設(shè)備的數(shù)據(jù),雖然也編寫了Modbus輪詢的程序,但是有時還是無法正常通訊。有時雖然能夠保證通訊,但是所有現(xiàn)場設(shè)備的輪詢周期很長。本文將從MBUS_CTRL的超時時間參數(shù)設(shè)置來說明超時時間設(shè)置的重要性。
答:Modbus通訊協(xié)議是單主多從的通訊協(xié)議,如果需要讀取多個現(xiàn)場Modbus從站設(shè)備的數(shù)據(jù)時,很多PLC不支持對Modbus通訊功能塊的自動排序,需要自己編寫Modbus輪詢程序來實(shí)現(xiàn),輪詢時每次只能激活一個Modbus的讀寫功能塊。
以常見的主站讀取從站的寄存器為例,主站發(fā)出請求需要8個字節(jié),從站返回響應(yīng)為52*n個字節(jié)。其中n為寄存器個數(shù)。
如果通訊速率為9600時,按照常規(guī)的ModbusRTU,8個數(shù)據(jù)位、1個停止位、偶校驗(yàn)方式,每傳輸1個字節(jié)數(shù)據(jù)需要的時間為:
(811)/9600=1.04ms/Byte
因此,主站發(fā)出響應(yīng)到從站返回?cái)?shù)據(jù)的時間周期為:
(852*n)*1.04T1T2,其中n為寄存器個數(shù),T1為從站的響應(yīng)時間(如果是PLC,則為PLC的掃描時間),T2為通訊余量,一般為20~50ms。
如果讀取10個字的數(shù)據(jù),從站響應(yīng)時間為50ms,則整個周期為:
(852*10)*1.045050=134.32ms。
因此,超時時間必須大于134.32ms,可以設(shè)置為150ms以上。
如果超時時間太短,響應(yīng)不能完全返回,通訊會報(bào)錯。
如果超時時間設(shè)置太長,按照上述例子,一共10個從站,每個從站讀取10個字的數(shù)據(jù),超時時間設(shè)置為1s。如果有1個從站出現(xiàn)故障,則整個輪詢周期為:10009*134.32=2208.88ms。
同理,如果超時時間設(shè)為150ms,則整個輪詢周期為:1509*134.32=1358.88ms。
因此,可以看出正確的超時時間設(shè)置可縮短整個輪詢周期,不正確的設(shè)置,將導(dǎo)致通訊出錯或整個通訊周期過長。


評論


技術(shù)專區(qū)

關(guān)閉