2013-07-11 100 views
1

我必須從通過RS485-USB串行通信電纜連接的某些設備讀取數據。這些設備使用modbus RTU,但使用modbus ASCII的設備除外。
我可以在同一根電纜上說兩種協議嗎?我認爲RTU單元不會回覆ASCII請求,反之亦然,但這可能會導致問題嗎?有沒有人嘗試過或有過任何經驗?Modbus RTU和ASCII在同一條RS485電纜上

我沒有任何設備在這裏嘗試,我必須直接在客戶端設置一切。

這將是我理想的配置

PC_USB ---------- RS485 + RTU ------ RS485 + RTU ------ RS485 + RTU-- ---- RS485 + ASCII

如果這不工作,我不得不切換到像下面

PC_USB解決---------- RS485 + RTU ------ RS485 + RTU ------ RS485 + RTU
PC_USB ---------- RS485 + ASCII

由於硬件,電纜和位置的一些限制,這將是非常有問題的。

回答

0

簡短答案是肯定的。只要消息不含糊,您可以在RS485上儘可能多地使用協議。

我在共享的RS485線路上有許多光伏逆變器,以及許多其他傳感器,這些傳感器說出完全不同的協議。這兩類設備共享相同的線路,沒有問題。

2

這可能是一個挑戰...得到規範here

  • 根據規範,MODBUS ASCII普遍採用的是7位數據位字符格式,而Modbus RTU的絕對需要8個數據位的副本。因此,除非您可以將Modbus ASCII設備配置爲切換到RTU兼容字符格式8個數據位,否則您需要連續在兩種模式之間切換PC的串行端口。
  • 在Modbus ASCII中,每個有效負載字節都被編碼爲兩個ASCII碼,在RTU中,每個字節都以字節形式發送。這可能會導致從機被其他協議中傳輸的字節觸發,而這些協議錯誤地將其解釋爲從機地址。這可以觸發他們回覆一條錯誤消息,這可以有效地消除你的溝通。這將取決於modbus從屬實施的穩健性以及7位和8位字符格式之間的交替可能有助於緩解這個問題。

我想你必須嘗試一下,並執行足夠長的實際測試,看看它是否足夠滿足您的需求。

+0

我提高了你的答案,因爲它非常完整,但接受了G_G的答案,因爲它實際上回答了我的問題。無論如何,最終我們只能使用RTU設備=) –

+0

這確實是最簡單的解決方案。 – fvu

1

是的,這可以完成,但是如果您在開發代碼時有確切的設備來驗證操作,它會有所幫助。

我在LabVIEW中,將 只聽一個串行端口,並捕獲請求, 解析它們,並且,如果需要的話,提供一個硬編碼的響應想出了一個「RS_232-485從模擬器」。

的關鍵是將串行參數都必須是相同的: 波特率,奇偶校驗位,停止位等我的默認值是9600,無,8,1

這也適用於對「 使用「=」和「#」作爲消息的第一個字符的「特殊」RS-232設備。

設置新設備或軟件 爲傳統設備編寫軟件驅動程序 以及作爲現有系統的故障排除工具時非常方便。

= 可以發覺你的幾個問題:

  1. 有些RS-485器件具有+和 - 識別錯誤的通信線路,
  2. 並非所有設備都需要或將使用「額外的停止位',當使用無奇偶校驗,
  3. 當一些數據使用HEX代碼與ASCII代碼時,請注意 - 首先看起來一樣!