<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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


          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();