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