《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于RS485總線(xiàn)的GSM-R從機(jī)故障檢測(cè)設(shè)計(jì)及實(shí)現(xiàn)
基于RS485總線(xiàn)的GSM-R從機(jī)故障檢測(cè)設(shè)計(jì)及實(shí)現(xiàn)
2017年微型機(jī)與應(yīng)用第7期
賈海航,趙霞
同濟(jì)大學(xué) 電子與信息工程學(xué)院,上海 201804
摘要: RS485總線(xiàn)經(jīng)常被用做主從系統(tǒng)各節(jié)點(diǎn)間的通信方式,系統(tǒng)中主從機(jī)的通信狀態(tài)是整個(gè)系統(tǒng)正常工作的前提。文章設(shè)計(jì)了一種基于RS485總線(xiàn)的從機(jī)故障檢測(cè)方法。首先根據(jù)需求設(shè)計(jì)了一套穩(wěn)定的網(wǎng)絡(luò)通信協(xié)議和接口函數(shù),并提出了一種基于RS485網(wǎng)絡(luò)通信協(xié)議的輪詢(xún)方法,可實(shí)現(xiàn)一個(gè)主機(jī)可靠、穩(wěn)定地輪詢(xún)?cè)L問(wèn)多個(gè)從機(jī)。主機(jī)能夠檢測(cè)各個(gè)從機(jī)的通信狀況,并及時(shí)將從機(jī)通信故障信息上報(bào)到上位機(jī)。文章提出的在輪詢(xún)基礎(chǔ)上進(jìn)行故障檢測(cè)的方法,大大提高了系統(tǒng)的實(shí)時(shí)性。
關(guān)鍵詞: RS485 輪詢(xún) 故障檢測(cè)
Abstract:
Key words :

  賈海航,趙霞

 ?。ㄍ瑵?jì)大學(xué) 電子與信息工程學(xué)院,上海 201804)

       摘要RS485總線(xiàn)經(jīng)常被用做主從系統(tǒng)各節(jié)點(diǎn)間的通信方式,系統(tǒng)中主從機(jī)的通信狀態(tài)是整個(gè)系統(tǒng)正常工作的前提。文章設(shè)計(jì)了一種基于RS485總線(xiàn)的從機(jī)故障檢測(cè)方法。首先根據(jù)需求設(shè)計(jì)了一套穩(wěn)定的網(wǎng)絡(luò)通信協(xié)議和接口函數(shù),并提出了一種基于RS485網(wǎng)絡(luò)通信協(xié)議的輪詢(xún)方法,可實(shí)現(xiàn)一個(gè)主機(jī)可靠、穩(wěn)定地輪詢(xún)?cè)L問(wèn)多個(gè)從機(jī)。主機(jī)能夠檢測(cè)各個(gè)從機(jī)的通信狀況,并及時(shí)將從機(jī)通信故障信息上報(bào)到上位機(jī)。文章提出的在輪詢(xún)基礎(chǔ)上進(jìn)行故障檢測(cè)的方法,大大提高了系統(tǒng)的實(shí)時(shí)性。

  關(guān)鍵詞:RS485;輪詢(xún);故障檢測(cè)

  中圖分類(lèi)號(hào):TP29文獻(xiàn)標(biāo)識(shí)碼:ADOI: 10.19358/j.issn.1674-7720.2017.07.001

  引用格式:賈海航,趙霞.基于RS485總線(xiàn)的GSM-R從機(jī)故障檢測(cè)設(shè)計(jì)及實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2017,36(7):1-4,8.

