麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

基于RS485橋電路裝置的通信方法與流程

文檔序號:11177084閱讀:1242來源:國知局
基于RS485橋電路裝置的通信方法與流程

本發(fā)明涉及串行通信技術(shù),特別涉及一種基于rs485橋電路裝置的通信方法。



背景技術(shù):

rs485是兩線制、半雙工、差分信號通訊接口(物理層)。參見圖1,傳統(tǒng)rs485總線允許多個設(shè)備連接到同一條總線上,這些設(shè)備通常使用modbus協(xié)議格式通訊,每個設(shè)備預(yù)先設(shè)置一個485id。主機(jī)采用輪詢的方式跟總線上的設(shè)備交互,通過485id區(qū)分各個設(shè)備。主機(jī)發(fā)送請求時所有設(shè)備均會收到,但是只有485id相匹配的那個設(shè)備應(yīng)答,485總線是半雙工的,同一時間只能有一個數(shù)據(jù)發(fā)送者。傳統(tǒng)rs485總線的所有傳感器接在一根數(shù)據(jù)線上,線越長,信號衰減越嚴(yán)重,通訊就越容易受到外界電磁干擾。

此外,根據(jù)傳統(tǒng)的rs485總線技術(shù),還存在如下缺點(diǎn):廣播式通訊總線上垃圾信息過多,時不時會遇到因?yàn)榉泵Χ罊C(jī)的傳感器;遇到因出現(xiàn)故障而亂發(fā)數(shù)據(jù)的傳感器時,拖累整條總線不能正常通訊;維護(hù)每個傳感器的id并不容易,特別是以后增加新傳感器的時候;很難實(shí)現(xiàn)“自動識別”總線上傳感器的數(shù)量和類型(也就是即插即用)。

因此,現(xiàn)有技術(shù)中存在對一種能夠基于rs485采用新的通信方式以消除現(xiàn)有技術(shù)存在的缺陷的通信方法的需要。



技術(shù)實(shí)現(xiàn)要素:

有鑒于此,本發(fā)明提供一種基于rs485橋電路裝置的通信方法,可以克服現(xiàn)有技術(shù)存在的問題。

本發(fā)明的技術(shù)方案具體是這樣實(shí)現(xiàn)的:

一種基于rs485橋電路裝置的通信方法,其中,m個橋電路裝置通過rs485總線串聯(lián)在一起并連接到主機(jī),一個橋電路裝置包括處理器;作為p端的第一rs485串口,用于通過總線連接上一個橋電路裝置;作為n端的第二rs485串口,用于通過總線連接下一個橋電路裝置;以及作為橋電路裝置的l端的第三串口,用于連接類型匹配的傳感器,所述處理器與第一rs485串口、第二rs485串口和第三串口進(jìn)行信號交互,該方法包括:

橋電路裝置從總線上開始接收到數(shù)據(jù)包時,判斷數(shù)據(jù)包中的命令開始符是否表明數(shù)據(jù)包為攜帶自動分配地址的命令代碼的數(shù)據(jù)包;

如果確定數(shù)據(jù)包不是攜帶自動分配地址的命令代碼的數(shù)據(jù)包,橋電路裝置將從它的p端口收到的所述數(shù)據(jù)包時立即開始逐單位信息長度的先轉(zhuǎn)發(fā)到它的n端口以傳遞到下一個橋電路裝置;

橋電路裝置從它的p端口接收到數(shù)據(jù)包中的結(jié)束符時,解析所接收的通訊數(shù)據(jù)包以得到解析的uid和命令代碼;將解析的uid與該橋電路裝置的uid比較,如解析的uid與該橋電路裝置的uid相同,則該橋電路裝置執(zhí)行該數(shù)據(jù)包中的命令代碼所代表的命令以進(jìn)行與主機(jī)的通信;如不相同則忽略所述命令;

其中,所述數(shù)據(jù)包是由主機(jī)向rs485總線上發(fā)送的,該數(shù)據(jù)包的格式為:依次按序排列的命令開始符、橋電路裝置的uid、命令代碼、第一內(nèi)容和結(jié)束符;其中,命令開始符和結(jié)束符之間的數(shù)據(jù)被轉(zhuǎn)碼,命令開始符的最高位為“1”,用于表示一個數(shù)據(jù)包的開始,其它字節(jié)都是以“0”開始的字節(jié);所述轉(zhuǎn)碼為將8比特一字節(jié)的數(shù)據(jù)轉(zhuǎn)換為以7比特為一字節(jié)的數(shù)據(jù)。

較佳地,所述的方法還包括步驟:

