645 97規(guī)約是電表使用的國(guó)標(biāo)通訊協(xié)議,使用非常廣泛。一般通過RS485總線讀當(dāng)前功率、當(dāng)前電壓、本月電量等數(shù)據(jù)。但是由于RS485總線原理的限制,不能有兩臺(tái)主機(jī)同時(shí)去讀電表。但是在能源監(jiān)控領(lǐng)域,經(jīng)常需要有多個(gè)計(jì)算機(jī)、顯示屏獲取電表的數(shù)據(jù)。
普通的“透?jìng)鳌钡腞S485轉(zhuǎn)TCP/IP的產(chǎn)品在這里無(wú)法使用,這里就介紹一下卓嵐的ZLAN5143的多主機(jī)功能如何解決這個(gè)問題。
如圖:ZLAN5143的多主機(jī)功能會(huì)調(diào)度RS485的總線,當(dāng)主機(jī)1和主機(jī)2同時(shí)需要使用總線的時(shí)候ZLAN5143則會(huì)擔(dān)任“裁判”的角色,禁止同時(shí)搶占,并合理調(diào)度總線的使用時(shí)間,從而起到“多主機(jī)”順利同時(shí)訪問的效果。多主機(jī)還可以讓主機(jī)1查詢的返回?cái)?shù)據(jù)不會(huì)發(fā)送到主機(jī)2,引起數(shù)據(jù)干擾。
需要指出的是Modbus網(wǎng)關(guān)一般具有自動(dòng)查詢和存儲(chǔ)寄存器內(nèi)容的功能,從而解決多主機(jī)訪問的沖突問題,但是此類Modbus網(wǎng)關(guān)對(duì)于非Modbus RTU的RS485協(xié)議(例如645協(xié)議)則無(wú)能為力。但是5143則可以同樣可以適用于非Modbus RTU類型的多主機(jī)實(shí)現(xiàn)。
首先我們測(cè)試一下不啟用多主機(jī),而是普通“透?jìng)鳌狈绞较碌那闆r:
我們使用兩個(gè)SocketDlgTest工具連接上5143,不斷同時(shí)發(fā)送645的協(xié)議指令68 50 00 00 00 00 00 68 01 02 46 C7 30 16,如圖所示本來(lái)為:68 50 00 00 00 00 00 68 81 06 46 c7 53 35 34 33 a3 16的指令沖突后變?yōu)?8 50 00 00 00 00 00 68 81 06 c6。也就是出現(xiàn)丟失和誤碼。另外只有一個(gè)SocketDlgTest發(fā)送時(shí),在數(shù)據(jù)返回的時(shí)候兩個(gè)SocketDlgTest窗口都收到數(shù)據(jù),這樣也不符合要求。應(yīng)該是不發(fā)送數(shù)據(jù)的窗口不收到任何返回。
現(xiàn)在開啟“多主機(jī)功能”,配置5143時(shí)保持“轉(zhuǎn)化協(xié)議”為“無(wú)”,點(diǎn)擊“更多高級(jí)選項(xiàng)…”,設(shè)置如下。
由于這里串口為1200bps設(shè)置超時(shí)為1000。返回“設(shè)備設(shè)置”后點(diǎn)擊“修改設(shè)置”。此后再進(jìn)行以上的實(shí)驗(yàn),發(fā)現(xiàn)無(wú)論如何同時(shí)發(fā)送,都會(huì)得到正確的數(shù)據(jù)。并且不發(fā)送的SocketDlgTest窗口不會(huì)收到數(shù)據(jù)。真正實(shí)現(xiàn)了防沖突和獨(dú)立收發(fā)通訊。另外結(jié)合ZLvricom的虛擬串口,可以在兩個(gè)主機(jī)上使用原來(lái)的串口軟件進(jìn)行通訊。
總之,“多主機(jī)功能”為各類非Modbus RTU的RS485儀表的多主機(jī)訪問提供了一種有效的方案。