0引言

  圖1GSM-R鐵路無(wú)線(xiàn)數(shù)字通信系統(tǒng)隨著鐵路列車(chē)運(yùn)行速度的不斷提升,通信系統(tǒng)對(duì)于鐵路的安全運(yùn)行越來(lái)越重要。鐵路綜合數(shù)字移動(dòng)通信系統(tǒng)(Global System for Mobile Communications-Railway,GSM-R)是一種基于當(dāng)前世界最成熟、最通用的公共無(wú)線(xiàn)通信系統(tǒng)GSM平臺(tái),專(zhuān)為滿(mǎn)足鐵路應(yīng)用而設(shè)計(jì)開(kāi)發(fā)的無(wú)線(xiàn)數(shù)字通信系統(tǒng)[1]。圖1為GSM-R鐵路無(wú)線(xiàn)數(shù)字通信系統(tǒng)結(jié)構(gòu)示意圖,該系統(tǒng)包括遠(yuǎn)端機(jī)和近端機(jī)兩部分。近端機(jī)由時(shí)間分布控制單元 (Time Distributed Master Unit,TDMU)及射頻模塊組成,遠(yuǎn)端機(jī)由射頻拉遠(yuǎn)單元(Radio Remote Unit,RRU)和射頻模塊組成。TDMU和RRU不僅需要獲取各自射頻模塊的實(shí)時(shí)信息,以了解各個(gè)射頻模塊的運(yùn)行狀態(tài),同時(shí)還需將各個(gè)射頻模塊的故障信息及時(shí)上報(bào)到上位機(jī),使射頻模塊得到及時(shí)的維護(hù)。因此,TDMU和RRU與各自的射頻模塊之間穩(wěn)定可靠的通信是非常重要的。

Image 001.jpg

  常用的串口通信方式包括RS232和RS485。RS232串行通信總線(xiàn)屬于全雙工工作方式,數(shù)據(jù)的收發(fā)可以同時(shí)進(jìn)行,但傳輸距離短,且只適合點(diǎn)對(duì)點(diǎn)的通信方式。RS485串行通信總線(xiàn)采用半雙工工作方式,數(shù)據(jù)的收發(fā)不能同時(shí)進(jìn)行,任何時(shí)刻只能有一個(gè)主機(jī)處于主動(dòng)發(fā)送狀態(tài),其他所有從機(jī)處于被動(dòng)接收狀態(tài),非常適用于一主多從的通信要求[2]。RS485作為一種構(gòu)造簡(jiǎn)單、技術(shù)成熟、傳輸距離遠(yuǎn)的通信方式,得到了廣泛的應(yīng)用。

  在本系統(tǒng)中,要求TDMU和RRU可以主動(dòng)訪(fǎng)問(wèn)射頻模塊,而射頻模塊只能被動(dòng)接收并響應(yīng)。根據(jù)上述需求,采用RS485串行總線(xiàn)作為T(mén)DMU和RRU訪(fǎng)問(wèn)射頻模塊的通信方式。將TDMU和RRU作為主機(jī),射頻模塊作為從機(jī),構(gòu)成RS485主從通信系統(tǒng)。上位機(jī)通過(guò)TDMU來(lái)監(jiān)控整個(gè)系統(tǒng)。

  在一些相關(guān)文獻(xiàn)中關(guān)于RS485總線(xiàn)通信方式的設(shè)計(jì)都只提到了RS485輪詢(xún)過(guò)程的實(shí)現(xiàn),但均未考慮從機(jī)故障的處理問(wèn)題。本文針對(duì)在輪詢(xún)過(guò)程中的從機(jī)故障檢測(cè)問(wèn)題,提出了RS485總線(xiàn)輪詢(xún)與從機(jī)故障檢測(cè)相結(jié)合的實(shí)現(xiàn)方法。在本文的設(shè)計(jì)中,主機(jī)通過(guò)RS485總線(xiàn)輪詢(xún)各個(gè)從機(jī),獲取從機(jī)信息,同時(shí)實(shí)時(shí)檢測(cè)從機(jī)故障狀態(tài)。

