MODBUS是采取一問(wèn)一答的協(xié)議,如果物理層(硬件層)使用RS-232或是RS-422因?yàn)槭恰敖邮铡迸c“發(fā)送”分離,因此一般不會(huì)發(fā)生傳送遺失問(wèn)題;但如使用RS-485時(shí),因?yàn)槭恰敖邮铡迸c“發(fā)送”同在一條傳輸線上,因此容易造成資料遺失.造成資料遺失的問(wèn)題取決主因是[Master發(fā)送最后一筆資料后哪時(shí)釋放發(fā)送權(quán)]問(wèn)題?根據(jù)標(biāo)準(zhǔn)MODBUS規(guī)則是等待四個(gè)傳輸字符當(dāng)間格.舉例來(lái)說(shuō)在9600,E,8,1傳輸率上則必須間格(1.1416ms*4)既一般說(shuō)的4ms空閑時(shí)間.但;實(shí)際上
MODBUS 是采取一問(wèn)一答的協(xié)議, 如果物理層 ( 硬件層 ) 使用 RS-
232或是 RS-422 因?yàn)槭?“接收” 與 “發(fā)送” 分離, 因此一般不會(huì)發(fā)生傳送遺失問(wèn)題; 但如使用 RS-
485時(shí), 因?yàn)槭?“接收” 與 “發(fā)送” 同在一條傳輸線上, 因此容易造成資料遺失.
造成資料遺失的問(wèn)題取決主因是 [ Master發(fā)送最后一筆資料后哪時(shí)釋放發(fā)送權(quán) ] 問(wèn)題 ? 根據(jù)標(biāo)準(zhǔn) MODBUS 規(guī)則是等待 四個(gè) 傳輸字符當(dāng)間格. 舉例來(lái)說(shuō) 在 9600,E,8,1 傳輸率上則必須間格 ( 1.1416
ms* 4 ) 既一般說(shuō)的 4ms 空閑時(shí)間.
但; 實(shí)際上有一問(wèn)題; 如果產(chǎn)品定義只是 MODBUS I/O 這 [空閑問(wèn)題] 可能可以接受, 因?yàn)?b>CPU可以有很充分時(shí)間等待; 若產(chǎn)品是 人機(jī)或是
PLC這4ms可能就會(huì)有問(wèn)題, 當(dāng)然解決方式可以使用雙CPU來(lái)解決, 既是用一顆CPU專門處理傳輸問(wèn)題. 因此許多人機(jī)與 PLC 都是以最后一個(gè)字符傳輸完畢來(lái)區(qū)隔; 事實(shí)證明這種傳輸方式也是有效. 但要讓整體傳輸能縮短空閑時(shí)間其實(shí)可以在接收MODBUS碼五個(gè)以內(nèi) ( 依句柄不同 ) 既能得知總共會(huì)接收多少個(gè)碼; 因此既可縮短或幾乎不需要 空閑時(shí)間 .
但不管是雙CPU或是單CPU來(lái)處理 MODBUS 協(xié)議處理, 想要減低傳送時(shí)間耗損, 我們必須在解析MODBUS協(xié)議的工作上充分利用其傳輸特性. 并避開 ”盲點(diǎn)” .
如下照片, 我們可以用以解說(shuō) “盲點(diǎn)” 誤區(qū)
1. “1”是Slave1回復(fù)Master, 在發(fā)送最后一筆資料立即Master 既馬上回復(fù).
2.是 Master 傳送完畢, 被呼叫到的 Slave2 回復(fù)狀況, 這回復(fù)是Slave2 故意延遲一個(gè)傳送字符時(shí)間.
這是已經(jīng)避開誤區(qū)的做法, 但避開誤區(qū)的理論則為如下 :
1.主機(jī) ( 上位機(jī) 如 PC / HMI / PLC ) 有許多傳輸部分處理都是引用高階內(nèi)核去寫, 常見使用 “C語(yǔ)言” 開發(fā). 在這我先聲明不是批評(píng) “C語(yǔ)言 “, 但因?yàn)橐话闵衔粰C(jī)很復(fù)雜, 如果沒有一些功力很難用原生匯編語(yǔ)言來(lái)寫. 因此 使用者很難自行完全掌握目前工作時(shí)序.
2.上位機(jī)處理 “傳送 / 接收 “ 都是用 “中斷” 來(lái)處理, 也就是對(duì)上位機(jī)來(lái)說(shuō) 由其 “傳送 / 接收 “ 應(yīng)件完成的 中斷來(lái)引發(fā)進(jìn)一步數(shù)據(jù)處理.
3.由第 ”2” 狀況我們可以得知照片 Slave1 回送后 Master 可以馬上發(fā)送理由. 因?yàn)閷?duì) Master 而言它確實(shí)是完整接收完資料, 其短暫的延時(shí)則為其數(shù)據(jù)處理時(shí)間.
4.由第 ”2” 狀況我們可以得知照片 Master 送完后 Slave2 必須延時(shí)一個(gè)字符時(shí)間發(fā)送理由. 因?yàn)閷?duì) Master而言它確實(shí)是完整發(fā)送完資料, 對(duì)Slave2而言它確實(shí)是完整接收完資料, 但如果Slave2馬上將
RS485硬件切入發(fā)送模式并開始發(fā)送, 對(duì) Master 而言其發(fā)送剛結(jié)束也正準(zhǔn)備離開 “串移中斷程序” 此時(shí)Master并沒放開 RS-485 硬件發(fā)送模式, 這時(shí)將會(huì)引發(fā) “總線沖突” 此沖突會(huì)導(dǎo)致 主機(jī) 接收硬件第一時(shí)序第一個(gè)位無(wú)預(yù)期錯(cuò)誤. 但糟糕的是這會(huì)引發(fā)主機(jī) “接收硬件” 開始工作, 而導(dǎo)致錯(cuò)誤.