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