1RS485通信協(xié)議和接口函數(shù)的設(shè)計(jì)

  1.1通信協(xié)議

  RS485接口標(biāo)準(zhǔn)通信協(xié)議需要用戶(hù)自己根據(jù)實(shí)際情況而設(shè)計(jì)[3]。設(shè)計(jì)一套結(jié)構(gòu)簡(jiǎn)單、功能完備,并且盡量標(biāo)準(zhǔn)化的通信協(xié)議是RS485通信最基本的通信要求。

  RS485通信協(xié)議的設(shè)計(jì)主要包括物理層和數(shù)據(jù)鏈路層[4]。本文使用的VxWorks操作系統(tǒng)通過(guò)串口驅(qū)動(dòng)程序已經(jīng)實(shí)現(xiàn)了物理層的所有功能[5]。只需調(diào)用操作系統(tǒng)提供的發(fā)送和接收函數(shù)就可以實(shí)現(xiàn)數(shù)據(jù)通信。本文設(shè)計(jì)的RS485總線(xiàn)通信協(xié)議主要完成數(shù)據(jù)鏈路層的功能。

  數(shù)據(jù)鏈路層的通信協(xié)議[5 6]包括開(kāi)始結(jié)束標(biāo)志、設(shè)備的類(lèi)型及地址、數(shù)據(jù)校驗(yàn)等。設(shè)置一個(gè)開(kāi)始、結(jié)束標(biāo)志來(lái)表明每一段數(shù)據(jù)幀的開(kāi)頭和結(jié)尾。設(shè)置一個(gè)標(biāo)志來(lái)標(biāo)識(shí)數(shù)據(jù)幀是請(qǐng)求數(shù)據(jù)幀還是應(yīng)答數(shù)據(jù)幀。用設(shè)備類(lèi)型和設(shè)備地址兩個(gè)標(biāo)志位來(lái)區(qū)分不同的從機(jī)。數(shù)據(jù)校驗(yàn)位用來(lái)保證數(shù)據(jù)幀的正確性。除上述單元,通信協(xié)議還應(yīng)包括命令標(biāo)識(shí)、數(shù)據(jù)長(zhǎng)度等。

  根據(jù)以上描述,設(shè)計(jì)的通信協(xié)議如圖2所示。

  