如果確定數(shù)據(jù)包是攜帶自動分配地址的命令代碼的數(shù)據(jù)包,橋電路裝置向給該橋電路裝置發(fā)送數(shù)據(jù)包的發(fā)包方發(fā)送響應(yīng)信息以通知發(fā)包方已收到所述數(shù)據(jù)包;其中,發(fā)包方為在所述橋電路裝置之前的、最近的一個裝置,即為主機(jī)和與其相鄰的上一個橋電路裝置之一;

所述橋電路裝置將收到的數(shù)據(jù)包中的uid值加“1”更新數(shù)據(jù)包中的uid值,然后將該數(shù)據(jù)包發(fā)送給與其相鄰的下一個橋電路裝置,并將更新后的uid值作為它的地址;

所述橋電路裝置如接收到與其相鄰的下一個橋電路裝置發(fā)送的響應(yīng)數(shù)據(jù)包,則將該響應(yīng)數(shù)據(jù)包轉(zhuǎn)發(fā)給與其相鄰的發(fā)包方;

如橋電路裝置沒有接收到響應(yīng)信息,則向與其相鄰的發(fā)包方發(fā)送響應(yīng)數(shù)據(jù)包,該響應(yīng)數(shù)據(jù)包中攜帶有該橋電路裝置的uid值。

其中,如解析的uid與該橋電路裝置的uid相同,則該橋電路裝置執(zhí)行該數(shù)據(jù)包中的命令代碼所代表的命令包括:

如果該命令為針對該橋電路裝置的自動讀取傳感器數(shù)據(jù)指令,則該橋電路裝置記住該自動讀取傳感器數(shù)據(jù)指令并自動的重復(fù)向與該橋電路裝置連接的傳感器發(fā)送,以自動從該傳感器取數(shù)據(jù),并將讀取的數(shù)據(jù)進(jìn)行轉(zhuǎn)碼后保存。

其中,如解析的uid與該橋電路裝置的uid相同,則該橋電路裝置執(zhí)行該數(shù)據(jù)包中的命令代碼所代表的命令包括:

如該命令為針對該橋電路裝置的開啟直接通道指令,則該橋電路裝置開啟它的l端口到p端口的雙向轉(zhuǎn)發(fā)通道,并且關(guān)閉它的n端口;

橋電路裝置將主機(jī)發(fā)送的數(shù)據(jù)包反轉(zhuǎn)碼后發(fā)送給它的傳感器,并將來自它的傳感器進(jìn)行轉(zhuǎn)碼的數(shù)據(jù)后轉(zhuǎn)發(fā)給主機(jī)。

進(jìn)一步,所述的方法包括:

所述橋電路裝置完成將來自它的傳感器的數(shù)據(jù)轉(zhuǎn)發(fā)給主機(jī)后,如果接收來來自主機(jī)的數(shù)據(jù)包并從數(shù)據(jù)包解析出不同于開啟直接通道指令的指令時,該橋電路裝置關(guān)閉它的l端口到p端口的雙向轉(zhuǎn)發(fā)通道,并且開啟它的n端口。

進(jìn)一步,所述的方法包括:

如果所述橋電路裝置從它的n端接收到請求重新分配地址的信號,則將該請求重新分配地址的信號轉(zhuǎn)發(fā)到它的發(fā)包方;

其中,如果所述橋電路裝置具有最大地址值,則使該橋電路裝置的n端口處于讀狀態(tài)。

較佳地,所述橋電路裝置在上電時處于p和n端口雙向數(shù)據(jù)轉(zhuǎn)發(fā)狀態(tài)。

其中,所述單位信息長度為1字節(jié)或者1比特。

此外,所述的方法還包括:

所述橋電路裝置利用命令代碼所代表的命令判斷它是否處于空閑狀態(tài);

如果是,所述橋電路裝置向具有大于它的地址的橋電路裝置發(fā)送通信請求以進(jìn)行通信。

其中,所述響應(yīng)數(shù)據(jù)包具有與所述數(shù)據(jù)包相同的格式,所述響應(yīng)數(shù)據(jù)包中的命令代碼是所回應(yīng)的數(shù)據(jù)包中的命令代碼數(shù)值的反碼。

如上可見,在本發(fā)明中的基于rs485橋電路裝置的通信方法,提供了可以用于基于rs485橋電路裝置的新通信方式。由于傳感器并不是直接連接到總線上,而是通過橋電路裝置連接到總線上,因此可以避免了現(xiàn)有技術(shù)中的垃圾信息過多;此外,每一個橋電路裝置與主機(jī)的通信都是相對獨(dú)立的,而且由于橋電路裝置采用“先轉(zhuǎn)發(fā)后處理”的方式,即使某一個橋電路裝置連接的傳感器有問題,也不影響總線的運(yùn)行;而且,新的橋電路裝置增加后,主機(jī)還可以自動識別并且重新自動分配地址。

附圖說明

圖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í)施例,對本發(fā)明進(jìn)一步詳細(xì)說明。

