本發(fā)明涉及通信技術(shù)領(lǐng)域。
背景技術(shù):RS485/RS422異步通信是目前在工控領(lǐng)域廣泛采用的總線標(biāo)準(zhǔn)。當(dāng)實(shí)際節(jié)點(diǎn)數(shù)目超出最大限制,或是通信距離過遠(yuǎn)、干擾過大時(shí),如何保證信息的完整可靠傳輸,是通訊系統(tǒng)中的巨大挑戰(zhàn)。實(shí)際應(yīng)用中,一般使用在總線上插入中繼器的方式來解決這一問題,如圖3所示。在兩線制半雙工通信系統(tǒng)中,傳統(tǒng)的中繼器通常不具有波特率自適應(yīng)的功能,或是具有簡(jiǎn)單的精度不高的適應(yīng)性,或是對(duì)主機(jī)具有一定的依賴性,需要主機(jī)發(fā)送特定字節(jié)完成波特率識(shí)別,導(dǎo)致數(shù)據(jù)流方向控制實(shí)時(shí)性差,從而使其應(yīng)用領(lǐng)域受到很多限制。
技術(shù)實(shí)現(xiàn)要素:本發(fā)明是為了解決傳統(tǒng)的中繼器通常不具有波特率自適應(yīng)的功能,精度低,導(dǎo)致數(shù)據(jù)流方向控制實(shí)時(shí)性差的問題,從而提供了一種隔離型RS485/RS422中繼隔離器的波特率識(shí)別方法及數(shù)據(jù)流控制方法。隔離型RS485/RS422中繼隔離器的波特率識(shí)別方法,該方法通過以下步驟實(shí)現(xiàn),所述步驟包括:空閑狀態(tài)步驟:中繼隔離器處于空閑狀態(tài),接收測(cè)量信號(hào),并判斷該信號(hào)是否有效,判斷結(jié)果為是,則將i置0,并執(zhí)行等待步驟;判斷結(jié)果為否,則返回空閑狀態(tài),等待接收測(cè)量信號(hào);其中i表示一個(gè)計(jì)數(shù)值;等待步驟:該步驟中令第i個(gè)測(cè)量值cnt[i]=0,并判斷中繼隔離器的接收引腳上是否有時(shí)鐘下降沿,判斷結(jié)果為是,則執(zhí)行運(yùn)行步驟;判斷結(jié)果為否,則重新執(zhí)行等待步驟;運(yùn)行步驟:該步驟每個(gè)時(shí)鐘上升沿將cnt[i]的值加1,即cnt[i]←cnt[i]+1,并判斷中繼隔離器的接收引腳上是否有時(shí)鐘上升沿,判斷結(jié)果為否,則繼續(xù)對(duì)低電平持續(xù)時(shí)鐘數(shù)統(tǒng)計(jì);判斷結(jié)果為是,則對(duì)低電平持續(xù)時(shí)鐘數(shù)統(tǒng)計(jì)結(jié)束,i的值加1,該值表示測(cè)量次數(shù),判斷i是否等于50時(shí),判斷結(jié)果為是,則j=0,j表示計(jì)數(shù)變量,并執(zhí)行排列步驟;判斷結(jié)果為否,則重新執(zhí)行等待步驟;排列步驟:該步驟中令i=0,執(zhí)行比較步驟;比較步驟:判斷第i個(gè)測(cè)量值cnt[i]是否大于第i+1個(gè)測(cè)量值cnt[i+1],判斷結(jié)果為是,則交換cnt[i]和cnt[i+1]的值,即tmp←cnt[i],cnt[i]←cnt[i+1],cnt[i+1]←tmp,其中tmp表示中間變量,使得相鄰的兩個(gè)數(shù)中后者大,并i的值加1;判斷結(jié)果為否,則i的值直接加1;比較步驟完成則判斷i是否等于49,判斷結(jié)果為否,則重新執(zhí)行比較步驟,判斷結(jié)果為是,則令j的值加1,并判斷j是否為49,若是,則執(zhí)行求開始序號(hào)步驟,若判斷結(jié)果為否,則重新執(zhí)行排列步驟;求開始序號(hào)步驟:根據(jù)排列步驟和比較步驟,得到cnt[i]的值排列順序?yàn)橛尚≈链笈帕?,判斷相鄰兩個(gè)值后者比前者差值是否小于20,即cnt[i]+20>cnt[i+1],判斷結(jié)果為是,則令start的值等于i,其中start表示開始序號(hào),并執(zhí)行求結(jié)束序號(hào)步驟;判斷結(jié)果為否,則i的值加1,并重新執(zhí)行開始序號(hào)步驟;求結(jié)束序號(hào)步驟:判斷相鄰兩個(gè)值后者比前者差值是否大于20,即cnt[i]+20<cnt[i+1],判斷結(jié)果為是,則令stop的值等于i,其中stop表示結(jié)束序號(hào),并計(jì)算結(jié)束序號(hào)stop與開始序號(hào)start間數(shù)據(jù)的個(gè)數(shù)num,即num←stop-start+1,同時(shí)令i的值為start的值,sum為0,sum表示所有數(shù)據(jù)的和,執(zhí)行求和步驟;判斷結(jié)果為否,則i的值加1,并重新執(zhí)行求結(jié)束序號(hào)步驟;求和步驟:令sum等于原sum的值加cnt[i],判斷i的值是否等于stop的值,判斷結(jié)果為是,則執(zhí)行計(jì)算步驟;判斷結(jié)果為否,則i的值加1,并重新執(zhí)行求和步驟;計(jì)算步驟:令sum除以num得到該方法計(jì)算出的數(shù)avg,即得到對(duì)應(yīng)一位數(shù)據(jù)的時(shí)間的均值,根據(jù)得到的時(shí)間的均值計(jì)算得出波特率。隔離型RS485/RS422中繼隔離器的數(shù)據(jù)流控制方法,該方法通過以下步驟實(shí)現(xiàn),所述步驟包括:空閑狀態(tài)步驟:接受使能信號(hào)有效,發(fā)送使能信號(hào)無效,判斷中繼隔離器的左右兩個(gè)數(shù)據(jù)接收引腳是否同時(shí)出現(xiàn)信號(hào)下降沿,判斷結(jié)果為是,則重新執(zhí)行該步驟;判斷結(jié)果為否,即只有左側(cè)或右側(cè)出現(xiàn)信號(hào)下降沿,則令cnt為0,并執(zhí)行等待步驟;該步驟中左右兩側(cè)數(shù)據(jù)接收引腳后續(xù)步驟相同;等待步驟:關(guān)閉右側(cè)接收使能信號(hào),打開右側(cè)發(fā)送使能信號(hào),并令cnt的值加1,判斷cnt的值是否等于10*avg,其中avg為波特率識(shí)別中計(jì)算出來的數(shù),判斷結(jié)果為是,則執(zhí)行檢測(cè)步驟;判斷結(jié)果為否,則繼續(xù)執(zhí)行等待步驟;檢測(cè)步驟:令cnt的值加1,并檢測(cè)左側(cè)接收引腳上是否存在低電平,若檢測(cè)結(jié)果為否,則令cnt的值為0,并執(zhí)行等待步驟;若檢測(cè)結(jié)果為是,則進(jìn)一步半段cnt的值是否等于11*avg,若判斷結(jié)果為是,則返回空閑狀態(tài),若判斷結(jié)果為否,則繼續(xù)執(zhí)行檢測(cè)步驟。本發(fā)明的有益效果是:通過本發(fā)明能夠完成波特率的自動(dòng)識(shí)別與通信數(shù)據(jù)流方向控制,大大加強(qiáng)了對(duì)數(shù)據(jù)流方向的控制,同比加強(qiáng)了10%,同時(shí)對(duì)總線沖突與故障給出相應(yīng)的提示,精度同比提高了15%;使用高性能信號(hào)隔離芯片與隔離電源,實(shí)現(xiàn)中繼器兩端數(shù)據(jù)的完全隔離。如圖4所示,隔離電源將輸入的12V直流電壓通過DC/DC變換技術(shù)變換為3組5V、1組12V的穩(wěn)定直流電源,其中5V電源分別為收發(fā)器、隔離芯片和CPLD供電,輸出的12V電源可供后電路使用。MAX491為總線收發(fā)器,可實(shí)現(xiàn)差分信號(hào)到TTL電平的轉(zhuǎn)換。采用高速磁隔離芯片ADUM1201實(shí)現(xiàn)信號(hào)的隔離。TVS管陣列可抑制雷擊或浪涌,防止隔離器另一側(cè)通信節(jié)點(diǎn)的損壞。由于使用的隔離電源數(shù)目相對(duì)較多且電壓較低,故采用了推挽拓?fù)浣Y(jié)構(gòu),主控制芯片采用TL494CN,原理圖如圖5所示。其中,+12V輸出經(jīng)PC817(U1)線性光耦輸入至控制芯片TL494的誤差放大器,以實(shí)現(xiàn)電壓調(diào)整,穩(wěn)定輸出電壓。R20為電流取樣電阻,當(dāng)電流過大時(shí),取樣電阻上電壓增大,通過三極管Q1關(guān)斷控制芯片的輸出,從而達(dá)到過流及短路保護(hù)的目的。設(shè)計(jì)中使用CPLD可編程邏輯器件作為中繼器的主控制器。由于CPLD可編程特性是基于硬件邏輯電路的,因此相比于基于微控制器的可編程器件,具有速度快、處理能力強(qiáng)、穩(wěn)定性高、不易死機(jī)的特點(diǎn)。本設(shè)計(jì)中,使用ALTERA公司的EPM570T144,其具有57個(gè)LAB(LogicArrayBlocks)、144個(gè)引腳,足以滿足大多數(shù)中小型設(shè)計(jì)。CPLD主時(shí)鐘為50MHz,在波特率自動(dòng)識(shí)別時(shí),對(duì)于高達(dá)1Mbps的波特率誤差僅為2%,足以滿足大多數(shù)設(shè)備對(duì)波特率精度的要求。指示燈D1、D2、D3分別指示系統(tǒng)正常、總線沖突、總線錯(cuò)誤。本設(shè)計(jì)中CPLD電路原理圖如圖6所示。使用TVS管陣列實(shí)現(xiàn)防雷防浪涌的功能。輸入到中繼器的總線信號(hào)經(jīng)防雷防浪涌電路后,由MAX491轉(zhuǎn)成TTL電平,經(jīng)隔離輸入到CPLD邏輯處理后,由另一片MAX491轉(zhuǎn)成差分信號(hào),從而達(dá)到中繼的目的。電路原理圖如圖7所示。附圖說明圖1為隔離型RS485/RS422中繼隔離器的波特率識(shí)別方法的狀態(tài)圖;圖2為隔離型RS485/RS422中繼隔離器的數(shù)據(jù)流控制方法的狀態(tài)圖;圖3為RS485/RS422網(wǎng)絡(luò)中使用中繼器的結(jié)構(gòu)圖;圖4為RS485中繼隔離器結(jié)構(gòu)框圖;圖5為隔離電源原理圖;圖6為CPLD外圍電路原理圖;圖7為總線隔離及防雷防浪涌電路;圖8為UART發(fā)送一個(gè)字節(jié)的時(shí)序圖。具體實(shí)施方式具體實(shí)施方式一:下面結(jié)合圖1說明本實(shí)施方式,本實(shí)施方式所述的隔離型RS485/RS422中繼隔離器的波特率識(shí)別方法,該方法通過以下步驟實(shí)現(xiàn),所述步驟包括:空閑狀態(tài)步驟:中繼隔離器處于空閑狀態(tài),接收測(cè)量信號(hào),并判斷該信號(hào)是否有效,判斷結(jié)果為是,則將i置0,并執(zhí)行等待步驟;判斷結(jié)果為否,則返回空閑狀態(tài),等待接收測(cè)量信號(hào);其中i表示一個(gè)計(jì)數(shù)值;等待步驟:該步驟中令第i個(gè)測(cè)量值cnt[i]=0,并判斷中繼隔離器的接收引腳上是否有時(shí)鐘下降沿,判斷結(jié)果為是,則執(zhí)行運(yùn)行步驟;判斷結(jié)果為否,則重新執(zhí)行等待步驟;運(yùn)行步驟:該步驟每個(gè)時(shí)鐘上升沿將cnt[i]的值加1,即cnt[i]←cnt[i]+1,并判斷中繼隔離器的接收引腳上是否有時(shí)鐘上升沿,判斷結(jié)果為否,則繼續(xù)對(duì)低電平持續(xù)時(shí)鐘數(shù)統(tǒng)計(jì);判斷結(jié)果為是,則對(duì)低電平持續(xù)時(shí)鐘數(shù)統(tǒng)計(jì)結(jié)束,i的值加1,該值表示測(cè)量次數(shù),判斷i是否等于50時(shí),判斷結(jié)果為是,則j=0,j表示計(jì)數(shù)變量,并執(zhí)行排列步驟;判斷結(jié)果為否,則重新執(zhí)行等待步驟;排列步驟:該步驟中令i=0,執(zhí)行比較步驟;比較步驟:判斷第i個(gè)測(cè)量值cnt[i]是否大于第i+1個(gè)測(cè)量值cnt[i+1],判斷結(jié)果為是,則交換cnt[i]和cnt[i+1]的值,即tmp←cnt[i],cnt[i]←cnt[i+1],cnt[i+1]←tmp,其中tmp表示中間變量,使得相鄰的兩個(gè)數(shù)中后者大,并i的值加1;判斷結(jié)果為否,則i的值直接加1;比較步驟完成則判斷i是否等于49,判斷結(jié)果為否,則重新執(zhí)行比較步驟,判斷結(jié)果為是,則令j的值加1,并判斷j是否為49,若是,則執(zhí)行求開始序號(hào)步驟,若判斷結(jié)果為否,則重新執(zhí)行排列步驟;求開始序號(hào)步驟:根據(jù)排列步驟和比較步驟,得到cnt[i]的值排列順序?yàn)橛尚≈链笈帕?,判斷相鄰兩個(gè)值后者比前者差值是否小于20,即cnt[i]+20>cnt[i+1],判斷結(jié)果為是,則令start的值等于i,其中start表示開始序號(hào),并執(zhí)行求結(jié)束序號(hào)步驟;判斷結(jié)果為否,則i的值加1,并重新執(zhí)行開始序號(hào)步驟;求結(jié)束序號(hào)步驟:判斷相鄰兩個(gè)值后者比前者差值是否大于20,即cnt[i]+20<cnt[i+1],判斷結(jié)果為是,則令stop的值等于i,其中stop表示結(jié)束序號(hào),并計(jì)算結(jié)束序號(hào)stop與開始序號(hào)start間數(shù)據(jù)的個(gè)數(shù)num,即num←stop-start+1,同時(shí)令i的值為start的值,sum為0,sum表示所有數(shù)據(jù)的和,執(zhí)行求和步驟;判斷結(jié)果為否,則i的值加1,并重新執(zhí)行求結(jié)束序號(hào)步驟;求和步驟:令sum等于原sum的值加cnt[i],判斷i的值是否等于stop的值,判斷結(jié)果為是,則執(zhí)行計(jì)算步驟;判斷結(jié)果為否,則i的值加1,并重新執(zhí)行求和步驟;計(jì)算步驟:令sum除以num得到該方法計(jì)算出的數(shù)avg,即得到對(duì)應(yīng)一位數(shù)據(jù)的時(shí)間的均值,根據(jù)得到的時(shí)間的均值計(jì)算得出波特率。本實(shí)施方式中,RS485總線驅(qū)動(dòng)器使用UART接口來驅(qū)動(dòng)。圖8為UART發(fā)送1字節(jié)數(shù)據(jù)時(shí)的時(shí)序圖。通常,包含1個(gè)起始位(start)、8個(gè)數(shù)據(jù)位(data)、1個(gè)奇偶校驗(yàn)位(parity)和1個(gè)停止位(stop),因此,實(shí)際發(fā)送的位數(shù)為11。由于在應(yīng)用中數(shù)據(jù)中的0和1是隨機(jī)的,因此,可以在一段時(shí)間內(nèi)測(cè)量1電平或0電平持續(xù)的時(shí)間,其中最小的值即對(duì)應(yīng)1位數(shù)據(jù)的時(shí)間,由此時(shí)間即可計(jì)算出實(shí)際的波特率。使用檢測(cè)0電平的方法實(shí)現(xiàn)波特率識(shí)別。首先,檢測(cè)是否存在下降沿,下降沿到來時(shí),啟動(dòng)一個(gè)計(jì)數(shù)器,并等待上升沿到來,當(dāng)檢測(cè)到上升沿時(shí),停止計(jì)數(shù)器。連續(xù)重復(fù)50次這樣的過程可得到50個(gè)計(jì)數(shù)值,并對(duì)其進(jìn)行升序排序(本設(shè)計(jì)使用冒泡排序法)。由于可能存在干擾,故最小的計(jì)數(shù)值可能對(duì)應(yīng)于干擾。但干擾是隨機(jī)的,故其持續(xù)的時(shí)間也并不是固定的。因此,從最小的數(shù)開始,對(duì)相鄰兩個(gè)數(shù)大小進(jìn)行比較,若差別小于20,則認(rèn)為此數(shù)對(duì)應(yīng)于發(fā)送一個(gè)位的時(shí)間。對(duì)滿足這樣條件的連續(xù)一段數(shù)據(jù)進(jìn)行加和,并取平均值,則可得到位時(shí)間的均值,由此均值則可求出波特率數(shù)值。具體實(shí)施方式二:下面結(jié)合圖2說明本實(shí)施方式,本實(shí)施方式基于具體實(shí)施方式一的隔離型RS485/RS422中繼隔離器的數(shù)據(jù)流控制方法,該方法通過以下步驟實(shí)現(xiàn),所述步驟包括:空閑狀態(tài)步驟:接受使能信號(hào)有效,發(fā)送使能信號(hào)無效,判斷中繼隔離器的左右兩個(gè)數(shù)據(jù)接收引腳是否同時(shí)出現(xiàn)信號(hào)下降沿,判斷結(jié)果為是,則重新執(zhí)行該步驟;判斷結(jié)果為否,即只有左側(cè)或右側(cè)出現(xiàn)信號(hào)下降沿,則令cnt為0,并執(zhí)行等待步驟;該步驟中左右兩側(cè)數(shù)據(jù)接收引腳后續(xù)步驟相同;等待步驟:關(guān)閉右側(cè)接收使能信號(hào),打開右側(cè)發(fā)送使能信號(hào),并令cnt的值加1,判斷cnt的值是否等于10*avg,其中avg為波特率識(shí)別中計(jì)算出來的數(shù),判斷結(jié)果為是,則執(zhí)行檢測(cè)步驟;判斷結(jié)果為否,則繼續(xù)執(zhí)行等待步驟;檢測(cè)步驟:令cnt的值加1,并檢測(cè)左側(cè)接收引腳上是否存在低電平,若檢測(cè)結(jié)果為否,則令cnt的值為0,并執(zhí)行等待步驟;若檢測(cè)結(jié)果為是,則進(jìn)一步半段cnt的值是否等于11*avg,若判斷結(jié)果為是,則返回空閑狀態(tài),若判斷結(jié)果為否,則繼續(xù)執(zhí)行檢測(cè)步驟。本實(shí)施方式中,半雙工通信機(jī)制中,要保證中繼器能完成數(shù)據(jù)的可靠中繼,應(yīng)該時(shí)刻監(jiān)測(cè)兩端是否有數(shù)據(jù)發(fā)送,即空閑的時(shí)候應(yīng)使兩個(gè)收發(fā)器都處于接收狀態(tài),當(dāng)監(jiān)測(cè)到一側(cè)收發(fā)器上有數(shù)據(jù)時(shí),應(yīng)將另一側(cè)的收發(fā)器置為發(fā)送狀態(tài)并持續(xù)發(fā)送一字節(jié),即11位,對(duì)應(yīng)的時(shí)間,并在邏輯上連接對(duì)應(yīng)的數(shù)據(jù)引腳。當(dāng)監(jiān)測(cè)到兩側(cè)485線路均有數(shù)據(jù)發(fā)送到中繼器時(shí),即可認(rèn)為是總線沖突;同時(shí),接收線路上低電平時(shí)間持續(xù)時(shí)間超過1字節(jié)時(shí)間(11位),可以認(rèn)為是總線故障(短路、斷路等)。故障監(jiān)測(cè)邏輯輸出使能信號(hào),控制數(shù)據(jù)流控制邏輯是否運(yùn)行,同時(shí),通過驅(qū)動(dòng)對(duì)應(yīng)的LED燈,給出相應(yīng)提示。當(dāng)SEL為高電平時(shí),選擇四線制全雙工電路。此時(shí),該中繼隔離器可應(yīng)用于四線制通信系統(tǒng)中。由于全雙工通信系統(tǒng)中數(shù)據(jù)首發(fā)是獨(dú)立的,因此不需要進(jìn)行波特率識(shí)別,直接將對(duì)應(yīng)的數(shù)據(jù)引腳在邏輯上連通,并使能相應(yīng)的收發(fā)器使能引腳即可。對(duì)于故障監(jiān)測(cè),由于四線制系統(tǒng)不存在總線沖突,因此只需考慮總線故障。當(dāng)數(shù)據(jù)接收引腳低電平持續(xù)時(shí)間達(dá)到一定時(shí)間時(shí),即認(rèn)為是發(fā)生總線故障,此時(shí),要關(guān)閉收發(fā)器的使能引腳,并給出對(duì)應(yīng)的故障信號(hào)。根據(jù)以上思想試制出一樣機(jī),接入到基于Modbus協(xié)議的可燃?xì)怏w報(bào)警器系統(tǒng)中,通過QuartusII自帶的SignalTap對(duì)測(cè)到的波特率進(jìn)行讀取,經(jīng)實(shí)際測(cè)試,對(duì)幾種常見固定波特率的識(shí)別誤差如表1所示。表1常見固定波特率的識(shí)別誤差