Image 002.jpg

  開(kāi)始標(biāo)志、結(jié)束標(biāo)志:表示一幀數(shù)據(jù)的開(kāi)始和結(jié)束,本文均用0x7f表示。

  設(shè)備類(lèi)型:本文中用0x01表示功放,用0x02表示低噪放。

  設(shè)備地址:對(duì)于同一種從機(jī)類(lèi)型,用設(shè)備地址區(qū)分不同設(shè)備類(lèi)型下的不同從機(jī)。例如:對(duì)于4個(gè)功放(設(shè)備類(lèi)型為0x01),設(shè)備地址分別為0x00、0x01、0x02、0x03。

  命令標(biāo)識(shí):表示主機(jī)對(duì)從機(jī)發(fā)送的命令類(lèi)型。

  響應(yīng)標(biāo)識(shí):主機(jī)主動(dòng)向從機(jī)發(fā)送數(shù)據(jù)用0xff表示,從機(jī)被動(dòng)響應(yīng)主機(jī)用0x00來(lái)表示。

  數(shù)據(jù)長(zhǎng)度:表示具體數(shù)據(jù)的長(zhǎng)度。

  數(shù)據(jù)校驗(yàn):為保證數(shù)據(jù)傳輸?shù)恼_性和完整性,本文采用CRC校驗(yàn)碼。CRC校驗(yàn)碼具有唯一性。若發(fā)送端與接收端的校驗(yàn)碼不一致,則表明數(shù)據(jù)幀的傳輸有誤[7]。

  1.2接口函數(shù)

  數(shù)據(jù)鏈路層需為高層提供統(tǒng)一的RS485接口函數(shù),而接口函數(shù)的設(shè)計(jì)需要按照上述的網(wǎng)絡(luò)通信協(xié)議組包,調(diào)用底層串口驅(qū)動(dòng)將數(shù)據(jù)發(fā)送到目的從機(jī)并等待接收響應(yīng)消息。對(duì)接收到的數(shù)據(jù)解析,若此響應(yīng)數(shù)據(jù)完整無(wú)誤,則將需要的數(shù)據(jù)從中解析出來(lái)。在接口函數(shù)的設(shè)計(jì)中需要考慮數(shù)據(jù)幀的轉(zhuǎn)義、數(shù)據(jù)幀發(fā)送和接收、接口函數(shù)的保護(hù)三方面的內(nèi)容。

 ?。?)在數(shù)據(jù)接收端,若具體數(shù)據(jù)中出現(xiàn)0x7f的數(shù)據(jù),在接收端就會(huì)影響對(duì)完整一幀數(shù)據(jù)的判斷。因此,在數(shù)據(jù)發(fā)送端要對(duì)發(fā)送數(shù)據(jù)進(jìn)行轉(zhuǎn)義處理。本文的方法是用0x5f和0x7d兩個(gè)字節(jié)的數(shù)據(jù)來(lái)代替0x7f,用0x5f和0x5d兩個(gè)字節(jié)的數(shù)據(jù)來(lái)代替0x5f;在數(shù)據(jù)接收端進(jìn)行反轉(zhuǎn)義處理,與轉(zhuǎn)義處理相反。

 ?。?)接口函數(shù)中最重要的就是數(shù)據(jù)的發(fā)送和接收,本文使用的VxWorks操作系統(tǒng)已經(jīng)完成了底層RS485串口的配置,只需要調(diào)用操作系統(tǒng)提供的發(fā)送和接收函數(shù)就可以實(shí)現(xiàn)數(shù)據(jù)通信。數(shù)據(jù)的發(fā)送函數(shù)Tx485就是將組包好的數(shù)據(jù)發(fā)送到RS485總線(xiàn)上。RS485接收任務(wù)一直監(jiān)聽(tīng)總線(xiàn)上的數(shù)據(jù),通過(guò)監(jiān)聽(tīng)數(shù)據(jù)幀中的開(kāi)始和結(jié)束標(biāo)志來(lái)接收一條完整的RS485數(shù)據(jù)。將一幀完整數(shù)據(jù)發(fā)送到消息隊(duì)列,msgQReceive則從消息隊(duì)列中接收數(shù)據(jù)。RS485接口函數(shù)如下:

  STATUS Port485Send (……)

  {

  semTake(sem485RdDone,WAIT_FOREVER);

  //根據(jù)自定義的數(shù)據(jù)結(jié)構(gòu)進(jìn)行組包

  ……;

  //進(jìn)行轉(zhuǎn)義處理

  Escape(SendBuf,OutBuf);

  //發(fā)送數(shù)據(jù)

  Tx485(OutBuf);

  //接收響應(yīng)數(shù)據(jù)

  msgQReceive (Rx485QId, (char *)RespBuf, LEN_MAX , timeout);

  //處理響應(yīng)數(shù)據(jù)

  Port485_Handle(RespBuf, MsgLen);

  semGive(sem485RdDone);

  return OK;

  }

  (3)在RS485總線(xiàn)通信中,同一時(shí)刻,只能有一個(gè)主機(jī)處于發(fā)送狀態(tài),其他所有從機(jī)處于被動(dòng)接收狀態(tài),并且從機(jī)之間不能相互通信,否則將會(huì)引起總線(xiàn)沖突,無(wú)法正常工作[7]。RS485總線(xiàn)屬于半雙工的通信方式,數(shù)據(jù)的收發(fā)不能同時(shí)進(jìn)行,數(shù)據(jù)的發(fā)送必須等到上一次數(shù)據(jù)接收完成之后才能進(jìn)行。為了滿(mǎn)足上述RS485總線(xiàn)通信的特點(diǎn),本文需要對(duì)RS485接口函數(shù)進(jìn)行保護(hù)。

  ①RS485是一主多從的串行總線(xiàn),每一時(shí)刻只能有一個(gè)主機(jī)發(fā)送數(shù)據(jù),也即每一時(shí)刻RS485接口函數(shù)只能被調(diào)用一次。為了防止接口函數(shù)被同時(shí)調(diào)用,在接口函數(shù)中增加了信號(hào)量的保護(hù)。主機(jī)在調(diào)用接口函數(shù)時(shí),必須首先獲取信號(hào)量。如果沒(méi)能獲取信號(hào)量,說(shuō)明此刻有其他任務(wù)在調(diào)用接口函數(shù)。主機(jī)必須等到發(fā)送數(shù)據(jù)結(jié)束釋放信號(hào)量后,才能獲取信號(hào)量,調(diào)用接口函數(shù)來(lái)發(fā)送數(shù)據(jù)。

 ?、赗S485通信屬于半雙工的通信方式,數(shù)據(jù)的收發(fā)不能同時(shí)進(jìn)行。在實(shí)際的需求中,除了主機(jī)不斷輪詢(xún)從機(jī)之外,上位機(jī)也會(huì)通過(guò)主機(jī)向目標(biāo)從機(jī)發(fā)送一些查詢(xún)從機(jī)數(shù)據(jù)或配置從機(jī)參數(shù)的數(shù)據(jù)幀。主機(jī)的輪詢(xún)是一直進(jìn)行的,而上位機(jī)下發(fā)的數(shù)據(jù)幀是隨機(jī)的。為了避免輪詢(xún)數(shù)據(jù)和上位機(jī)下發(fā)的數(shù)據(jù)幀在485總線(xiàn)上沖突,本文設(shè)置一個(gè)全局變量作為主機(jī)輪詢(xún)的開(kāi)關(guān)。在上位機(jī)下發(fā)RS485數(shù)據(jù)幀時(shí),關(guān)閉輪詢(xún)開(kāi)關(guān),主機(jī)輪詢(xún)從機(jī)暫時(shí)停止。當(dāng)目標(biāo)從機(jī)響應(yīng)了上位機(jī)之后,打開(kāi)輪詢(xún)開(kāi)關(guān),主機(jī)繼續(xù)輪詢(xún)從機(jī)。

