我正在使用 modbus rtu RS485 發送和接收資料的 Linux 系統上作業。我的設備是主設備,每 1 秒只發送“請求最新資料”(8 位元組包括 2 位元組 CRC)到從設備(從現在開始只有 1 個從設備)。當 Slaver 收到請求時,它們會準備資料(71Bytes 包括 CRC)并發送回 Master。我看不到 Slaver 的來源,因為這是商業產品。Master 和 Slaver 都使用相同的波特率 38400。
結果:
- 檢查Master和Slaver之間的通信時,有時(平均為1-2小時)來自Slaver的資料丟失了一些first Bytes,并且接收到的第一個Byte已經被Slaver發送的其他值修改了(有時只丟失了一些first Bytes)
- 有時來自 Slaver 的資料不來(超時但不接收任何資料)。我試圖將超時增加 500 毫秒或 1 秒,但仍然沒有任何變化
- 我通過與 Teraterm 通信測驗了 Slaver,沒有像上面那樣的錯誤。發送和接收的資料正常。用Master,我也用Teraterm測驗過,沒有錯誤。
- 當我嘗試在 Master 和 Slaver 發送和接收資料時捕獲資料時,在 Master 端和我的 PC 端都出現問題(未接收任何資料或丟失一些第一個位元組)時(嘗試在 PC 上捕獲資料位元組 Teraterm) .
我相信問題出在 Master 端,也可能出在串口設定上,但我不知道哪里錯了。請幫忙。
對不起我糟糕的英語!
uj5u.com熱心網友回復:
我曾經經常使用 RS485 總線。有時出現的一個問題與您的非常相似。由于 RS485 是半雙工總線,因此 RS485 總線驅動程式具有切換接收模式和發送模式的機制。這正是我遇到問題的原因。
當主設備發送一些資料時,從設備準備好在總線驅動程式(在主端)切換到接收模式之前回復(和回復)。此行為以資料丟失告終。
我建議您使用示波器檢查從機是否正確發送了資料?如果是這樣,您可能沒有太多選擇,因為可能的解決方案是:
- 從站必須等待一段時間才能向主站發送回復。
- 更改硬體,一些 RS485 驅動程式在切換模式或使用不同的總線時會更快。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/315043.html
