Modbus超時時間設置,通訊延遲,通訊滯後問題與(yu) 程序輪詢的關(guan) 係?
很多同學在做Modbus通訊時,需要連續讀取多個(ge) 現場設備的數據,雖然也編寫(xie) 了Modbus輪詢的程序,但是有時還是無法正常通訊。有時雖然能夠保證通訊,但是所有現場設備的輪詢周期很長。本文將從(cong) MBUS_CTRL的超時時間參數設置來說明超時時間設置的重要性。
Modbus通訊協議是單主多從(cong) 的通訊協議,如果需要讀取多個(ge) 現場Modbus從(cong) 站設備的數據時,很多PLC不支持對Modbus通訊功能塊的自動排序,需要自己編寫(xie) Modbus輪詢程序來實現,輪詢時每次隻能激活一個(ge) Modbus的讀寫(xie) 功能塊。
以常見的主站讀取從(cong) 站的寄存器為(wei) 例,主站發出請求需要8個(ge) 字節,從(cong) 站返回響應為(wei) 5 2*n個(ge) 字節。其中n為(wei) 寄存器個(ge) 數。
如果通訊速率為(wei) 9600時,按照常規的Modbus RTU,8個(ge) 數據位、1個(ge) 停止位、偶校驗方式,每傳(chuan) 輸1個(ge) 字節數據需要的時間為(wei) :
(8 1 1)/9600=1.04ms/Byte
因此,主站發出響應到從(cong) 站返回數據的時間周期為(wei) :
(8 5 2*n)*1.04 T1 T2,其中n為(wei) 寄存器個(ge) 數,T1為(wei) 從(cong) 站的響應時間(如果是PLC,則為(wei) PLC的掃描時間),T2為(wei) 通訊餘(yu) 量,一般為(wei) 20~50ms。
如果讀取10個(ge) 字的數據,從(cong) 站響應時間為(wei) 50ms,則整個(ge) 周期為(wei) :
(8 5 2*10)*1.04 50 50=134.32ms。
因此,超時時間必須大於(yu) 134.32ms,可以設置為(wei) 150ms以上。
如果超時時間太短,響應不能完全返回,通訊會(hui) 報錯。
如果超時時間設置太長,按照上述例子,一共10個(ge) 從(cong) 站,每個(ge) 從(cong) 站讀取10個(ge) 字的數據,超時時間設置為(wei) 1s。如果有1個(ge) 從(cong) 站出現故障,則整個(ge) 輪詢周期為(wei) :1000 9*134.32=2208.88 ms。
同理,如果超時時間設為(wei) 150ms,則整個(ge) 輪詢周期為(wei) :150 9*134.32=1358.88 ms。
因此,可以看出正確的超時時間設置可縮短整個(ge) 輪詢周期,不正確的設置,將導致通訊出錯或整個(ge) 通訊周期過長。