2基于輪詢(xún)機(jī)制的從機(jī)故障檢測(cè)的設(shè)計(jì)

  2.1從機(jī)故障檢測(cè)的流程

  圖3是基于輪詢(xún)機(jī)制的從機(jī)故障檢測(cè)的設(shè)計(jì)流程圖。主機(jī)每隔800 ms調(diào)用一次RS485接口函數(shù)輪詢(xún)從機(jī)設(shè)備。若800 ms內(nèi)未收到從機(jī)的響應(yīng),則認(rèn)為此從機(jī)通信異常。若連續(xù)異常次數(shù)達(dá)到上限,則主機(jī)需要將此從機(jī)通信故障信息上報(bào)到上位機(jī)。

Image 003.jpg

  2.2從機(jī)故障檢測(cè)的實(shí)現(xiàn)

  為了實(shí)現(xiàn)主機(jī)在輪詢(xún)從機(jī)過(guò)程中檢測(cè)從機(jī)通信狀況,本文將輪詢(xún)機(jī)制嵌套于故障檢測(cè)任務(wù)中。從機(jī)故障檢測(cè)任務(wù)包括輪詢(xún)時(shí)間間隔的設(shè)計(jì)、故障上報(bào)設(shè)計(jì)、輪詢(xún)過(guò)程中的從機(jī)故障檢測(cè)設(shè)計(jì)。其中,輪詢(xún)過(guò)程中的從機(jī)故障檢測(cè)是本文的重點(diǎn)。

 ?。?)輪詢(xún)時(shí)間間隔的設(shè)計(jì)。通過(guò)看門(mén)狗定時(shí)器和信號(hào)量來(lái)實(shí)現(xiàn)800 ms的主機(jī)輪詢(xún)從機(jī)的時(shí)間間隔。在一個(gè)800 ms的看門(mén)狗定時(shí)器中,每隔800 ms釋放一次信號(hào)量。

 ?。?)故障上報(bào)設(shè)計(jì)。在故障檢測(cè)任務(wù)中,Rs485AlmReport是根據(jù)當(dāng)前狀態(tài)和同步狀態(tài)進(jìn)行故障上報(bào)的函數(shù)。當(dāng)前狀態(tài)表示從機(jī)當(dāng)前的狀態(tài),而同步狀態(tài)表示從機(jī)的歷史狀態(tài)。若某一從機(jī)的當(dāng)前狀態(tài)是故障狀態(tài),同步狀態(tài)是正常狀態(tài),則主機(jī)就會(huì)向上位機(jī)上報(bào)此從機(jī)故障。故障檢測(cè)任務(wù)部分代碼如下:

  LOCAL void Rs485AlarmManTask(void)

  {

  wdStart(TimerId, (int) Timer, (FUNCPTR) Rs485TimerFun, 0); //輪詢(xún)時(shí)間間隔

  While(1){

  semTake(semAlmSampleT, WAIT_FOREVER) ;

  if(RS485UseSwitch == 0){

  Rs485AlmCheck( );}//從機(jī)故障檢測(cè)

  Rs485AlmReport( );}//故障上報(bào)

  }

 ?。?)輪詢(xún)過(guò)程中的從機(jī)故障檢測(cè)設(shè)計(jì)。在故障檢測(cè)任務(wù)中,Rs485AlmCheck函數(shù)調(diào)用RS485接口訪(fǎng)問(wèn)從機(jī)設(shè)備。為了便于管理所有從機(jī)設(shè)備,建立如下從機(jī)設(shè)備信息的數(shù)據(jù)結(jié)構(gòu):

  typedef struct alarm_info{

  UINT8 AlmIndex;/* index of the device */

  UINT8 AlarmEna;/* device enable */

  UINT8 CurAlmState;/* current alarm state */

  UINT8 SyncAlmState;/* synced alarm state */

  UINT8(*CommChk) (void); /*detect function */

  UINT8 AlmRaiseCnt;/* device raise counter */

  UINT8 AlmIdleCnt;/* device clear counter */

  } ALARM_INFO;

  從機(jī)設(shè)備信息包括從機(jī)序列號(hào)、故障檢測(cè)使能、當(dāng)前狀態(tài)、同步狀態(tài)、故障檢測(cè)函數(shù)(輪詢(xún)函數(shù))、故障統(tǒng)計(jì)、正常統(tǒng)計(jì)等。根據(jù)從機(jī)設(shè)備信息數(shù)據(jù)結(jié)構(gòu)建立ALARM_INFO Rs485Devices[MAX_DEV_NUM]所有從機(jī)的信息。每隔800 ms執(zhí)行一次從機(jī)故障檢測(cè)函數(shù),并統(tǒng)計(jì)故障的次數(shù)。若故障次數(shù)達(dá)到上限,則等待Rs485AlmReport故障上報(bào)函數(shù)將信息上報(bào)到上位機(jī)。

