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