645 97規約是電表使用的國標通訊協議,使用非常廣泛。一般通過RS485總線讀當前功率、當前電壓、本月電量等數據。但是由于RS485總線原理的限制,不能有兩臺主機同時去讀電表。但是在能源監控領域,經常需要有多個計算機、顯示屏獲取電表的數據。
普通的“透傳”的RS485轉TCP/IP的產品在這里無法使用,這里就介紹一下卓嵐的ZLAN5143的多主機功能如何解決這個問題。

如圖:ZLAN5143的多主機功能會調度RS485的總線,當主機1和主機2同時需要使用總線的時候ZLAN5143則會擔任“裁判”的角色,禁止同時搶占,并合理調度總線的使用時間,從而起到“多主機”順利同時訪問的效果。多主機還可以讓主機1查詢的返回數據不會發送到主機2,引起數據干擾。
需要指出的是Modbus網關一般具有自動查詢和存儲寄存器內容的功能,從而解決多主機訪問的沖突問題,但是此類Modbus網關對于非Modbus RTU的RS485協議(例如645協議)則無能為力。但是5143則可以同樣可以適用于非Modbus RTU類型的多主機實現。
首先我們測試一下不啟用多主機,而是普通“透傳”方式下的情況:

我們使用兩個SocketDlgTest工具連接上5143,不斷同時發送645的協議指令68 50 00 00 00 00 00 68 01 02 46 C7 30 16,如圖所示本來為:68 50 00 00 00 00 00 68 81 06 46 c7 53 35 34 33 a3 16的指令沖突后變為68 50 00 00 00 00 00 68 81 06 c6。也就是出現丟失和誤碼。另外只有一個SocketDlgTest發送時,在數據返回的時候兩個SocketDlgTest窗口都收到數據,這樣也不符合要求。應該是不發送數據的窗口不收到任何返回。
現在開啟“多主機功能”,配置5143時保持“轉化協議”為“無”,點擊“更多高級選項…”,設置如下。

由于這里串口為1200bps設置超時為1000。返回“設備設置”后點擊“修改設置”。此后再進行以上的實驗,發現無論如何同時發送,都會得到正確的數據。并且不發送的SocketDlgTest窗口不會收到數據。真正實現了防沖突和獨立收發通訊。另外結合ZLvricom的虛擬串口,可以在兩個主機上使用原來的串口軟件進行通訊。
總之,“多主機功能”為各類非Modbus RTU的RS485儀表的多主機訪問提供了一種有效的方案。