3故障檢測(cè)的優(yōu)化及結(jié)果

  在實(shí)際情況中,一次從機(jī)通信異常不能認(rèn)為此從機(jī)通信故障。在本文中,規(guī)定某從機(jī)連續(xù)4次通信異常,才能認(rèn)為此從機(jī)通信故障。當(dāng)從機(jī)數(shù)量較多時(shí),若某一從機(jī)通信故障,主機(jī)需要將所有的從機(jī)設(shè)備輪詢(xún)4次后,才能將從機(jī)通信故障檢測(cè)出來(lái)并上報(bào)到上位機(jī)。在這種情況下,主機(jī)不能及時(shí)將從機(jī)通信故障上報(bào)到上位機(jī),造成上位機(jī)獲取從機(jī)通信狀況非常滯后,系統(tǒng)實(shí)時(shí)性較差。主機(jī)為了能夠及時(shí)將從機(jī)發(fā)生故障上報(bào)到上位機(jī),在輪詢(xún)下一設(shè)備前需做如下判定條件:當(dāng)主機(jī)訪(fǎng)問(wèn)某一從機(jī)時(shí),如果從機(jī)通信異常,則繼續(xù)訪(fǎng)問(wèn)此從機(jī),而不是訪(fǎng)問(wèn)下一個(gè)從機(jī)設(shè)備;當(dāng)連續(xù)4次通信異常,主機(jī)將此從機(jī)的當(dāng)前狀態(tài)改為故障狀態(tài),繼續(xù)訪(fǎng)問(wèn)下一個(gè)從機(jī)設(shè)備。輪詢(xún)條件代碼如下:

  void Rs485AlmCheck(void)

  {

  //保持不變

  ……

  //輪詢(xún)條件

  if(TmpState==Rs485Devices[DevOrder].CurAlmState)

  DevOrder+=1;

  }

  在從機(jī)故障檢測(cè)函數(shù)中,如果實(shí)際狀態(tài)與當(dāng)前狀態(tài)一致,表明主機(jī)已將從機(jī)的實(shí)際狀態(tài)反饋到從機(jī)的當(dāng)前狀態(tài),則繼續(xù)輪詢(xún)下一個(gè)從機(jī)設(shè)備。

  為了說(shuō)明基于輪詢(xún)的從機(jī)故障檢測(cè)的輪詢(xún)條件的優(yōu)化效果,作如下假設(shè):某一主機(jī)下共有7個(gè)從機(jī),最壞的情況下,這7個(gè)從機(jī)同時(shí)發(fā)生了通信故障。在不加輪詢(xún)條件的從機(jī)故障檢測(cè)中,檢測(cè)出第一個(gè)從機(jī)故障需要0.8×7×3+0.8=17.6 s,在加上輪詢(xún)條件后的從機(jī)故障檢測(cè)中,檢測(cè)出第一個(gè)從機(jī)故障需要0.8×4=3.2 s。如圖4是在7個(gè)從機(jī)同時(shí)故障的情況下,加上輪詢(xún)條件前后,主機(jī)檢測(cè)出這7個(gè)從機(jī)故障所需要的時(shí)間對(duì)比。加上輪詢(xún)條件后的檢測(cè)方法大大減少了從機(jī)故障檢測(cè)所需的時(shí)間。