本發(fā)明中,基于rs485的橋電路裝置具有三個端口,分別為l端,p端和n端,p端和n端分別用于連接上一個和下一個橋電路裝置,l端用于連接到傳感器。基于rs485的橋電路裝置直接連接到rs485總線上。這樣,傳感器不再直接連接到rs485總線上,主機(jī)不再直接與傳感器交互,而是使用485總線協(xié)議與橋電路裝置交互。橋電路裝置及與其連接的傳感器可以稱為rs485總線上的一個節(jié)點(diǎn)。rs485總線上的每兩個橋電路裝置之間都是一段獨(dú)立的數(shù)據(jù)線,甚至基于rs485的橋電路裝置連接傳感器的那段線即l端也是一段獨(dú)立的數(shù)據(jù)線,基于rs485的橋電路裝置通過接力的方式在節(jié)點(diǎn)之間傳遞數(shù)據(jù)。可見,采用本發(fā)明,節(jié)點(diǎn)之間的數(shù)據(jù)線長度變短了,因此信號衰減小了,信號線上的信號抗干擾能力也相應(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é)議,因此在此略去對自定義協(xié)議的介紹。橋電路裝置是主機(jī)跟傳感器通訊的橋梁,它為主機(jī)和傳感器提供一條不同與傳統(tǒng)rs485總線的通訊線路。rs485總線上只連接基于rs485的橋電路裝置,不像傳統(tǒng)rs485總線那樣直接連接傳感器。使用rs485總線時,主機(jī)不再直接跟傳感器交互,而是使用rs485橋協(xié)議跟橋電路裝置交互。橋協(xié)議提供命令供主機(jī)將打包后的“傳感器指令”轉(zhuǎn)發(fā)給傳感器來實(shí)現(xiàn)主機(jī)跟傳感器的交互。

下面結(jié)合圖2和圖3對本發(fā)明的基于rs485的橋電路裝置進(jìn)行詳細(xì)介紹。

圖2示出了根據(jù)本發(fā)明實(shí)施例的基于rs485的橋電路裝置的組成示意圖。橋電路裝置包括處理器,第一rs485串口和第二rs485串口。第一rs485串口用于通過總線連接上一個橋電路裝置的第二rs485串口,第二rs485串口用于通過總線連接下一個橋電路裝置的第一rs485串口。所述橋電路裝置進(jìn)一步包括作為橋電路裝置的l端的第三串口,用于提供多種類型的接口以供連接類型匹配的傳感器。

本發(fā)明中,第一rs485串口作為橋電路裝置的p端,用于通過總線連接上一個橋電路裝置;第二rs485串口作為橋電路裝置的n端,用于通過總線連接下一個橋電路裝置。所述處理器與第一rs485串口、第二rs485串口和第三串口進(jìn)行信號交互。其中,所述第三串口為rs485、rs422和rs232串口的集合串口,用于連接基于rs485工作的傳感器,基于rs422工作的傳感器和基于rs232工作的傳感器。較佳地,所述橋電路裝置進(jìn)一步包括輔助串口,用于連接期望類型的傳感器。較佳地,所述處理器為c51芯片,所述第一rs485串口和第二rs485串口為rj45接口。根據(jù)本發(fā)明的實(shí)施例,第一rs485串口,第二rs485串口和第三串口是彼此獨(dú)立的,能夠彼此獨(dú)立地同時進(jìn)行數(shù)據(jù)通信。較佳地,橋電路裝置還包括位于l端的干節(jié)點(diǎn)端口,用于連接干節(jié)點(diǎn)。

本發(fā)明的實(shí)施例中,雖然基于rs485的接口是半雙工通訊的,但基于rs485的橋電路裝置內(nèi)部的三個接口是獨(dú)立的,它們可以同時進(jìn)行數(shù)據(jù)通訊,也就是說橋電路裝置在將p端的數(shù)據(jù)轉(zhuǎn)發(fā)到n端時,仍然可以跟l端連接的傳感器進(jìn)行通訊。這種工作方式比半雙工通訊的傳統(tǒng)rs485總線更高效。

傳統(tǒng)rs485總線只能接rs485接口的傳感器,而且通常只能以modbus協(xié)議進(jìn)行通訊。而本發(fā)明中,基于rs485的橋電路裝置的l端可以支持多種類型的傳感器,這些傳感器的協(xié)議可以是任意的。作為選擇,l端也可以配置成僅連接一種類型的傳感器。在rs485橋總線上,主機(jī)與這些不同類型傳感器之間通訊不會產(chǎn)生任何沖突,因?yàn)閷?shí)際直接跟傳感器通訊的橋電路裝置僅限于它所連接的那個rs485橋電路裝置。

