張 壘,楊啟帆
(1.江蘇大學 電氣信息工程學院,鎮(zhèn)江 212013;2.上汽大眾汽車有限公司 質(zhì)保部,上海 201800)
基于隨機數(shù)發(fā)生器的設(shè)備地址自動分配方法
張 壘1,楊啟帆2
(1.江蘇大學 電氣信息工程學院,鎮(zhèn)江 212013;2.上汽大眾汽車有限公司 質(zhì)保部,上海 201800)
總線通訊常用于工業(yè)控制系統(tǒng),系統(tǒng)常為一個主機、多個從機的結(jié)構(gòu)。該文傳統(tǒng)的總線通訊網(wǎng)絡(luò)多采用撥碼等手工方法設(shè)置設(shè)備地址,系統(tǒng)的自動組網(wǎng)及地址的自動分配一直是個難題。提出了一種新的基于隨機數(shù)發(fā)生器的自動組網(wǎng)與設(shè)備地址分配方法,實現(xiàn)了設(shè)備的自動組網(wǎng)與地址的自動分配。該方法適用于無主機的控制系統(tǒng),可自動選出主機,上電即可自動組網(wǎng)與分配地址,且所需時間更短,分配效率更高。實踐證明,該方法穩(wěn)定可靠,具有良好的應用和推廣價值。
總線通訊;自動組網(wǎng);地址分配;隨機數(shù)
隨著計算機、網(wǎng)絡(luò)技術(shù)的發(fā)展,自動控制技術(shù)廣泛地應用于工業(yè)、交通、服務等領(lǐng)域,控制的形式也由點對點通信逐步擴展到點對多的通信模式。串行通信作為一種簡單、廉價的通信方式在工業(yè)控制中廣泛應用,由于實現(xiàn)成本低、傳輸距離遠、抗干擾能力強的特點,使總線型多CPU網(wǎng)絡(luò)控制系統(tǒng)得到了推廣與發(fā)展。
在以往的總線通信系統(tǒng)設(shè)計中,通常使用撥碼開關(guān)或者人工輸入方式逐一對從機地址進行設(shè)置。在目前的一些自動組網(wǎng)的算法中,通常需要指定主機,且主機故障后無法繼續(xù)組網(wǎng)。另外,現(xiàn)有的一些隨機時隙算法采用機號生成隨機數(shù),生成的隨機數(shù)重復率高且無法改變,地址無法一次分配成功。在此,提出一種新的基于隨機數(shù)發(fā)生器的自動組網(wǎng)與設(shè)備地址分配方法,將從機ID與系統(tǒng)時間t通過CRC計算生成隨機種子,可充分利用每個二進制位的信息,生成唯一最小隨機數(shù)的概率趨向于1,極大地提高了地址分配效率。該方法適用于無主機的工控系統(tǒng),并且在系統(tǒng)運行過程中如果主機出現(xiàn)故障也能重新組網(wǎng),原理是在無主機的系統(tǒng)中隨機選出1臺設(shè)備成為主機,通過隨機生成從機答復時間,盡量使從機的回復信號不沖突[1],從而使得從機的信息能夠快速識別,以實現(xiàn)其地址的快速分配。這一算法的優(yōu)勢在于上電即可自動組網(wǎng)與分配地址,速度快且穩(wěn)定,所有過程均自動完成。
以RS-485通訊網(wǎng)絡(luò)為例,鑒于需要實現(xiàn)多節(jié)點通訊,RS-485通訊網(wǎng)絡(luò)使用共享總線的半雙工傳送方式,即在同一時刻主機和從機只能有1個發(fā)送數(shù)據(jù)而其他的只能接收數(shù)據(jù)。網(wǎng)絡(luò)結(jié)構(gòu)上,采用主從結(jié)構(gòu)方式實現(xiàn)通訊,主機和從機通過RS-485總線連接在一起。本算法適用的無主機工控系統(tǒng),上電后所有從機生成1個隨機數(shù)和延遲時間,延遲時間最短的從機自動成為主機。系統(tǒng)拓撲結(jié)構(gòu)簡圖如圖1所示。
圖1 系統(tǒng)拓撲結(jié)構(gòu)Fig.1 System topology diagram
主機的作用是發(fā)送命令與分配地址;從機實現(xiàn)具體的業(yè)務需求,不主動發(fā)送命令或數(shù)據(jù)。系統(tǒng)中所有的單元都可以收到通信鏈路上的數(shù)據(jù)包,各從機根據(jù)通信數(shù)據(jù)包的目的地址進行識別:如果數(shù)據(jù)包中的目的地址與本單元的設(shè)備地址相同,則處理該數(shù)據(jù)包;否則丟棄該數(shù)據(jù)包。
在自動組網(wǎng)時,將面臨系統(tǒng)有無、主機兩種情況。系統(tǒng)上電后,主機將立即發(fā)送地址分配命令,所有從機設(shè)定等待時間為1 s,并生成1個隨機數(shù)x,由x生成延遲時間T2。若在1 s內(nèi)從機收到主機的地址分配命令,則進入地址自動分配環(huán)節(jié);若1 s內(nèi)從機未內(nèi)收到主機的命令包,表示系統(tǒng)無主機,則在1 s等待時間到后進入延遲環(huán)節(jié),第1個到達T2的從機成為主機,并將本機地址設(shè)為00,廣播地址分配命令進入地址自動分配環(huán)節(jié),其他從機取消成為主機的進程。
在地址分配時,各從機設(shè)定1個基于本機時間和生產(chǎn)序列號ID的隨機數(shù)xi,由xi生成延遲回復時間2,主機收到第1個回復后,其他從機不再回復,主機開始分配第1個地址。第1個地址設(shè)置完成后,未分配地址的從機生成1個新的隨機數(shù),主機分配第2個地址,如此往復,直至各從機地址全部分配完畢。
如果在地址分配的過程中,主機發(fā)生故障無法通訊或自動組網(wǎng),此時需要在從機中重新選出主機并重新進行地址分配。方法是在主機發(fā)送地址分配命令后由從機設(shè)置1個適當?shù)难舆t時間2 s,若2 s后從機未收到主機發(fā)送的數(shù)據(jù)包,則生成延遲時間T2,第1個到達T2的從機成為主機。
地址分配完畢后,系統(tǒng)將正常工作。每隔2 s,如果主機沒有發(fā)送正常的命令,則廣播1條“心跳”命令,該命令不含任何內(nèi)容,從機在5 s時間內(nèi)未收到主機發(fā)送的正?;颉靶奶泵畋硎局鳈C故障,此時將開始重新組網(wǎng),方法同上。
隨機數(shù)x是延遲回復時間2的重要組成部分,因此生成適當?shù)碾S機數(shù)對于各從機的隨機延時應答至關(guān)重要。計算機不會產(chǎn)生絕對隨機的隨機數(shù),而只能產(chǎn)生偽隨機數(shù)。所謂偽隨機數(shù)通常由數(shù)學公式產(chǎn)生,如果生成隨機數(shù)的算法確定了,那么這個隨機數(shù)序列也就確定了。從數(shù)學意義上講,偽隨機數(shù)某種對應映射的產(chǎn)物是完全不隨機的,只要知道隨機數(shù)的種子以及相應的參數(shù),就可以預測下一狀態(tài)的隨機數(shù)。但是,只要偽隨機數(shù)通過一系列測試檢驗,而且其有足夠長的周期,那么在一定范圍內(nèi),還是可以把它當作真隨機數(shù)來使用[3]。對偽隨機數(shù)而言,其實現(xiàn)算法顯得尤為重要。因此,為了使各從機生成的隨機數(shù)盡量分散,本算法選用從機ID和系統(tǒng)時間t通過CRC碼編排為隨機種子,再通過線性同余法生成隨機數(shù)。
隨機種子x0由從機ID和系統(tǒng)時間t采用CRC公式生成,長度為2 B。其中,t為讀取的系統(tǒng)時間,s,長度為 1 B;ID 為 6 B,由高到低分別為年(2 B)、月、日、機號(2 B)。加入系統(tǒng)時間t的目的在于使每次的隨機種子都不同,降低了產(chǎn)生相同隨機數(shù)的概率,即使產(chǎn)生了重復的隨機數(shù),由于下次生成隨機數(shù)時的時間已變,隨機數(shù)也將改變。
本算法借用線性同余法的思想生成隨機數(shù),其公式為
式中:x為隨機數(shù);x0為隨機種子;a為乘子;b為增量;M為模;變量a,b,M均為常量。通過選取適當?shù)腶,b,M可使x充分隨機,產(chǎn)生的隨機數(shù)具有均勻性好、獨立性好等特點[4]。 在此,取 a=31,b=23,M=101,其中模M可隨著從機數(shù)Y的減少而適當減小。M過大會造成隨機數(shù)x和延遲回復時間T2變大,M過小則會導致隨機數(shù)的重復率過高。模M一般取約為初始從機數(shù)Y的3倍的質(zhì)數(shù)。最終的隨機數(shù)生成公式為
本協(xié)議采用異步串行,半雙工傳輸方式。在同一時刻主機和從機只能有1個發(fā)送數(shù)據(jù)而其他的只能接收數(shù)據(jù)。數(shù)據(jù)在串行異步通信過程中,是以報文的形式一幀一幀發(fā)送[5]。拓撲結(jié)構(gòu)為單主多從,從機地址的設(shè)定范圍為1~247,0為主機地址。主機對所有從機廣播發(fā)布信息,每個從機都要反饋響應給主機。
本協(xié)議包括接收地址ADR,命令碼CMD,數(shù)據(jù)內(nèi)容DATA,校驗碼CRC。由于主機采用廣播方式,故接收地址ADR只有2種,00(主機)和FF(廣播輪詢)。命令碼CMD為1 B,首位為0:下行報文;8:上行報文。ID共6 B,從高到低依次為年(2 B)、月、日、機號(2 B)。例舉一典型的地址自動分配協(xié)議,如表1所示。
表1 地址分配協(xié)議Tab.1 Address allocation protocol
步驟1所有設(shè)備生成相應的隨機數(shù)xi(i=1,2,…,Y;xi∈[1,Y]),延遲時間 T2=xik,其中系數(shù)為主機發(fā)送最長數(shù)據(jù)包到從機接收所需時間。系統(tǒng)規(guī)定所有設(shè)備同時延時,并在延遲時間到后廣播一條地址分配命令。如果在延時期間內(nèi),設(shè)備收到了其他設(shè)備發(fā)來的地址分配命令,本機取消延時進程。因此,生成最小隨機數(shù)的設(shè)備將成為主機,并將本機地址設(shè)為0。
步驟2主機廣播地址分配命令,并設(shè)定接收數(shù)據(jù)等待定時時間T1=(Y+1)k。從機收到地址分配命令后開始定時2 s,并判斷本機是否已經(jīng)分配地址。若已分配地址,則不應答;若沒有分配,則生成相應的隨機數(shù)xi和延遲時間T2,達到延遲時間后從機向主機發(fā)送含有本機ID的應答包。
步驟3主機檢測T1時間內(nèi)有無應答包。若有應答且校驗碼正確,主機廣播含有從機ID和地址ADR的數(shù)據(jù)包;如果校驗碼出錯,表示生成了2個相同的最小隨機數(shù),則轉(zhuǎn)至步驟2。若無應答,判斷是否N=20,若不等則轉(zhuǎn)至步驟2;若相等,表示連續(xù)20次無應答,地址分配完畢,算法結(jié)束退出。
從機檢測2 s內(nèi)有無主機發(fā)送的數(shù)據(jù)包,若無數(shù)據(jù)包,表示主機故障,轉(zhuǎn)至步驟1;若收到數(shù)據(jù)包,則檢測數(shù)據(jù)包中ID與本機ID是否匹配。若ID不匹配,則丟棄數(shù)據(jù)包;若匹配成功,則保存地址ADR并設(shè)置,向主機回復握手包表示一次地址分配成功,轉(zhuǎn)至步驟2。(主機收到握手包則將Y-1)
需要說明的是,若在步驟1中生成了2個相同的最小隨機數(shù),將會出現(xiàn)2臺“臨時”主機,而從機接收到的校驗碼會出錯,主機也無法收到從機回復的應答包。故約定主機發(fā)送地址分配命令后(與從機檢測校驗碼出錯同時),各設(shè)備定時2 s,2 s內(nèi)各設(shè)備收不到主機的命令,將重新完成步驟1。
上電啟動后,各個設(shè)備遵循的算法流程如圖2所示。
本算法選用30臺從機數(shù)進行仿真試驗,記錄每次生成的最小隨機數(shù)xi即可得到自動分配地址所需的總時間T,即
圖2 算法流程Fig.2 Algorithm flow chart
試驗中,RS-485總線的波特率設(shè)置為9600 b/s,程序中設(shè)置Y=30,k=50ms,N=5;模M初始值選為101,Y 每減少 5,模 M 分別替換為 71,61,41,22,11。
試驗選用2017年2月10日1~10號、2015年5月5日21~30號、2010年9月1日101~110號等3個批次的設(shè)備。機號n為1~30的設(shè)備,其中1~10號機的ID分別為07E1020A0001—07E1020A000A,11~20號機的ID分別為07DF05050015—07DF0505001E,21 ~30 號 機 的 設(shè) 備 ID 為07DA09010065—07DA0901006E。表2為具體的試驗數(shù)據(jù)。
試驗中,第1個最小的隨機數(shù)是0,由17號機產(chǎn)生,因此17號機成為主機開始發(fā)送地址分配命令。試驗未出現(xiàn)最小隨機數(shù)相同的情況,表明a,b,M的選取適當。求得總時間T=7.95 s。
分別選取連續(xù)和完全隨機的從機ID作為隨機種子,各運行20次,均實現(xiàn)了自動組網(wǎng)及從機地址的自動分配,平均完成時間約8 s。另外,將本算法與采用隨機時隙思想的方法進行對比,后者雖然也能實現(xiàn)地址的地址分配并避免地址沖突,但平均完成時間需要9 min,效率遠低于基于隨機數(shù)發(fā)生器的地址分配算法。由此可見,本算法具有執(zhí)行效率高、穩(wěn)定性好等優(yōu)點。
表2 試驗數(shù)據(jù)Tab.2 Experimental data
本文為了解決基于總線通訊的無主機工控系統(tǒng)中自動組網(wǎng)與從機地址不方便設(shè)置的問題,提出了基于隨機數(shù)發(fā)生器的自動組網(wǎng)與設(shè)備地址分配方法。對該算法進行了詳細的分析,通過試驗驗證了該算法,并與其他地址自動分配算法對比,基于隨機數(shù)發(fā)生器的算法所需時間更短,分配效率更高。實踐證明,該算法對總線通訊網(wǎng)絡(luò)是可行的。
[1] 馬慶功,莫玉華,鄭恩興.基于RS485多機通信系統(tǒng)設(shè)計[J].電子世界,2012,33(1):132-133.
[2] Tanenbaurn Andrew S.計算機網(wǎng)絡(luò)[M].潘愛民,譯.北京:清華大學出版社,2004.
[3] 楊自強,魏公毅.綜述:產(chǎn)生偽隨機數(shù)的若干新方法[J].數(shù)值計算與計算機應用學報,2001,22(3):201-215.
[4] 林國順,黃梯云.模擬隨機數(shù)統(tǒng)計性質(zhì)比較[J].數(shù)理統(tǒng)計與管理,2000,19(2):30-34.
[5] 彭娜,黎英,林慶超,等.基于RS-485總線主從通信協(xié)議及其實現(xiàn)[J].云南大學學報(自然科學版),2007,29(s2):259-262.
Automatic Allocation Method of Device Address Based on Random Number Generator
ZHANG Lei1,YANG Qi-fan2
(1.School of Electrical and Information Engineering,Jiangsu University,Zhenjiang 212013,China;2.Quality assurance department SAIC FAW-Volkswagen Automobile Co.,Ltd.,Shanghai 201800,China)
Bus communication is commonly used in industrial control systems,which is often a mainframe and a slave structure.The traditional bus communication network usually uses the manual method such as dialing code to set the address of the equipment.The automatic organization of the system and the automatic distribution of the address has always been a difficult problem.A new method of automatic network and device address allocation based on random number generator is proposed,which realizes the automatic distribution of the address.The method is applicable to the control system without host,which can automatically select the host,and can automatically organize and distribute the address on power supply,and the required time is shorter and the distribution efficiency is higher.Practice has proved that this method is stable and reliable,and has good application and popularization value.
bus communication;automatic networking;address allocation;random number
TP336
B
1001-9944(2017)11-0036-04
10.19557/j.cnki.1001-9944.2017.11.009
2017-06-05;
2017-09-03
張壘(1993—),男,在讀碩士研究生,研究方向為控制工程。