Image 004.jpg

4結(jié)論

  基于RS485總線(xiàn)的通信協(xié)議和接口函數(shù)的設(shè)計(jì)保證了主機(jī)穩(wěn)定可靠地訪(fǎng)問(wèn)從機(jī)。從機(jī)故障檢測(cè)的輪詢(xún)機(jī)制一方面可以不斷地獲取各個(gè)從機(jī)的設(shè)備信息,另一方面可以檢測(cè)從機(jī)通信故障。但是,當(dāng)從機(jī)數(shù)量較多時(shí),輪詢(xún)周期就會(huì)變長(zhǎng),從機(jī)的通信故障不能被及時(shí)檢測(cè)出來(lái),系統(tǒng)實(shí)時(shí)性變差。加上了輪詢(xún)條件優(yōu)化后的輪詢(xún)機(jī)制相比傳統(tǒng)的輪詢(xún)機(jī)制,實(shí)現(xiàn)了快速檢測(cè)從機(jī)通信故障。上位機(jī)可以及時(shí)獲取各個(gè)從機(jī)的通信狀況,提高了系統(tǒng)的實(shí)時(shí)性。

  參考文獻(xiàn)

  [1] 胡威.基于GSM-R的列車(chē)無(wú)線(xiàn)定位方法探索 [J].鐵路通信信號(hào)工程技術(shù),2016,13(5):21-23.

  [2] 胡文濤. 一種基于協(xié)議的提高RS485實(shí)時(shí)性的方法 [J].現(xiàn)代電子技術(shù),2013,36(18):10-12.

 ?。?] 周鵬,李艷艷. 提高RS485總線(xiàn)主從通信效率的軟件設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2008,8(8):70-73.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。