圖3示出了根據(jù)本發(fā)明實(shí)施例的基于rs485的橋電路裝置的總線電路示意圖。如圖4所示,基于rs485的總線電路包括m個串聯(lián)連接在rs485總線上的節(jié)點(diǎn)和主機(jī),m為正整數(shù)。每一個節(jié)點(diǎn)均為如前所述的橋電路裝置,第一個節(jié)點(diǎn)的p端與所述主機(jī)連接,第m個節(jié)點(diǎn)的l端懸空,第i個節(jié)點(diǎn)的p端連接到第i-1個節(jié)點(diǎn)的l端,i為2,3,4,…,m-1。第k個節(jié)點(diǎn)和第k-1個節(jié)點(diǎn)之間的數(shù)據(jù)線為獨(dú)立數(shù)據(jù)線段,k為2,3,4,…,m。較佳地,節(jié)點(diǎn)的p端、l端和n端中的每一個端口配置有4根線,其中2根線為信號線,另外2根線一根為地線,一根為5v電源線。較佳地,所述主機(jī)通過橋電路裝置與傳感器進(jìn)行數(shù)據(jù)交互。較佳地,在主機(jī)通過橋電路裝置與傳感器進(jìn)行數(shù)據(jù)交互,所述橋電路裝置還可以與其后的橋電路裝置通信。

參見圖3,基于rs485的總線電路中,每兩個橋電路裝置即節(jié)點(diǎn)之間都是一段獨(dú)立的數(shù)據(jù)線,甚至基于rs485的橋電路裝置即l端連接傳感器的那段線也是一段獨(dú)立的數(shù)據(jù)線,橋電路裝置通過接力的方式在節(jié)點(diǎn)之間傳遞數(shù)據(jù)。顯然,由于節(jié)點(diǎn)之間的數(shù)據(jù)線長度變短了,因而信號衰減變小,抗干擾能力也就變強(qiáng)了。

根據(jù)本發(fā)明的實(shí)施例,主機(jī)發(fā)送給橋電路裝置的數(shù)據(jù)包基本格式如下:

【命令開始符】+【橋模塊uid】+【命令代碼】+【內(nèi)容】+【結(jié)束符】

橋協(xié)議要求【命令開始符】和【結(jié)束符】之間的數(shù)據(jù)要進(jìn)行轉(zhuǎn)碼,以免這些數(shù)據(jù)中出現(xiàn)跟開始符、結(jié)束符沖突的字符。本發(fā)明中,轉(zhuǎn)碼規(guī)則是8bit轉(zhuǎn)7bit,計(jì)算機(jī)每個字節(jié)由8個比特位組成,轉(zhuǎn)碼是將一組字節(jié)以每7個比特位重新組織,然后形成一組新的數(shù)據(jù),新數(shù)據(jù)每個字節(jié)只使用低7位,最高位總是0(最高位為1是橋協(xié)議的特殊控制符,例如命令開始符和結(jié)束符),轉(zhuǎn)碼后的數(shù)據(jù)字節(jié)會比原數(shù)據(jù)字節(jié)多,但可以保證不會跟橋協(xié)議的特殊控制符沖突。

橋電路裝置回應(yīng)的數(shù)據(jù)包中可能會包含兩份【內(nèi)容】數(shù)據(jù)。因?yàn)閞s485通訊是半雙工的,一問一答式的,為了避免沖突,橋電路裝置不能主動向主機(jī)發(fā)送數(shù)據(jù)包。有時候橋電路裝置需要向主機(jī)報(bào)告一些事件,例如總線上新接入了一個橋電路裝置,這個事件會在主機(jī)發(fā)出命令并等待回應(yīng)時,橋電路裝置將事件放在第2份【內(nèi)容】數(shù)據(jù)中匯報(bào)給主機(jī)。

下面介紹本發(fā)明中的主要的rs485橋通訊命令代碼和功能。

主機(jī)通過uid指定與某個橋電路裝置通訊,每個橋電路裝置都有一個自動分配的uid。本發(fā)明中,【命令代碼】是單字節(jié)數(shù)值,命令需要的參數(shù)放在【內(nèi)容】字段中。橋電路裝置回應(yīng)的數(shù)據(jù)包,【命令代碼】是所回應(yīng)命令的命令代碼數(shù)值的反碼。

主要的rs485橋通訊命令和功能如下:

1、要求總線上的橋電路裝置自動分配地址(即uid)。

2、取“指定橋電路裝置”的硬件信息(版本號、類型、出廠日期等信息)。

3、要求“指定橋電路裝置”原樣回復(fù)命令中攜帶的數(shù)據(jù),用于測試線路通訊質(zhì)量。

4、用一條命令獲取總線所有橋電路裝置的io輸入狀態(tài)(例如干節(jié)點(diǎn)輸入狀態(tài))。

