本發(fā)明涉及串行通信技術(shù),特別涉及一種基于rs485橋電路裝置的故障定位方法。
背景技術(shù):
rs485是兩線制、半雙工、差分信號(hào)通訊接口(物理層)。參見(jiàn)圖1,傳統(tǒng)rs485總線允許多個(gè)設(shè)備連接到同一條總線上,這些設(shè)備通常使用modbus協(xié)議格式通訊,每個(gè)設(shè)備預(yù)先設(shè)置一個(gè)485id。主機(jī)采用輪詢的方式跟總線上的設(shè)備交互,通過(guò)485id區(qū)分各個(gè)設(shè)備。主機(jī)發(fā)送請(qǐng)求時(shí)所有設(shè)備均會(huì)收到,但是只有485id相匹配的那個(gè)設(shè)備應(yīng)答,485總線是半雙工的,同一時(shí)間只能有一個(gè)數(shù)據(jù)發(fā)送者。傳統(tǒng)rs485總線的所有傳感器接在一根數(shù)據(jù)線上,當(dāng)任何一個(gè)傳感器發(fā)生故障時(shí),主機(jī)與該傳感器之后傳感器的通信完全中斷,而且也無(wú)法確定到底是哪一個(gè)傳感器發(fā)生故障。特別地,在運(yùn)行過(guò)程中,任一個(gè)傳感器發(fā)生故障時(shí),它并不能報(bào)告主機(jī)。
此外,根據(jù)傳統(tǒng)的rs485總線技術(shù),主機(jī)到傳感器之間的通信線路質(zhì)量是無(wú)法檢測(cè)的。
因此,現(xiàn)有技術(shù)中存在對(duì)一種能夠基于rs485總線進(jìn)行傳感器的故障定位以消除現(xiàn)有技術(shù)存在的缺陷的技術(shù)的需要。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供一種基于rs485橋電路裝置的故障定位方法,可以克服現(xiàn)有技術(shù)存在的問(wèn)題。
本發(fā)明的技術(shù)方案具體是這樣實(shí)現(xiàn)的:
一種基于rs485橋電路裝置的故障確定方法,該方法包括:
主機(jī)向總線上發(fā)送攜帶有橋電路裝置地址uid和命令代碼的數(shù)據(jù)包;
橋電路裝置從它的p端口接收到數(shù)據(jù)包后,解析所接收的通訊數(shù)據(jù)包以得到解析的uid和命令代碼;將解析的uid與該橋電路裝置的uid比較,如解析的uid與該橋電路裝置的uid相同,則該橋電路裝置執(zhí)行該數(shù)據(jù)包中的命令代碼所代表的命令以進(jìn)行與主機(jī)的通信并向主機(jī)發(fā)送響應(yīng)數(shù)據(jù)包;如不相同則忽略所述命令;
具有等于和大于解析的uid并且小于m的地址的每一個(gè)橋電路裝置向與本橋電路裝置最相鄰的、具有大于解析的uid的橋電路裝置發(fā)送心跳包;
每一個(gè)接收到心跳包的橋電路裝置將向本橋電路裝置發(fā)送心跳包的橋電路裝置發(fā)送第一響應(yīng)消息;
發(fā)送心跳包的橋電路裝置如未能接收到來(lái)自最相鄰的、具有大于解析的uid的橋電路裝置的第一響應(yīng)消息,則確定未發(fā)送響應(yīng)的橋電路裝置發(fā)生故障;
發(fā)送心跳包的、未能接收到來(lái)自最相鄰的、具有大于解析的uid的橋電路裝置的第一響應(yīng)消息的橋電路裝置將自身的地址加1作為發(fā)生故障的橋電路裝置地址,并且在向相鄰的、具有小于本橋電路裝置的地址的橋電路裝置發(fā)送第二響應(yīng)消息時(shí)將發(fā)生故障的橋電路裝置地址和故障標(biāo)識(shí)加載到第二響應(yīng)消息中;
位于與主機(jī)通信的橋電路裝置和發(fā)生故障的橋電路裝置之間的每一個(gè)橋電路裝置在向與本橋電路裝置相鄰的、具有小于本橋電路裝置的地址的橋電路裝置發(fā)送第二響應(yīng)消息時(shí)將接收到的發(fā)生故障的橋電路裝置地址和故障標(biāo)識(shí)加載到第二響應(yīng)消息中;
與主機(jī)通信的橋電路裝置在接收到攜帶有生故障的橋電路裝置地址和故障標(biāo)識(shí)的第二響應(yīng)消息后,在向主機(jī)發(fā)送響應(yīng)數(shù)據(jù)包時(shí)將發(fā)生故障的橋電路裝置地址和故障標(biāo)識(shí)加載到響應(yīng)數(shù)據(jù)包中;
主機(jī)根據(jù)接收的響應(yīng)數(shù)據(jù)包中的發(fā)生故障的橋電路裝置地址和故障標(biāo)識(shí)確定發(fā)生故障的橋電路裝置;
其中,m個(gè)橋電路裝置通過(guò)rs485總線串聯(lián)在一起并連接到主機(jī)并且m個(gè)橋電路裝置的地址按照距離主機(jī)從近到遠(yuǎn)依次為1,2,3,…,m。
其中,一個(gè)橋電路裝置包括處理器;作為p端的第一rs485串口,用于通過(guò)總線連接上一個(gè)橋電路裝置;作為n端的第二rs485串口,用于通過(guò)總線連接下一個(gè)橋電路裝置;以及作為橋電路裝置的l端的第三串口,用于連接類型匹配的傳感器,所述處理器與第一rs485串口、第二rs485串口和第三串口進(jìn)行信號(hào)交互。
較佳地,在橋電路裝置從它的p端口接收到數(shù)據(jù)包后,并且解析所接收的通訊數(shù)據(jù)包以得到解析的uid和命令代碼之前,該方法還包括:
橋電路裝置將從它的p端口收到的所述數(shù)據(jù)包時(shí)立即開(kāi)始逐單位信息長(zhǎng)度的先轉(zhuǎn)發(fā)到它的n端口以傳遞到下一個(gè)橋電路裝置;
所述單位信息長(zhǎng)度為1字節(jié)或者1比特。
進(jìn)一步,所述故障定位方法還包括步驟:
主機(jī)將發(fā)生故障的橋電路裝置地址加載和讀取傳感器應(yīng)答數(shù)據(jù)的命令代碼的數(shù)據(jù)包發(fā)送到總線上;
如主機(jī)無(wú)法接收到具有所述故障橋電路裝置地址的橋電路裝置的傳感器的應(yīng)答數(shù)據(jù),則確定是發(fā)生故障的橋電路裝置地址的橋電路裝置的傳感器發(fā)生故障;否則,確定是發(fā)生故障的橋電路裝置地址的橋電路裝置本身發(fā)生故障。
較佳地,在主機(jī)向總線上發(fā)送攜帶有uid和命令代碼的數(shù)據(jù)包的步驟之前,所述方法還包括:
主機(jī)向總線上發(fā)送攜帶有指定橋電路裝置地址和echo命令代碼的數(shù)據(jù)包;
如無(wú)法接收到指定橋電路裝置地址的橋電路裝置發(fā)送的echo響應(yīng)消息,則確定指定橋電路裝置地址的橋電路裝置發(fā)生故障。
其中,指定橋電路裝置地址的橋電路裝置接收到攜帶有指定橋電路裝置地址和echo命令代碼的數(shù)據(jù)包后,向主機(jī)返回?cái)y帶原始echo命令代碼的響應(yīng)消息。
其中,位于主機(jī)以及m個(gè)橋電路裝置的每一段總線都是獨(dú)立的。
其中,每一個(gè)橋電路裝置的uid都是唯一的。
如上可見(jiàn),在本發(fā)明中的基于rs485橋電路裝置的故障定位方法,提供了可以用于基于rs485橋電路裝置的新故障定位方式。由于傳感器并不是直接連接到總線上,而是通過(guò)橋電路裝置連接到總線上,因此可以避免了現(xiàn)有技術(shù)中任一個(gè)傳感器發(fā)生故障導(dǎo)致主機(jī)與它之后的傳感器無(wú)法通信的問(wèn)題;此外,每一個(gè)橋電路裝置與主機(jī)的通信都是相對(duì)獨(dú)立的,不與主機(jī)通信的橋電路裝置可以利用發(fā)送心跳包的方式確定與它相鄰的在后橋電路裝置是否發(fā)生故障,并將發(fā)送故障的橋電路裝置地址通過(guò)一個(gè)個(gè)在前的橋電路裝置最終傳遞報(bào)告給主機(jī),從而可以確定發(fā)生故障的橋電路裝置。而且,通過(guò)主機(jī)主動(dòng)發(fā)送的取傳感器數(shù)據(jù)命令,可以確定是橋電路裝置發(fā)生故障,還是與橋電路裝置連接的傳感器發(fā)生故障。
附圖說(shuō)明
圖1是現(xiàn)有技術(shù)中的基于rs485的傳統(tǒng)總線電路示意圖。
圖2為本發(fā)明實(shí)施例中的基于rs485的橋電路裝置的組成示意圖。
圖3為本發(fā)明實(shí)施例中的基于rs485的橋電路裝置的總線電路示意圖。
圖4為本發(fā)明實(shí)施例中的基于rs485橋電路裝置的故障定位方法的流程圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。
本發(fā)明中,基于rs485的橋電路裝置具有三個(gè)端口,分別為l端,p端和n端,p端和n端分別用于連接上一個(gè)和下一個(gè)橋電路裝置,l端用于連接到傳感器?;趓s485的橋電路裝置直接連接到rs485總線上。這樣,傳感器不再直接連接到rs485總線上,主機(jī)不再直接與傳感器交互,而是使用485總線協(xié)議與橋電路裝置交互。橋電路裝置及與其連接的傳感器可以稱為rs485總線上的一個(gè)節(jié)點(diǎn)。rs485總線上的每?jī)蓚€(gè)橋電路裝置之間都是一段獨(dú)立的數(shù)據(jù)線,甚至基于rs485的橋電路裝置連接傳感器的那段線即l端也是一段獨(dú)立的數(shù)據(jù)線,基于rs485的橋電路裝置通過(guò)接力的方式在節(jié)點(diǎn)之間傳遞數(shù)據(jù)??梢?jiàn),采用本發(fā)明,節(jié)點(diǎn)之間的數(shù)據(jù)線長(zhǎng)度變短了,因此信號(hào)衰減小了,信號(hào)線上的信號(hào)抗干擾能力也相應(yīng)變強(qiáng)。
本發(fā)明中,總線上的基于rs485的橋電路裝置是數(shù)據(jù)搬運(yùn)工即數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備,rs485總線也是使用rs485物理接口,但不使用modbus協(xié)議,而是使用自定義協(xié)議。自定義協(xié)議在本發(fā)明中不是必須的,本發(fā)明也可以由本領(lǐng)域技術(shù)人員采用其它協(xié)議,因此在此略去對(duì)自定義協(xié)議的介紹。橋電路裝置是主機(jī)跟傳感器通訊的橋梁,它為主機(jī)和傳感器提供一條不同與傳統(tǒng)rs485總線的通訊線路。rs485總線上只連接基于rs485的橋電路裝置,不像傳統(tǒng)rs485總線那樣直接連接傳感器。使用rs485總線時(shí),主機(jī)不再直接跟傳感器交互,而是使用rs485橋協(xié)議跟橋電路裝置交互。橋協(xié)議提供命令供主機(jī)將打包后的“傳感器指令”轉(zhuǎn)發(fā)給傳感器來(lái)實(shí)現(xiàn)主機(jī)跟傳感器的交互。
下面結(jié)合圖2和圖3對(duì)本發(fā)明的基于rs485的橋電路裝置進(jìn)行詳細(xì)介紹。
圖2示出了根據(jù)本發(fā)明實(shí)施例的基于rs485的橋電路裝置的組成示意圖。橋電路裝置包括處理器,第一rs485串口和第二rs485串口。第一rs485串口用于通過(guò)總線連接上一個(gè)橋電路裝置的第二rs485串口,第二rs485串口用于通過(guò)總線連接下一個(gè)橋電路裝置的第一rs485串口。所述橋電路裝置進(jìn)一步包括作為橋電路裝置的l端的第三串口,用于提供多種類型的接口以供連接類型匹配的傳感器。
本發(fā)明中,第一rs485串口作為橋電路裝置的p端,用于通過(guò)總線連接上一個(gè)橋電路裝置;第二rs485串口作為橋電路裝置的n端,用于通過(guò)總線連接下一個(gè)橋電路裝置。所述處理器與第一rs485串口、第二rs485串口和第三串口進(jìn)行信號(hào)交互。其中,所述第三串口為rs485、rs422和rs232串口的集合串口,用于連接基于rs485工作的傳感器,基于rs422工作的傳感器和基于rs232工作的傳感器。較佳地,所述橋電路裝置進(jìn)一步包括輔助串口,用于連接期望類型的傳感器。較佳地,所述處理器為c51芯片,所述第一rs485串口和第二rs485串口為rj45接口。根據(jù)本發(fā)明的實(shí)施例,第一rs485串口,第二rs485串口和第三串口是彼此獨(dú)立的,能夠彼此獨(dú)立地同時(shí)進(jìn)行數(shù)據(jù)通信。較佳地,橋電路裝置還包括位于l端的干節(jié)點(diǎn)端口,用于連接干節(jié)點(diǎn)。
本發(fā)明的實(shí)施例中,雖然基于rs485的接口是半雙工通訊的,但基于rs485的橋電路裝置內(nèi)部的三個(gè)接口是獨(dú)立的,它們可以同時(shí)進(jìn)行數(shù)據(jù)通訊,也就是說(shuō)橋電路裝置在將p端的數(shù)據(jù)轉(zhuǎn)發(fā)到n端時(shí),仍然可以跟l端連接的傳感器進(jìn)行通訊。這種工作方式比半雙工通訊的傳統(tǒng)rs485總線更高效。
傳統(tǒng)rs485總線只能接rs485接口的傳感器,而且通常只能以modbus協(xié)議進(jìn)行通訊。而本發(fā)明中,基于rs485的橋電路裝置的l端可以支持多種類型的傳感器,這些傳感器的協(xié)議可以是任意的。作為選擇,l端也可以配置成僅連接一種類型的傳感器。在rs485橋總線上,主機(jī)與這些不同類型傳感器之間通訊不會(huì)產(chǎn)生任何沖突,因?yàn)閷?shí)際直接跟傳感器通訊的橋電路裝置僅限于它所連接的那個(gè)rs485橋電路裝置。
圖3示出了根據(jù)本發(fā)明實(shí)施例的基于rs485的橋電路裝置的總線電路示意圖。如圖4所示,基于rs485的總線電路包括m個(gè)串聯(lián)連接在rs485總線上的節(jié)點(diǎn)和主機(jī),m為正整數(shù)。每一個(gè)節(jié)點(diǎn)均為如前所述的橋電路裝置,第一個(gè)節(jié)點(diǎn)的p端與所述主機(jī)連接,第m個(gè)節(jié)點(diǎn)的l端懸空,第i個(gè)節(jié)點(diǎn)的p端連接到第i-1個(gè)節(jié)點(diǎn)的l端,i為2,3,4,…,m-1。第k個(gè)節(jié)點(diǎn)和第k-1個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)線為獨(dú)立數(shù)據(jù)線段,k為2,3,4,…,m。較佳地,節(jié)點(diǎn)的p端、l端和n端中的每一個(gè)端口配置有4根線,其中2根線為信號(hào)線,另外2根線一根為地線,一根為5v電源線。較佳地,所述主機(jī)通過(guò)橋電路裝置與傳感器進(jìn)行數(shù)據(jù)交互。較佳地,在主機(jī)通過(guò)橋電路裝置與傳感器進(jìn)行數(shù)據(jù)交互,所述橋電路裝置還可以與其后的橋電路裝置通信。
參見(jiàn)圖3,基于rs485的總線電路中,每?jī)蓚€(gè)橋電路裝置即節(jié)點(diǎn)之間都是一段獨(dú)立的數(shù)據(jù)線,甚至基于rs485的橋電路裝置即l端連接傳感器的那段線也是一段獨(dú)立的數(shù)據(jù)線,橋電路裝置通過(guò)接力的方式在節(jié)點(diǎn)之間傳遞數(shù)據(jù)。顯然,由于節(jié)點(diǎn)之間的數(shù)據(jù)線長(zhǎng)度變短了,因而信號(hào)衰減變小,抗干擾能力也就變強(qiáng)了。
根據(jù)本發(fā)明的實(shí)施例,主機(jī)發(fā)送給橋電路裝置的數(shù)據(jù)包基本格式如下:
【命令開(kāi)始符】+【橋電路裝置uid】+【命令代碼】+【內(nèi)容】+【結(jié)束符】
橋協(xié)議要求【命令開(kāi)始符】和【結(jié)束符】之間的數(shù)據(jù)要進(jìn)行轉(zhuǎn)碼,以免這些數(shù)據(jù)中出現(xiàn)跟開(kāi)始符、結(jié)束符沖突的字符。本發(fā)明中,轉(zhuǎn)碼規(guī)則是8bit轉(zhuǎn)7bit,計(jì)算機(jī)每個(gè)字節(jié)由8個(gè)比特位組成,轉(zhuǎn)碼是將一組字節(jié)以每7個(gè)比特位重新組織,然后形成一組新的數(shù)據(jù),新數(shù)據(jù)每個(gè)字節(jié)只使用低7位,最高位總是0(最高位為1是橋協(xié)議的特殊控制符,例如命令開(kāi)始符和結(jié)束符),轉(zhuǎn)碼后的數(shù)據(jù)字節(jié)會(huì)比原數(shù)據(jù)字節(jié)多,但可以保證不會(huì)跟橋協(xié)議的特殊控制符沖突。
橋電路裝置回應(yīng)的數(shù)據(jù)包中可能會(huì)包含兩份【內(nèi)容】數(shù)據(jù)。因?yàn)閞s485通訊是半雙工的,一問(wèn)一答式的,為了避免沖突,橋電路裝置不能主動(dòng)向主機(jī)發(fā)送數(shù)據(jù)包。有時(shí)候橋電路裝置需要向主機(jī)報(bào)告一些事件,例如總線上新接入了一個(gè)橋電路裝置,這個(gè)事件會(huì)在主機(jī)發(fā)出命令并等待回應(yīng)時(shí),橋電路裝置將事件放在第2份【內(nèi)容】數(shù)據(jù)中匯報(bào)給主機(jī)。
下面介紹本發(fā)明中的主要的rs485橋通訊命令代碼和功能。
主機(jī)通過(guò)uid指定與某個(gè)橋電路裝置通訊,每個(gè)橋電路裝置都有一個(gè)自動(dòng)分配的uid。本發(fā)明中,【命令代碼】是單字節(jié)數(shù)值,命令需要的參數(shù)放在【內(nèi)容】字段中。橋電路裝置回應(yīng)的數(shù)據(jù)包,【命令代碼】是所回應(yīng)命令的命令代碼數(shù)值的反碼。
主要的rs485橋通訊命令和功能如下:
1、要求總線上的橋電路裝置自動(dòng)分配地址(即uid)。
2、取“指定橋電路裝置”的硬件信息(版本號(hào)、類型、出廠日期等信息)。
3、要求“指定橋電路裝置”原樣回復(fù)命令中攜帶的數(shù)據(jù),用于測(cè)試線路通訊質(zhì)量。
4、用一條命令獲取總線所有橋電路裝置的io輸入狀態(tài)(例如干節(jié)點(diǎn)輸入狀態(tài))。
5、取“指定橋電路裝置”的指定io的輸入狀態(tài)(例如干節(jié)點(diǎn)輸入狀態(tài))。
6、將傳感器指令告訴“指定橋電路裝置”。橋電路裝置記住指令并自動(dòng)的重復(fù)向傳感器發(fā)送這些指令,實(shí)現(xiàn)自動(dòng)從傳感器取數(shù)。該命令適合固定不變的傳感器指令。
7、讀取“指定橋電路裝置”收到的傳感器應(yīng)答數(shù)據(jù)。橋電路裝置自動(dòng)從傳感器取到數(shù)據(jù)后,先將數(shù)據(jù)存放到自己的內(nèi)存區(qū)中,能保存多少條歷史數(shù)據(jù)要看單條數(shù)據(jù)的大小。主機(jī)發(fā)送該命令從橋電路裝置中讀取這些傳感器歷史數(shù)據(jù)。這條命令跟上一條命令即第條命令是成對(duì)的。
8、要求“指定橋電路裝置”開(kāi)啟主機(jī)到傳感器的直接通訊通道。有些傳感器通訊需要多次交互,或則,傳感器數(shù)據(jù)量太大,橋電路裝置無(wú)法對(duì)這樣的傳感器執(zhí)行自動(dòng)取數(shù)。主機(jī)可以用這條命令跟傳感器建立直接通訊通道,橋電路裝置負(fù)責(zé)主機(jī)和傳感器之間的雙向數(shù)據(jù)轉(zhuǎn)發(fā)。
9、橋電路裝置內(nèi)部事件通知,主要是用于橋電路裝置之間的一些事件溝通。
參見(jiàn)圖4,示出了本發(fā)明實(shí)施例中的基于rs485橋電路裝置的故障定位方法的流程圖。在步驟410,主機(jī)向總線上發(fā)送攜帶有橋電路裝置地址uid和命令代碼的數(shù)據(jù)包。接下來(lái),在步驟420,橋電路裝置從它的p端口接收到數(shù)據(jù)包后,解析所接收的通訊數(shù)據(jù)包以得到解析的uid和命令代碼;將解析的uid與該橋電路裝置的uid比較,如解析的uid與該橋電路裝置的uid相同,則該橋電路裝置執(zhí)行該數(shù)據(jù)包中的命令代碼所代表的命令以進(jìn)行與主機(jī)的通信并向主機(jī)發(fā)送響應(yīng)數(shù)據(jù)包;如不相同則忽略所述命令。
根據(jù)本發(fā)明的基于rs485橋電路裝置的總線技術(shù),總線上的任何一個(gè)橋電路裝置開(kāi)始接收到數(shù)據(jù)包時(shí),均先判斷數(shù)據(jù)包中的命令開(kāi)始符是否表明數(shù)據(jù)包為攜帶自動(dòng)分配地址的命令代碼的數(shù)據(jù)包。根據(jù)本發(fā)明的實(shí)施例,所述數(shù)據(jù)包是由主機(jī)向rs485總線上發(fā)送的,該數(shù)據(jù)包的格式為:依次按序排列的命令開(kāi)始符、橋電路裝置的uid、命令代碼、第一內(nèi)容和結(jié)束符;其中,命令開(kāi)始符和結(jié)束符之間的數(shù)據(jù)被轉(zhuǎn)碼,命令開(kāi)始符的最高位為“1”,用于表示一個(gè)數(shù)據(jù)包的開(kāi)始,其它字節(jié)都是以“0”開(kāi)始的字節(jié);所述轉(zhuǎn)碼為將8比特一字節(jié)的數(shù)據(jù)轉(zhuǎn)換為以7比特為一字節(jié)的數(shù)據(jù)。較佳地,本發(fā)明的實(shí)施例是以命令開(kāi)始符的值來(lái)判斷該數(shù)據(jù)包所包含的命令代碼是否是自動(dòng)分配地址的命令,并且命令開(kāi)始符所在的字節(jié)的值表示是何種類型的命令代碼。
然而,本發(fā)明的基于rs485橋電路裝置的故障定位方法主要是涉及到故障定位,它可以不關(guān)心總線上的數(shù)據(jù)包是否攜帶有自動(dòng)分配地址的命令,只要是可以根據(jù)數(shù)據(jù)包進(jìn)行故障定位就不影響本發(fā)明的實(shí)施。此外,如果總線上的數(shù)據(jù)包是否攜帶有自動(dòng)分配地址的命令,主機(jī)將會(huì)自動(dòng)為總線上的橋電路裝置重新分配唯一的uid。該重新分配唯一的uid的具體過(guò)程不屬于本發(fā)明的技術(shù)方案的構(gòu)成部分,在此略去詳述。
在步驟430,具有等于和大于解析的uid并且小于m的地址的每一個(gè)橋電路裝置向與本橋電路裝置最相鄰的、具有大于解析的uid的橋電路裝置發(fā)送心跳包。例如,如果圖3中的節(jié)點(diǎn)3正在與主機(jī)通信,那么節(jié)點(diǎn)3及其之后的節(jié)點(diǎn)4,5,…,m-1中的橋電路裝置都可以向后發(fā)送一個(gè)心跳包。
在步驟440,每一個(gè)接收到心跳包的橋電路裝置將向本橋電路裝置發(fā)送心跳包的橋電路裝置發(fā)送第一響應(yīng)消息。在步驟450,發(fā)送心跳包的橋電路裝置如未能接收到來(lái)自最相鄰的、具有大于解析的uid的橋電路裝置的第一響應(yīng)消息,則確定未發(fā)送響應(yīng)的橋電路裝置發(fā)生故障。例如,如果節(jié)點(diǎn)6發(fā)生故障,則節(jié)點(diǎn)5中的橋電路裝置無(wú)法接收到第一響應(yīng)消息。
在步驟460,發(fā)送心跳包的、未能接收到來(lái)自最相鄰的、具有大于解析的uid的橋電路裝置的第一響應(yīng)消息的橋電路裝置將自身的地址加1作為發(fā)生故障的橋電路裝置地址,并且在向相鄰的、具有小于本橋電路裝置的地址的橋電路裝置發(fā)送第二響應(yīng)消息時(shí)將發(fā)生故障的橋電路裝置地址和故障標(biāo)識(shí)加載到第二響應(yīng)消息中。例如,如果節(jié)點(diǎn)6發(fā)生故障,則節(jié)點(diǎn)5中的橋電路裝置將它的地址加1作為發(fā)生故障的橋電路裝置地址,即表明是地址為“6”的橋電路裝置發(fā)生故障。
在步驟470,位于與主機(jī)通信的橋電路裝置和發(fā)生故障的橋電路裝置之間的每一個(gè)橋電路裝置在向與本橋電路裝置相鄰的、具有小于本橋電路裝置的地址的橋電路裝置發(fā)送第二響應(yīng)消息時(shí)將接收到的發(fā)生故障的橋電路裝置地址和故障標(biāo)識(shí)加載到第二響應(yīng)消息中。例如,如果是主機(jī)正在與節(jié)點(diǎn)3中的橋電路裝置通信,則在節(jié)點(diǎn)6的橋電路裝置發(fā)生故障的情況下,節(jié)點(diǎn)5中的橋電路裝置將故障地址“6”和故障標(biāo)識(shí)加載到第二響應(yīng)消息中發(fā)送給節(jié)點(diǎn)4中的橋電路裝置;節(jié)點(diǎn)4中的橋電路裝置在收到故障地址和故障標(biāo)識(shí)后,又將故障地址和故障標(biāo)識(shí)記載到它要發(fā)送給節(jié)點(diǎn)3中的橋電路裝置的第二響應(yīng)消息中。
在步驟480,與主機(jī)通信的橋電路裝置在接收到攜帶有生故障的橋電路裝置地址和故障標(biāo)識(shí)的第二響應(yīng)消息后,在向主機(jī)發(fā)送響應(yīng)數(shù)據(jù)包時(shí)將發(fā)生故障的橋電路裝置地址和故障標(biāo)識(shí)加載到響應(yīng)數(shù)據(jù)包中。例如,如果是主機(jī)正在與節(jié)點(diǎn)3中的橋電路裝置通信,在節(jié)點(diǎn)6的橋電路裝置發(fā)生故障的情況下,節(jié)點(diǎn)3中的橋電路裝置將故障地址和故障標(biāo)識(shí)加載到響應(yīng)數(shù)據(jù)包中發(fā)送給主機(jī)。
在步驟490,主機(jī)根據(jù)接收的響應(yīng)數(shù)據(jù)包中的發(fā)生故障的橋電路裝置地址和故障標(biāo)識(shí)確定發(fā)生故障的橋電路裝置。
下面舉一個(gè)例子說(shuō)明本發(fā)明的故障定位方法的實(shí)現(xiàn)。
如圖3所示,假設(shè)主機(jī)持續(xù)跟節(jié)點(diǎn)2進(jìn)行交互,如果節(jié)點(diǎn)1有故障需要上報(bào)(比如傳感器死機(jī)了),它可以篡改節(jié)點(diǎn)2的響應(yīng)數(shù)據(jù)包來(lái)實(shí)現(xiàn)故障上報(bào),因?yàn)楣?jié)點(diǎn)2的數(shù)據(jù)包是經(jīng)過(guò)它傳遞的。現(xiàn)在,架設(shè)節(jié)點(diǎn)10發(fā)現(xiàn)它后邊的節(jié)點(diǎn)11故障了。如果主機(jī)向節(jié)點(diǎn)10發(fā)命令,它可以趁機(jī)匯報(bào)這條故障,但是主機(jī)一直跟節(jié)點(diǎn)2通訊,節(jié)點(diǎn)10不能直接將故障發(fā)送給主機(jī)。根據(jù)本發(fā)明,節(jié)點(diǎn)10如下確定知道節(jié)點(diǎn)11故障。當(dāng)主機(jī)與節(jié)點(diǎn)2交互時(shí),節(jié)點(diǎn)2右邊路段空閑,節(jié)點(diǎn)2主動(dòng)向右發(fā)送心跳包,要求節(jié)點(diǎn)3做出響應(yīng)。節(jié)點(diǎn)3應(yīng)該會(huì)響應(yīng),而且節(jié)點(diǎn)3響應(yīng)數(shù)據(jù)被節(jié)點(diǎn)2收到的時(shí)間小于節(jié)點(diǎn)2響應(yīng)數(shù)據(jù)被主機(jī)收到的時(shí)間,因?yàn)樾奶止?jié)數(shù)比較少,也就是說(shuō)節(jié)點(diǎn)2不會(huì)因?yàn)榈却?jié)點(diǎn)3的應(yīng)答而導(dǎo)致不能及時(shí)向下轉(zhuǎn)發(fā)下一條主機(jī)命令。節(jié)點(diǎn)3的響應(yīng)數(shù)據(jù)除了告訴節(jié)點(diǎn)2它還活著,還能趁機(jī)向節(jié)點(diǎn)2報(bào)告其它事件。這種傳感器內(nèi)部狀態(tài)溝通數(shù)據(jù)包僅限兩個(gè)橋電路裝置之間,不會(huì)向前或向后轉(zhuǎn)發(fā)。節(jié)點(diǎn)10就是通過(guò)心跳包判斷出節(jié)點(diǎn)11出故障了,因?yàn)樗詹坏焦?jié)點(diǎn)11的響應(yīng)數(shù)據(jù),然后它利用響應(yīng)節(jié)點(diǎn)9心跳包的機(jī)會(huì)將故障地址和故障標(biāo)識(shí)告訴節(jié)點(diǎn)9,就這樣一直這樣傳遞到節(jié)點(diǎn)2,節(jié)點(diǎn)2就能夠?qū)⒐收系刂泛凸收蠘?biāo)識(shí)插入到響應(yīng)數(shù)據(jù)包中發(fā)給主機(jī)了。
較佳地,在橋電路裝置從它的p端口接收到數(shù)據(jù)包后,并且解析所接收的通訊數(shù)據(jù)包以得到解析的uid和命令代碼之前,本發(fā)明的實(shí)施例的故障定位方法還包括:橋電路裝置將從它的p端口收到的所述數(shù)據(jù)包時(shí)立即開(kāi)始逐單位信息長(zhǎng)度的先轉(zhuǎn)發(fā)到它的n端口以傳遞到下一個(gè)橋電路裝置;所述單位信息長(zhǎng)度為1字節(jié)或者1比特。
較佳地,在步驟490之后,本發(fā)明的故障定位方法還包括步驟:主機(jī)將發(fā)生故障的橋電路裝置地址加載和讀取傳感器應(yīng)答數(shù)據(jù)的命令代碼的數(shù)據(jù)包發(fā)送到總線上;如主機(jī)無(wú)法接收到具有所述故障橋電路裝置地址的橋電路裝置的傳感器的應(yīng)答數(shù)據(jù),則確定是發(fā)生故障的橋電路裝置地址的橋電路裝置的傳感器發(fā)生故障;否則,確定是發(fā)生故障的橋電路裝置地址的橋電路裝置本身發(fā)生故障。
較佳地,本發(fā)明的故障定位方法中,在主機(jī)向總線上發(fā)送攜帶有uid和命令代碼的數(shù)據(jù)包的步驟之前,所述方法還包括:主機(jī)向總線上發(fā)送攜帶有指定橋電路裝置地址和echo命令代碼的數(shù)據(jù)包;如無(wú)法接收到指定橋電路裝置地址的橋電路裝置發(fā)送的echo響應(yīng)消息,則確定指定橋電路裝置地址的橋電路裝置發(fā)生故障。其中,指定橋電路裝置地址的橋電路裝置接收到攜帶有指定橋電路裝置地址和echo命令代碼的數(shù)據(jù)包后,向主機(jī)返回?cái)y帶原始echo命令代碼的響應(yīng)消息。通過(guò)發(fā)送echo命令,可以判斷總線線路質(zhì)量。因?yàn)閑cho命令由橋電路裝置原樣返回,主機(jī)可以通過(guò)比較發(fā)出和收到的數(shù)據(jù)來(lái)判斷總線線路錯(cuò)碼的情況,當(dāng)發(fā)現(xiàn)錯(cuò)碼率太高(線路質(zhì)量差)時(shí),可以提示用戶解決它。
其中,位于主機(jī)以及m個(gè)橋電路裝置的每一段總線都是獨(dú)立的。
在本發(fā)明中的基于rs485橋電路裝置的故障定位方法,提供了可以用于基于rs485橋電路裝置的新故障定位方式。由于傳感器并不是直接連接到總線上,而是通過(guò)橋電路裝置連接到總線上,因此可以避免了現(xiàn)有技術(shù)中任一個(gè)傳感器發(fā)生故障導(dǎo)致主機(jī)與它之后的傳感器無(wú)法通信的問(wèn)題;此外,每一個(gè)橋電路裝置與主機(jī)的通信都是相對(duì)獨(dú)立的,不與主機(jī)通信的橋電路裝置可以利用發(fā)送心跳包的方式確定與它相鄰的在后橋電路裝置是否發(fā)生故障,并將發(fā)送故障的橋電路裝置地址通過(guò)一個(gè)個(gè)在前的橋電路裝置最終傳遞報(bào)告給主機(jī),從而可以確定發(fā)生故障的橋電路裝置。而且,通過(guò)主機(jī)主動(dòng)發(fā)送的取傳感器數(shù)據(jù)命令,可以確定是橋電路裝置發(fā)生故障,還是與橋電路裝置連接的傳感器發(fā)生故障。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。