盲點(diǎn) [簡(jiǎ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ā). 在這我先聲明不是批評(píng) “C語言 “, 但因?yàn)橐话闵衔粰C(jī)很復(fù)雜, 如果沒有一些功力很難用原生匯編語言來寫. 因此 使用者很難自行完全掌握目前工作時(shí)序.
2.上位機(jī)處理 “傳送 / 接收 “ 都是用 “中斷” 來處理, 也就是對(duì)上位機(jī)來說 由其 “傳送 / 接收 “ 應(yīng)件完成的 中斷來引發(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è)位無預(yù)期錯(cuò)誤. 但糟糕的是這會(huì)引發(fā)主機(jī) “接收硬件” 開始工作, 而導(dǎo)致錯(cuò)誤.
5.由上 “4” Slave2為了要避開沖突. Slave2 在接收完 Master 后也靜空一個(gè) “傳送字符時(shí)間” 在將 RS-485 由接收轉(zhuǎn)為發(fā)送.
評(píng)論