5、取“指定橋電路裝置”的指定io的輸入狀態(tài)(例如干節(jié)點(diǎn)輸入狀態(tài))。

6、將傳感器指令告訴“指定橋電路裝置”。橋電路裝置記住指令并自動的重復(fù)向傳感器發(fā)送這些指令,實(shí)現(xiàn)自動從傳感器取數(shù)。該命令適合固定不變的傳感器指令。

7、讀取“指定橋電路裝置”收到的傳感器應(yīng)答數(shù)據(jù)。橋電路裝置自動從傳感器取到數(shù)據(jù)后,先將數(shù)據(jù)存放到自己的內(nèi)存區(qū)中,能保存多少條歷史數(shù)據(jù)要看單條數(shù)據(jù)的大小。主機(jī)發(fā)送該命令從橋電路裝置中讀取這些傳感器歷史數(shù)據(jù)。這條命令跟上一條命令即第條命令是成對的。

8、要求“指定橋電路裝置”開啟主機(jī)到傳感器的直接通訊通道。有些傳感器通訊需要多次交互,或則,傳感器數(shù)據(jù)量太大,橋電路裝置無法對這樣的傳感器執(zhí)行自動取數(shù)。主機(jī)可以用這條命令跟傳感器建立直接通訊通道,橋電路裝置負(fù)責(zé)主機(jī)和傳感器之間的雙向數(shù)據(jù)轉(zhuǎn)發(fā)。

9、橋電路裝置內(nèi)部事件通知,主要是用于橋電路裝置之間的一些事件溝通。

參見圖4,示出了本發(fā)明實(shí)施例中的基于rs485橋電路裝置的通信方法的流程圖。在步驟10,主機(jī)向總線上發(fā)送數(shù)據(jù)包,總線上的橋電路裝置開始接收數(shù)據(jù)包。本發(fā)明中,總線上的任何一個橋電路裝置開始接收到數(shù)據(jù)包時,均先判斷數(shù)據(jù)包中的命令開始符是否表明數(shù)據(jù)包為攜帶自動分配地址的命令代碼的數(shù)據(jù)包。根據(jù)本發(fā)明的實(shí)施例,所述數(shù)據(jù)包是由主機(jī)向rs485總線上發(fā)送的,該數(shù)據(jù)包的格式為:依次按序排列的命令開始符、橋電路裝置的uid、命令代碼、第一內(nèi)容和結(jié)束符;其中,命令開始符和結(jié)束符之間的數(shù)據(jù)被轉(zhuǎn)碼,命令開始符的最高位為“1”,用于表示一個數(shù)據(jù)包的開始,其它字節(jié)都是以“0”開始的字節(jié);所述轉(zhuǎn)碼為將8比特一字節(jié)的數(shù)據(jù)轉(zhuǎn)換為以7比特為一字節(jié)的數(shù)據(jù)。較佳地,本發(fā)明的實(shí)施例是以命令開始符的值來判斷該數(shù)據(jù)包所包含的命令代碼是否是自動分配地址的命令,并且命令開始符所在的字節(jié)的值表示是何種類型的命令代碼。

如果確定數(shù)據(jù)包不是攜帶自動分配地址的命令代碼的數(shù)據(jù)包,橋電路裝置將從它的p端口收到的所述數(shù)據(jù)包時立即開始逐單位信息長度的先轉(zhuǎn)發(fā)到它的n端口以傳遞到下一個橋電路裝置,步驟20。p和n端口間的數(shù)據(jù)轉(zhuǎn)發(fā)可以“字節(jié)為單位”或“比特位為單位”進(jìn)行。本發(fā)明中,單位信息長度為1字節(jié)或者1比特。本發(fā)明的實(shí)施例中,大部分時候基于rs485的橋電路裝置處于p和n端口雙向數(shù)據(jù)轉(zhuǎn)發(fā)狀態(tài)(一般來說上電后就進(jìn)入這個狀態(tài)),p端口收到的數(shù)據(jù)會轉(zhuǎn)發(fā)到n端口,反之亦然。l端口是封閉的,數(shù)據(jù)不發(fā)給傳感器,也不會把傳感器發(fā)出的數(shù)據(jù)轉(zhuǎn)發(fā)到485總線上,即不會發(fā)到p端口和n端口。

以字節(jié)為單位轉(zhuǎn)發(fā)數(shù)據(jù)時,數(shù)據(jù)每經(jīng)過一個橋模塊需要延遲約1字節(jié)時間(例如9600波特率通訊每秒可傳輸960字節(jié),1字節(jié)時間是1/960秒)。以比特位為單位轉(zhuǎn)發(fā)數(shù)據(jù)時,數(shù)據(jù)每經(jīng)過一個橋模塊需要延遲約1比特位時間(例如9600波特率每傳輸1位的時間是1/9600秒)。

