本發(fā)明涉及rs485通信領(lǐng)域,具體是涉及一種避免主從設(shè)備沖突的rs485通信系統(tǒng)及方法。
背景技術(shù):
在要求通信距離為幾十米到上千米時,廣泛采用rs485串行總線標(biāo)準(zhǔn)。rs485采用平衡發(fā)送和差分接收,因此具有抑制共模干擾的能力。加上總線收發(fā)器具有高靈敏度,能檢測低至200mv的電壓,故傳輸信號能在千米以外得到恢復(fù)。rs485采用半雙工工作方式,任何時候只能有一點處于發(fā)送狀態(tài),因此,發(fā)送電路須由使能信號加以控制。rs485用于多點互連時非常方便,可以省掉許多信號線。應(yīng)用rs485可以聯(lián)網(wǎng)構(gòu)成分布式系統(tǒng),其允許最多并聯(lián)32臺驅(qū)動器和32臺接收器。
在通信設(shè)備系統(tǒng)應(yīng)用中,rs485總線構(gòu)成的現(xiàn)場網(wǎng)絡(luò)得到了廣泛的應(yīng)用,原因如下:
①rs485總線結(jié)構(gòu)簡單、易于建構(gòu),由于它采用平衡傳輸,物理介質(zhì)只須一對雙絞線。
②傳輸距離遠(yuǎn),可達(dá)1200m,速率范圍達(dá)幾十~幾百kb/s。
③總線上可以掛接多個節(jié)點,少則三十幾個,多則上百個,可以滿足大多數(shù)的工業(yè)應(yīng)用需要。
④總線接口芯片豐富,易于購買,如max481、max483、max485、max487、max488、max491、max253、max1480等在市場上是很常見的。
⑤造價低,有很好的性價比。
rs485總線在構(gòu)成現(xiàn)場網(wǎng)絡(luò)時,其拓?fù)浣Y(jié)構(gòu)形式主要有總線式、環(huán)形式、星形式等,其中以總線式拓?fù)浣Y(jié)構(gòu)應(yīng)用最廣。在這種結(jié)構(gòu)中,只需要一對主干線,分散在各處的rs485總線設(shè)備(節(jié)點)可以直接“掛”在總線上。
但是,由于傳輸數(shù)據(jù)的物理介質(zhì)只是一對雙絞線,這就決定了:系統(tǒng)在任一時刻,只能有一個節(jié)點處于發(fā)送狀態(tài),其他rs485節(jié)點必須處于接收狀態(tài),所以rs485總線只能以半雙工方式進(jìn)行通信。
如果現(xiàn)場各分布節(jié)點的實時操作性要求不十分嚴(yán)格,或系統(tǒng)中節(jié)點數(shù)不是很大時,常采用主-從工作模式,即系統(tǒng)中只存在唯一的主節(jié)點(通常是上位計算機(jī)),其余各節(jié)點都處于從屬地位。
總線的占用與分配完全由主節(jié)點來主導(dǎo),從節(jié)點要完全“聽從”主節(jié)點的“指揮”。主節(jié)點以巡回輪流的方式,逐一掃描各節(jié)點,并與其建立通信聯(lián)系。掃描是以廣播方式進(jìn)行的,掃描編碼串中的地址字段包含有某個待訪問節(jié)點的地址,所有從節(jié)點都接收同一編碼串,然而,只有與編碼串中地址相同的節(jié)點,才會對接收的代碼進(jìn)行分析、執(zhí)行主機(jī)命令、修改某些現(xiàn)場參數(shù),并將現(xiàn)場的狀態(tài)數(shù)據(jù)回傳給主機(jī),發(fā)送完畢后立刻釋放總線。其他rs485節(jié)點則由于地址不符,故會棄掉剛才收到的碼串,不作任何回應(yīng)。
可以看出,當(dāng)rs485節(jié)點數(shù)較多時,對各節(jié)點輪流掃描一遍所需要的時間開銷是相當(dāng)可觀的,這意味著系統(tǒng)實時性差,rs485總線的通信效率降低。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是為了克服上述背景技術(shù)的不足,提供一種避免主從設(shè)備沖突的rs485通信系統(tǒng)及方法,能夠?qū)崿F(xiàn)主設(shè)備和從設(shè)備在自己的時隙發(fā)送數(shù)據(jù),有效提高設(shè)備的實時性和可靠性。
本發(fā)明提供一種避免主從設(shè)備沖突的rs485通信系統(tǒng),該系統(tǒng)包括一個主設(shè)備和多個從設(shè)備,
主設(shè)備檢測到有從設(shè)備上電時,主設(shè)備在自己的時隙內(nèi),將主設(shè)備的當(dāng)前時間、時間戳打包為時間同步數(shù)據(jù),發(fā)送到上電的從設(shè)備;該從設(shè)備接收到主設(shè)備發(fā)來的時間同步數(shù)據(jù)后進(jìn)行組包,根據(jù)組包后的時間同步數(shù)據(jù)更新自己的時間和時間戳,直至?xí)r間同步成功;
從設(shè)備在自己的時隙,將時間同步成功的響應(yīng)數(shù)據(jù)發(fā)送給主設(shè)備;主設(shè)備接收到從設(shè)備發(fā)來的響應(yīng)數(shù)據(jù)后進(jìn)行組包,根據(jù)組包后的響應(yīng)數(shù)據(jù),確認(rèn)主從設(shè)備的時間同步成功;
主從設(shè)備在各自的空隙時隙內(nèi)發(fā)送數(shù)據(jù),避免主從設(shè)備沖突。
在上述技術(shù)方案的基礎(chǔ)上,所述主從設(shè)備在各自的空隙時隙內(nèi)發(fā)送數(shù)據(jù)的流程如下:主設(shè)備帶4個從設(shè)備時,以1秒為一個發(fā)送數(shù)據(jù)周期,將1秒分為5個200毫秒,主設(shè)備和4個從設(shè)備在每個200毫秒里有20毫秒的發(fā)送時隙,主從設(shè)備之間有20毫秒的空隙,避免它們在自己的空隙時隙發(fā)送數(shù)據(jù)時沖突。
在上述技術(shù)方案的基礎(chǔ)上,所述主設(shè)備發(fā)送數(shù)據(jù)時,主設(shè)備先根據(jù)當(dāng)前時間和時間戳算出一個差值,分析差值處于1到1000ms的哪個區(qū)間,再判斷是否在自己的時隙內(nèi),如果在,直接發(fā)送數(shù)據(jù);如果不在,等自己的時隙到了再發(fā)送數(shù)據(jù)。
在上述技術(shù)方案的基礎(chǔ)上,所述主設(shè)備檢測到有從設(shè)備上電之前,主從設(shè)備各自進(jìn)行rs485初始化。
在上述技術(shù)方案的基礎(chǔ)上,所述rs485初始化的過程為:創(chuàng)建rs485發(fā)送任務(wù)、rs485發(fā)送任務(wù)隊列、rs485接收任務(wù)、rs485接收任務(wù)隊列。
本發(fā)明還提供一種避免主從設(shè)備沖突的rs485通信方法,包括以下步驟:
主設(shè)備檢測到有從設(shè)備上電時,主設(shè)備在自己的時隙內(nèi),將主設(shè)備的當(dāng)前時間、時間戳打包為時間同步數(shù)據(jù),發(fā)送到上電的從設(shè)備;該從設(shè)備接收到主設(shè)備發(fā)來的時間同步數(shù)據(jù)后進(jìn)行組包,根據(jù)組包后的時間同步數(shù)據(jù)更新自己的時間和時間戳,直至?xí)r間同步成功;
從設(shè)備在自己的時隙,將時間同步成功的響應(yīng)數(shù)據(jù)發(fā)送給主設(shè)備;主設(shè)備接收到從設(shè)備發(fā)來的響應(yīng)數(shù)據(jù)后進(jìn)行組包,根據(jù)組包后的響應(yīng)數(shù)據(jù),確認(rèn)主從設(shè)備的時間同步成功;
主從設(shè)備在各自的空隙時隙內(nèi)發(fā)送數(shù)據(jù),避免主從設(shè)備沖突。
在上述技術(shù)方案的基礎(chǔ)上,所述主從設(shè)備在各自的空隙時隙內(nèi)發(fā)送數(shù)據(jù)的流程如下:主設(shè)備帶4個從設(shè)備時,以1秒為一個發(fā)送數(shù)據(jù)周期,將1秒分為5個200毫秒,主設(shè)備和4個從設(shè)備在每個200毫秒里有20毫秒的發(fā)送時隙,主從設(shè)備之間有20毫秒的空隙,避免它們在自己的空隙時隙發(fā)送數(shù)據(jù)時沖突。
在上述技術(shù)方案的基礎(chǔ)上,所述主設(shè)備發(fā)送數(shù)據(jù)時,主設(shè)備先根據(jù)當(dāng)前時間和時間戳算出一個差值,分析差值處于1到1000ms的哪個區(qū)間,再判斷是否在自己的時隙內(nèi),如果在,直接發(fā)送數(shù)據(jù);如果不在,等自己的時隙到了再發(fā)送數(shù)據(jù)。
在上述技術(shù)方案的基礎(chǔ)上,所述主設(shè)備檢測到有從設(shè)備上電之前,還包括以下步驟:主從設(shè)備各自進(jìn)行rs485初始化。
在上述技術(shù)方案的基礎(chǔ)上,所述rs485初始化的過程為:創(chuàng)建rs485發(fā)送任務(wù)、rs485發(fā)送任務(wù)隊列、rs485接收任務(wù)、rs485接收任務(wù)隊列。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點如下:
(1)本發(fā)明利用時分解決rs485通信沖突的問題,不需要像以往那樣必須是主設(shè)備發(fā)送從設(shè)備回應(yīng),從設(shè)備可以自由發(fā)送數(shù)據(jù)到主設(shè)備,能夠?qū)崿F(xiàn)主設(shè)備和從設(shè)備在自己的時隙發(fā)送數(shù)據(jù),有效提高設(shè)備的實時性和可靠性。申請人在新改版的智能odn系統(tǒng)中采用了本發(fā)明的通信系統(tǒng)及通信方法,能夠移植和無縫的替代傳統(tǒng)的rs485通信一問一答的通信方式。
(2)如果應(yīng)用現(xiàn)場對實時性有較高要求,例如要及時上傳某個設(shè)備的突發(fā)狀態(tài),就必須讓從節(jié)點也能夠享有總線控制權(quán)。本發(fā)明具有并發(fā)性、高效率、安全性、冗余性,并且便于管理,能滿足通信設(shè)備大批量數(shù)據(jù)采集、并行、可靠安全的配置管理。
附圖說明
圖1是本發(fā)明實施例中避免主從設(shè)備沖突的rs485通信方法的流程圖。
圖2是本發(fā)明實施例中主從設(shè)備的時隙圖。
圖3是本發(fā)明實施例中主從設(shè)備根據(jù)時隙發(fā)送數(shù)據(jù)的流程圖。
具體實施方式
下面結(jié)合附圖及具體實施例對本發(fā)明作進(jìn)一步的詳細(xì)描述。
本發(fā)明實施例提供一種避免主從設(shè)備沖突的rs485通信系統(tǒng),該系統(tǒng)包括一個主設(shè)備和多個從設(shè)備。
本發(fā)明實施例還提供一種避免主從設(shè)備沖突的rs485通信方法,包括以下步驟:
主從設(shè)備各自進(jìn)行rs485初始化,rs485初始化的過程為:創(chuàng)建rs485發(fā)送任務(wù)、rs485發(fā)送任務(wù)隊列、rs485接收任務(wù)、rs485接收任務(wù)隊列;
主設(shè)備檢測到有從設(shè)備上電時,主設(shè)備在自己的時隙內(nèi),將主設(shè)備的當(dāng)前時間、時間戳打包為時間同步數(shù)據(jù),發(fā)送到上電的從設(shè)備;該從設(shè)備接收到主設(shè)備發(fā)來的時間同步數(shù)據(jù)后進(jìn)行組包,根據(jù)組包后的時間同步數(shù)據(jù)更新自己的時間和時間戳,直至?xí)r間同步成功;
從設(shè)備在自己的時隙,將時間同步成功的響應(yīng)數(shù)據(jù)發(fā)送給主設(shè)備;主設(shè)備接收到從設(shè)備發(fā)來的響應(yīng)數(shù)據(jù)后進(jìn)行組包,根據(jù)組包后的響應(yīng)數(shù)據(jù),確認(rèn)主從設(shè)備的時間同步成功;
主從設(shè)備在各自的空隙時隙內(nèi)發(fā)送數(shù)據(jù),避免主從設(shè)備沖突。
參見圖1所示,本發(fā)明實施例中避免主從設(shè)備沖突的rs485通信方法,具體包括以下步驟:
步驟101、主從設(shè)備各自進(jìn)行rs485初始化,rs485初始化的過程為:創(chuàng)建rs485發(fā)送任務(wù)、rs485發(fā)送任務(wù)隊列、rs485接收任務(wù)、rs485接收任務(wù)隊列;
步驟102、主設(shè)備檢測到從設(shè)備上電后,主設(shè)備取當(dāng)前時間和時間戳,將當(dāng)前時間和時間戳打包到時間同步數(shù)據(jù)中,并打入到rs485發(fā)送任務(wù)隊列;
步驟103、主設(shè)備的rs485發(fā)送任務(wù)取出時間同步數(shù)據(jù),并根據(jù)自己的時隙發(fā)送時間同步數(shù)據(jù)給從設(shè)備;
步驟104、從設(shè)備的rs485接收任務(wù)收到時間同步數(shù)據(jù)并組包,因為rs485數(shù)據(jù)可能會被分包發(fā)送,所以接收方(從設(shè)備)必須要對rs485數(shù)據(jù)包進(jìn)行組包;
步驟105、從設(shè)備從組包后的時間同步數(shù)據(jù)中獲取當(dāng)前時間和時間戳,將獲取的當(dāng)前時間設(shè)置為從設(shè)備的當(dāng)前時間,并將獲取的時間戳設(shè)置為從設(shè)備的時間戳,直至同步成功;
步驟106、從設(shè)備將時間同步響應(yīng)數(shù)據(jù)打入到自己的rs485發(fā)送隊列中;
步驟107、從設(shè)備的rs485發(fā)送任務(wù)從rs485發(fā)送隊列中取出時間同步響應(yīng)數(shù)據(jù),根據(jù)自己的時隙,發(fā)送時間同步響應(yīng)數(shù)據(jù)給主設(shè)備;
步驟108、主設(shè)備的rs485接收任務(wù)在收到從設(shè)備發(fā)來的數(shù)據(jù)后組包;
步驟109、主設(shè)備根據(jù)組包后的時間同步響應(yīng)數(shù)據(jù),確認(rèn)主從設(shè)備的時間同步成功,后續(xù),主從設(shè)備在各自的空隙時隙內(nèi)發(fā)送數(shù)據(jù)而不會沖突。
本發(fā)明實施例利用時分解決rs485通信沖突的問題,能夠?qū)崿F(xiàn)主設(shè)備和從設(shè)備在自己的時隙發(fā)送數(shù)據(jù),有效提高設(shè)備的實時性和可靠性。
主從設(shè)備在各自的空隙時隙內(nèi)發(fā)送數(shù)據(jù)的流程如下:主設(shè)備帶4個從設(shè)備時,以1秒為一個發(fā)送數(shù)據(jù)周期,將1秒分為5個200毫秒,主設(shè)備和4個從設(shè)備在每個200毫秒里有20毫秒的發(fā)送時隙,參見圖2所示,主從設(shè)備之間有20毫秒的空隙,避免它們在自己的空隙時隙發(fā)送數(shù)據(jù)時沖突。
主設(shè)備發(fā)送數(shù)據(jù)時,主設(shè)備先根據(jù)當(dāng)前時間和時間戳算出一個差值,分析差值處于1到1000ms的哪個區(qū)間,再判斷是否在自己的時隙內(nèi),如果在,直接發(fā)送數(shù)據(jù);如果不在,等自己的時隙到了再發(fā)送數(shù)據(jù)。
參見圖3所示,主從設(shè)備在各自的空隙時隙內(nèi)發(fā)送數(shù)據(jù)的具體流程如下:
步驟201、主設(shè)備的rs485發(fā)送任務(wù)從rs485發(fā)送任務(wù)隊列中獲取時間同步數(shù)據(jù);
步驟202、主設(shè)備計算出當(dāng)前時間和時間戳的差值,時間差值是1到1000毫秒之間的一個數(shù);
步驟203、主設(shè)備根據(jù)時間差判斷自己是否處于發(fā)送時隙內(nèi),如果是,就到轉(zhuǎn)到步驟204;如果不是,就轉(zhuǎn)到步驟205;
步驟204、主設(shè)備在自己的時隙內(nèi)發(fā)送數(shù)據(jù);
步驟205、主設(shè)備等到自己的時隙再發(fā)送數(shù)據(jù)。
本領(lǐng)域的技術(shù)人員可以對本發(fā)明實施例進(jìn)行各種修改和變型,倘若這些修改和變型在本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則這些修改和變型也在本發(fā)明的保護(hù)范圍之內(nèi)。
說明書中未詳細(xì)描述的內(nèi)容為本領(lǐng)域技術(shù)人員公知的現(xiàn)有技術(shù)。