在步驟30,橋電路裝置從它的p端口接收到數(shù)據(jù)包中的結(jié)束符時,解析所接收的通訊數(shù)據(jù)包以得到解析的uid和命令代碼。接下來,橋電路裝置將解析的uid與該橋電路裝置的uid比較,如解析的uid與該橋電路裝置的uid相同,則該橋電路裝置執(zhí)行該數(shù)據(jù)包中的命令代碼所代表的命令以進(jìn)行與主機(jī)的通信;如不相同則忽略所述命令,步驟40。

主機(jī)發(fā)出的命令總是需要rs485總線上的某個橋電路裝置做出響應(yīng),為減少數(shù)據(jù)傳遞時間,橋電路裝置采取先轉(zhuǎn)發(fā)后執(zhí)行的方式處理命令請求。主機(jī)發(fā)出的命令由多個字節(jié)組成,在數(shù)據(jù)線上總是一個字節(jié)一個字節(jié)的順序傳輸,橋電裝置收到數(shù)據(jù)后(收到1字節(jié)或1比特位)直接傳遞給下一個橋電路裝置。當(dāng)主機(jī)命令傳輸完成時,也就是橋電路裝置收到命令結(jié)束符時,總線上的所有橋電路裝置都收到了該命令的副本。然后,所有橋電路裝置都開始解寫這條命令,只有uid跟自己匹配的那個橋電路裝置會執(zhí)行這條命令,其他橋電路裝置則忽略這條命令。

本發(fā)明的實(shí)施例中,如解析的uid與該橋電路裝置的uid相同,橋電路裝置將判斷數(shù)據(jù)包中的命令代碼所代表的命令,并執(zhí)行相應(yīng)的命令。如果該命令為針對該橋電路裝置的自動讀取傳感器數(shù)據(jù)指令,則該橋電路裝置記住該自動讀取傳感器數(shù)據(jù)指令并自動的重復(fù)向與該橋電路裝置連接的傳感器發(fā)送,以自動從該傳感器取數(shù)據(jù),并將讀取的數(shù)據(jù)進(jìn)行轉(zhuǎn)碼后保存。

如該命令為針對該橋電路裝置的開啟直接通道指令,則該橋電路裝置開啟它的l端口到p端口的雙向轉(zhuǎn)發(fā)通道,并且關(guān)閉它的n端口;橋電路裝置將主機(jī)發(fā)送的數(shù)據(jù)包反轉(zhuǎn)碼后發(fā)送給它的傳感器,并將來自它的傳感器進(jìn)行轉(zhuǎn)碼的數(shù)據(jù)后轉(zhuǎn)發(fā)給主機(jī)。橋電路裝置完成將來自它的傳感器的數(shù)據(jù)轉(zhuǎn)發(fā)給主機(jī)后,如果接收來來自主機(jī)的數(shù)據(jù)包并從數(shù)據(jù)包解析出不同于開啟直接通道指令的指令時,該橋電路裝置關(guān)閉它的l端口到p端口的雙向轉(zhuǎn)發(fā)通道,并且開啟它的n端口。

連接到橋電路裝置的多數(shù)傳感器使用固定的指令進(jìn)行取數(shù),例如溫度傳感器,向傳感器發(fā)送固定指令來獲取當(dāng)前溫度數(shù)據(jù)。橋電路裝置可以自動對這樣的傳感器取數(shù),主機(jī)通過rs485總線和橋電路裝置將溫度傳感器取數(shù)指令告訴橋電路裝置,例如溫度傳感器取數(shù)指令被打包到數(shù)據(jù)包里經(jīng)總線發(fā)送出去。接收到包含溫度傳感器取數(shù)指令的數(shù)據(jù)包后,橋電路裝置就可以自動獲取溫度數(shù)據(jù)了,并且可以保存最近數(shù)次的歷史數(shù)據(jù)。橋電路裝置并不需要理解從傳感器取得的數(shù)據(jù),它只是將數(shù)據(jù)存儲到內(nèi)存中,當(dāng)主機(jī)向它索取這些數(shù)據(jù)時再回應(yīng)給主機(jī)。這種取數(shù)方式不需要建立一個主機(jī)到傳感器的直接數(shù)據(jù)傳輸通道。

有些傳感器不能由橋電路裝置自動取數(shù),比如傳感器取數(shù)指令不是固定不變的,或則,傳感器指令數(shù)據(jù)量過大,超出了橋電路裝置的緩存能力。與這種傳感器通訊,需要讓橋電路裝置建立一條主機(jī)到傳感器的直接通訊通道。

例如,參見圖3,主機(jī)向rs485總線發(fā)送命令,要求節(jié)點(diǎn)3建立一條主機(jī)到傳感器的直接數(shù)據(jù)通道,節(jié)點(diǎn)3將開啟主機(jī)和它所接傳感器的直接雙向數(shù)據(jù)轉(zhuǎn)發(fā)(其實(shí)是開啟節(jié)點(diǎn)3左邊串口和l端口間的數(shù)據(jù)轉(zhuǎn)發(fā)),節(jié)點(diǎn)3不會再轉(zhuǎn)發(fā)后續(xù)的數(shù)據(jù)到它右邊的串口(也就是停止繼續(xù)向后轉(zhuǎn)發(fā)數(shù)據(jù)),因?yàn)閷⒅鳈C(jī)跟傳感器的數(shù)據(jù)通訊轉(zhuǎn)發(fā)給后邊的橋電路裝置是沒有意義的。節(jié)點(diǎn)1和2仍然處于左邊和右邊串口的雙向數(shù)據(jù)轉(zhuǎn)發(fā)狀態(tài),因?yàn)橹鳈C(jī)和節(jié)點(diǎn)3的數(shù)據(jù)需要它們做轉(zhuǎn)發(fā)。

建立主機(jī)到傳感器的直接數(shù)據(jù)通道后,數(shù)據(jù)在rs485總線上的傳輸仍然是以數(shù)據(jù)包格式打包并進(jìn)行8bit到7bit的數(shù)據(jù)格式轉(zhuǎn)換。傳感器實(shí)際收到的是經(jīng)過橋電路裝置解包的原始傳感器指令。完成傳感器取數(shù)后,主機(jī)不需要顯式的關(guān)閉這條直接通道,只要主機(jī)向rs485總線上的其他橋電路裝置發(fā)送命令,節(jié)點(diǎn)3會自動關(guān)閉這條直接通道。

如果確定數(shù)據(jù)包是攜帶自動分配地址的命令代碼的數(shù)據(jù)包,橋電路裝置向給該橋電路裝置發(fā)送數(shù)據(jù)包的發(fā)包方發(fā)送響應(yīng)信息以通知發(fā)包方已收到所述數(shù)據(jù)包,步驟50。其中,發(fā)包方為在該橋電路裝置之前的、最近的一個裝置,即為主機(jī)和與其相鄰的上一個橋電路裝置之一。

接下來,橋電路裝置將收到的數(shù)據(jù)包中的uid值加“1”更新數(shù)據(jù)包中的uid值,然后將該數(shù)據(jù)包發(fā)送給與其相鄰的下一個橋電路裝置,并將更新后的uid值作為它的地址,步驟60。

根據(jù)本發(fā)明的實(shí)施例,橋電路裝置uid用來唯一標(biāo)識總線上的節(jié)點(diǎn),uid是自動分配的。當(dāng)主機(jī)向總線發(fā)送“自動分配地址”命令時,數(shù)據(jù)包內(nèi)的數(shù)值初始值為0,離主機(jī)最近的橋電路裝置收到數(shù)據(jù)包后,將值+1,此值便是該橋電路裝置的uid,也是它在總線上的順序號。橋電路裝置將+1后的數(shù)據(jù)包發(fā)送給下一個橋電路裝置,以此類推,直到總線上的最后一個橋電路裝置。此時,總線的所有橋電路裝置都分配了uid,橋電路裝置也知道了自己在總線上的位置。對于橋電路裝置來說,收到命令的那個串口就是p端(連接上一個模塊),另外一邊的串口便是n端(連接下一個模塊)。

接下來,橋電路裝置判斷是否接收到與其相鄰的下一個橋電路裝置發(fā)送的響應(yīng)數(shù)據(jù)包。如果所述橋電路裝置接收到與其相鄰的下一個橋電路裝置發(fā)送的響應(yīng)數(shù)據(jù)包,則將該響應(yīng)數(shù)據(jù)包轉(zhuǎn)發(fā)給與其相鄰的發(fā)包方,步驟70;如橋電路裝置沒有接收到響應(yīng)信息,則向與其相鄰的發(fā)包方發(fā)送響應(yīng)數(shù)據(jù)包,該響應(yīng)數(shù)據(jù)包中攜帶有該橋電路裝置的uid值,步驟80。具體地,橋電路裝置接收到“自動分配地址”命令后,先回應(yīng)上一個節(jié)點(diǎn),告訴它收到這條命令了,然后再向前轉(zhuǎn)發(fā)后邊橋電路裝置回應(yīng)的數(shù)據(jù),末端橋電路裝置很容易判斷它后邊沒有節(jié)點(diǎn)了,因?yàn)闆]有橋電路裝置向它回應(yīng)“收到”。末端橋電路裝置負(fù)責(zé)向主機(jī)發(fā)送命令的回應(yīng)包,包的內(nèi)容包含它自己的uid,這個uid也等于總線上節(jié)點(diǎn)的數(shù)量。回應(yīng)包被傳遞回主機(jī)后,主機(jī)和總線上所有橋電路裝置都知道總線節(jié)點(diǎn)的數(shù)量了。橋電路裝置知道總線上節(jié)點(diǎn)數(shù)量是有益的,例如主機(jī)向一個不存在的節(jié)點(diǎn)發(fā)送請求時,這條請求到達(dá)第一個橋電路裝置就被攔截了,然后橋電路裝置向主機(jī)回應(yīng)數(shù)據(jù)來報(bào)告錯誤。橋電路裝置主動向主機(jī)報(bào)告錯誤能減少不必要的等待時間,因?yàn)橥ǔG闆r下,主機(jī)需要設(shè)置一個比較夸張的等待時間來判斷響應(yīng)超時。

根據(jù)本發(fā)明的實(shí)施例,如果橋電路裝置具有最大地址值,則使該橋電路裝置的n端口處于讀狀態(tài)。本發(fā)明中,可以在總線上增加橋電路裝置。一般地,新增的橋電路裝置連接到末端的橋電路裝置的n端。任何時候,橋電路裝置被連接到末端的橋電路裝置的n端時,它會發(fā)送請求重新分配地址的信號。

本發(fā)明的實(shí)施例中,如果一個橋電路裝置從它的n端接收到請求重新分配地址的信號,則將該請求重新分配地址的信號轉(zhuǎn)發(fā)到它的發(fā)包方。

根據(jù)本發(fā)明,橋電路裝置在上電時處于p和n端口雙向數(shù)據(jù)轉(zhuǎn)發(fā)狀態(tài)。

根據(jù)本發(fā)明,橋電路裝置在工作過程中,可以利用命令代碼所代表的命令判斷它是否處于空閑狀態(tài);如果是,所述橋電路裝置向具有大于它的地址的橋電路裝置發(fā)送通信請求以進(jìn)行通信。

具體地,rs485總線上的每段線路都是獨(dú)立的,可以并行傳輸數(shù)據(jù)。而rs485本身是半雙工的,收發(fā)不能同時進(jìn)行,為了避免沖突,橋電路裝置必須按照一些規(guī)則來并行傳輸數(shù)據(jù):

1、通過解讀總線上的命令,橋電路裝置可以判斷出空閑路段。

2、空閑路段上的節(jié)點(diǎn)必須由前邊的節(jié)點(diǎn)先發(fā)起請求。例如,參見圖3,節(jié)點(diǎn)4可以主動向節(jié)點(diǎn)5發(fā)起請求,反過來則不行,因?yàn)楣?jié)點(diǎn)4可以決定它右邊的串口什么時候空閑,而節(jié)點(diǎn)5不能確定什么時候節(jié)點(diǎn)4會向它發(fā)數(shù)據(jù),所以節(jié)點(diǎn)5不能主動向節(jié)點(diǎn)4發(fā)起請求。

3、末端節(jié)點(diǎn)(圖3中的節(jié)點(diǎn)5)不能向右邊串口發(fā)數(shù)據(jù),右邊串口要留著接收數(shù)據(jù)。因?yàn)樾陆尤氲臉螂娐费b置要發(fā)送一個接入信號(模塊上電后向p和n兩個端口都發(fā)這個信號),末端節(jié)點(diǎn)右邊的串口為了接收這個接入信號,必須處于讀狀態(tài)。

此外,參見圖3,根據(jù)本發(fā)明的實(shí)施例,當(dāng)主機(jī)與節(jié)點(diǎn)3的傳感器通訊時,從主機(jī)到節(jié)點(diǎn)3的線路“忙”,而節(jié)點(diǎn)3到節(jié)點(diǎn)5的線路是空閑的,節(jié)點(diǎn)4和節(jié)點(diǎn)5的橋電路裝置在必要的時候就可以利用空閑路段進(jìn)行數(shù)據(jù)通訊,例如執(zhí)行“自動傳感器取數(shù)”或“節(jié)點(diǎn)間狀態(tài)交換”等操作。

以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
主站蜘蛛池模板: 嘉善县| 龙南县| 宁武县| 垣曲县| 怀远县| 津南区| 清远市| 金华市| 虞城县| 维西| 瑞安市| 大理市| 望江县| 宁晋县| 上高县| 纳雍县| 孝义市| 荔浦县| 黄梅县| 澄城县| 土默特右旗| 儋州市| 延庆县| 黑河市| 龙游县| 广水市| 克东县| 汉寿县| 思茅市| 织金县| 永仁县| 阳春市| 巫溪县| 罗甸县| 剑川县| 台前县| 揭阳市| 临安市| 个旧市| 平阳县| 酉阳|