引言:
在RS-485網(wǎng)絡(luò)(以下簡(jiǎn)稱為485網(wǎng)絡(luò))中,經(jīng)常需要多臺(tái)主機(jī)控制多臺(tái)從機(jī)。當(dāng)多臺(tái)主機(jī)同時(shí)發(fā)送數(shù)據(jù)時(shí),將發(fā)生競(jìng)爭(zhēng)冒險(xiǎn)。本文采用可重觸發(fā)單穩(wěn)態(tài)觸發(fā)器74123作為延時(shí)控制,設(shè)計(jì)了一款多主機(jī)485網(wǎng)絡(luò)中避免RS-485總線(以下簡(jiǎn)稱為485總線)競(jìng)爭(zhēng)冒險(xiǎn)、保持?jǐn)?shù)據(jù)完整性的模塊。經(jīng)過(guò)長(zhǎng)時(shí)間測(cè)試,多主機(jī)發(fā)送數(shù)據(jù)在485總線上發(fā)生競(jìng)爭(zhēng)冒險(xiǎn)的概率降至0.1%以下,取得了顯著的效果。
RS-485網(wǎng)絡(luò)綜述
RS-485是一種符合工業(yè)通訊標(biāo)準(zhǔn)的數(shù)據(jù)傳輸總線,它是美國(guó)電子工業(yè)協(xié)會(huì)(EIA)制定的平衡發(fā)送、差分接收的標(biāo)準(zhǔn)異步串行總線。RS-485傳輸數(shù)據(jù)線路少,易于
實(shí)現(xiàn)和擴(kuò)展,傳輸距離遠(yuǎn),最大傳輸距離可達(dá)1200米;它的通訊速率高,數(shù)據(jù)最高傳輸速率為10Mbps;它從根本上消除了信號(hào)地線,具有很強(qiáng)的抗干擾能力。它易于實(shí)現(xiàn)一對(duì)多點(diǎn)的通訊,接口總線上可連接32個(gè)站點(diǎn),加中繼器后可達(dá)255個(gè)站點(diǎn)。
競(jìng)爭(zhēng)冒險(xiǎn)
RS-485為半雙工接口,采用雙向單信道通信方式。在485網(wǎng)絡(luò)中,同一個(gè)時(shí)刻只能有一個(gè)站點(diǎn)發(fā)送數(shù)據(jù),其它站點(diǎn)處于接收狀態(tài),以免發(fā)生485總線競(jìng)爭(zhēng)冒險(xiǎn)。
485網(wǎng)絡(luò)中,一臺(tái)主機(jī)控制多臺(tái)從機(jī),采用主/從通信方式,從機(jī)不主動(dòng)發(fā)送數(shù)據(jù)。每次通信均從主機(jī)發(fā)起,不會(huì)出現(xiàn)485總線競(jìng)爭(zhēng)冒險(xiǎn)。在有些工業(yè)現(xiàn)場(chǎng),需要多臺(tái)主機(jī)同時(shí)控制從機(jī),如果將主機(jī)與從機(jī)直接互連,每臺(tái)主機(jī)發(fā)送數(shù)據(jù)為主動(dòng)的且隨機(jī)的,直接互連勢(shì)必出現(xiàn)兩臺(tái)以上主機(jī)同時(shí)發(fā)送數(shù)據(jù)的情況,數(shù)據(jù)同時(shí)發(fā)送到485總線上,造成485總線競(jìng)爭(zhēng)冒險(xiǎn)。為了避免此錯(cuò)誤的發(fā)生,在多臺(tái)主機(jī)與485總線之間分別加入一個(gè)模塊,使多臺(tái)主機(jī)在同一個(gè)時(shí)刻只能有一臺(tái)主機(jī)數(shù)據(jù)發(fā)送到485總線上,屏蔽其它主機(jī)發(fā)送信號(hào)。屏蔽原則:在空閑狀態(tài)下,第一個(gè)發(fā)送數(shù)據(jù)的主機(jī)不屏蔽,在該主機(jī)發(fā)送數(shù)據(jù)結(jié)束之前,屏蔽其它主機(jī)發(fā)送的數(shù)據(jù)。這樣有效地降低了485總線競(jìng)爭(zhēng)冒險(xiǎn)的概率。
硬件設(shè)計(jì)
本設(shè)計(jì)采用74123可重觸發(fā)單穩(wěn)態(tài)觸發(fā)器構(gòu)成屏蔽信號(hào)電路,監(jiān)聽(tīng)485總線數(shù)據(jù),當(dāng)485總線空閑時(shí),主機(jī)發(fā)送數(shù)據(jù)可以通過(guò)485芯片輸出到485總線上;當(dāng)485總線有數(shù)據(jù)時(shí),自動(dòng)屏蔽該主機(jī)發(fā)送的數(shù)據(jù),待485總線空閑時(shí),該主機(jī)發(fā)送端的數(shù)據(jù)方可輸送到485總線上。下面先簡(jiǎn)單介紹一下74123芯片和485芯片,然后詳細(xì)介紹硬件設(shè)計(jì)原理。
74123為雙可重觸發(fā)單穩(wěn)態(tài)觸發(fā)器(有清除端)。其管腳圖如下圖:
RS-485接口芯片(以下簡(jiǎn)稱為485芯片)有兩個(gè)控制使能端,接收使能端/RE和發(fā)送使能端DE。其中/RE為低電平有效,DE為高電平有效。將/RE和DE短接,用一個(gè)控制信號(hào)即可控制接收和發(fā)送兩種狀態(tài)。/RE和DE為“1”時(shí),發(fā)送端接通,數(shù)據(jù)通過(guò)DI腳發(fā)送到485總線上;/RE和DE為“0”時(shí),接收端接通,如果485總線上有數(shù)據(jù),則通過(guò)485芯片轉(zhuǎn)換,有RO腳輸出高低電平信號(hào)。
圖2中自動(dòng)流向控制電路IC1(以下簡(jiǎn)稱IC1)從DataI信號(hào)采集,輸出控制485芯片的/RE和DE端。空閑時(shí),DataI保持高電平,IC1輸出低電平,485芯片處于接收狀態(tài);當(dāng)DataI有數(shù)據(jù)時(shí),IC1輸出控制信號(hào),使485芯片輸出端接通,DataI信號(hào)輸送到485總線上;當(dāng)DataI數(shù)據(jù)傳輸結(jié)束后,DataI保持高電平,IC1輸出低電平,485芯片轉(zhuǎn)為接收狀態(tài)。
圖3所示電路是在圖2的基礎(chǔ)上加入可重觸發(fā)單穩(wěn)態(tài)觸發(fā)器電路IC2(以下簡(jiǎn)稱IC2)。
當(dāng)空閑時(shí),即DataI保持高電平、485總線空閑,即485總線上無(wú)數(shù)據(jù)(A為“1”、B為“0”),此時(shí)IC1輸出低電平,經(jīng)過(guò)“與”門IC3(以下簡(jiǎn)稱IC3)輸出低電平控制485芯片的/RE和DE端,485芯片保持接收狀態(tài),DataO保持高電平,IC2的負(fù)脈沖輸出端/Q輸出高電平。
當(dāng)485總線上有數(shù)據(jù)輸入、DataI空閑時(shí),485芯片處于接收狀態(tài),DataO有數(shù)據(jù),IC2電路被觸發(fā),負(fù)脈沖輸出端/Q輸出低電平,IC3被鎖住持續(xù)輸出低電平,485芯片保持接收狀態(tài)。直到485總線上連續(xù)數(shù)據(jù)包傳輸結(jié)束之前,IC2連續(xù)被觸發(fā),負(fù)脈沖輸出端/Q一直輸出低電平,485芯片一直保持接收狀態(tài)。在此過(guò)程中,DataI有數(shù)據(jù)輸入時(shí),因?yàn)?85芯片處于接收狀態(tài),DataI數(shù)據(jù)被屏蔽,485總線數(shù)據(jù)不受輸入端DataI數(shù)據(jù)的干擾,即不會(huì)發(fā)生競(jìng)爭(zhēng)冒險(xiǎn),保證總線數(shù)據(jù)的完整性。當(dāng)485總線連續(xù)數(shù)據(jù)包發(fā)送結(jié)束后,IC2負(fù)脈沖輸出端/Q低電平脈沖結(jié)束,恢復(fù)到高電平,IC3輸出端隨IC1輸出信號(hào)變化,即485芯片收發(fā)直接由IC1控制,此時(shí)DataI有數(shù)據(jù)時(shí),可以經(jīng)過(guò)485芯片輸送到485總線上。
當(dāng)485總線無(wú)數(shù)據(jù)、DataI有數(shù)據(jù)輸入時(shí),此時(shí)DataO保持高電平,IC1從DataI采集到電平信號(hào),輸出控制信號(hào),使485芯片輸出端接通,DataI數(shù)據(jù)輸出到485總線上。直到DataI連續(xù)數(shù)據(jù)包發(fā)送結(jié)束之前,485芯片一直處于發(fā)送狀態(tài)。因?yàn)镈ataO保持高電平,IC2的負(fù)脈沖輸出端/Q保持高電平,485芯片的控制端/RE和DE直接由IC1輸出控制。當(dāng)DataI連續(xù)數(shù)據(jù)包結(jié)束后,IC1輸出低電平,485芯片轉(zhuǎn)為接收狀態(tài)。
通過(guò)調(diào)節(jié)IC2電路的R和C值可控制/Q輸出的負(fù)脈沖的脈寬tW。當(dāng)C≥1000pF時(shí), tW=K·R·C
其中K為常數(shù),與外界溫度及外接電容C有關(guān),在0.2~0.6間選擇。
當(dāng)C≤1000pF時(shí),tW估計(jì)值如下: tW=6+0.05C(pF)+0.45R(kΩ)C+11.6R
圖4為模塊硬件電路原理圖。左側(cè)與主機(jī)485接口連接,右側(cè)連接485總線。
圖5為兩臺(tái)主機(jī)與兩臺(tái)從機(jī)組成的485網(wǎng)絡(luò)。其中主機(jī)與485總線之間經(jīng)過(guò)圖4中的模塊連接。從機(jī)不主動(dòng)發(fā)送數(shù)據(jù),每次通信均從主機(jī)端發(fā)起。開(kāi)始時(shí)485總線空閑,即兩臺(tái)主機(jī)與兩臺(tái)從機(jī)均沒(méi)有發(fā)送數(shù)據(jù),此時(shí)模塊I和模塊II及兩臺(tái)從機(jī)的485接口芯片均處于接收狀態(tài)。
某一時(shí)刻起,主機(jī)I開(kāi)始發(fā)送數(shù)據(jù),兩臺(tái)從機(jī)收到數(shù)據(jù),同時(shí)模塊II收到數(shù)據(jù),將主機(jī)II發(fā)送端屏蔽。在主機(jī)I數(shù)據(jù)沒(méi)有發(fā)送結(jié)束之前,模塊II一直接收485總線數(shù)據(jù),持續(xù)屏蔽主機(jī)II發(fā)送端。直到主機(jī)I數(shù)據(jù)發(fā)送結(jié)束后,模塊II自動(dòng)解除主機(jī)II發(fā)送端的屏蔽。在主機(jī)I發(fā)送數(shù)據(jù)過(guò)程中,兩臺(tái)從在等待數(shù)據(jù)發(fā)送結(jié)束后才返回?cái)?shù)據(jù),所以兩臺(tái)從機(jī)不發(fā)送數(shù)據(jù);主機(jī)II隨時(shí)可能發(fā)送數(shù)據(jù),由于模塊II在檢測(cè)到485總線上有數(shù)據(jù)屏蔽了主機(jī)II的發(fā)送端,所以485總線上只有一個(gè)站點(diǎn)——主機(jī)I在發(fā)送數(shù)據(jù),避免了發(fā)生競(jìng)爭(zhēng)冒險(xiǎn),保證了主機(jī)I發(fā)送的數(shù)據(jù)的完整性。同理當(dāng)485總線空閑時(shí),由主機(jī)II發(fā)起的一次通信過(guò)程中,模塊I自動(dòng)屏蔽主機(jī)I的發(fā)送端,避免了發(fā)生競(jìng)爭(zhēng)冒險(xiǎn),保證主機(jī)II發(fā)送數(shù)據(jù)的完整性。
從機(jī)在接到主機(jī)命令后,返回?cái)?shù)據(jù)過(guò)程中,模塊I和模塊II自動(dòng)屏蔽發(fā)送端。從機(jī)發(fā)送結(jié)束后,485總線空閑,模塊I和模塊II自動(dòng)解除發(fā)送端的屏蔽,等待下一次通信。
圖5中僅在主機(jī)與485總線之間連接了此模塊,如果從機(jī)數(shù)量比較多,為了防止兩臺(tái)以上從機(jī)同時(shí)發(fā)送數(shù)據(jù),在從機(jī)與485總線之間接入此模塊,確保在同一時(shí)刻485總線上只有一個(gè)站點(diǎn)發(fā)送數(shù)據(jù),其它站點(diǎn)處于接收狀態(tài)。
結(jié)束語(yǔ)
在多主機(jī)的485網(wǎng)絡(luò)中,接入本文設(shè)計(jì)的模塊,通過(guò)總線上數(shù)據(jù)信號(hào)屏蔽主機(jī)發(fā)送信號(hào),使總線傳輸數(shù)據(jù)不受影響,解決了主機(jī)隨機(jī)發(fā)送數(shù)據(jù)發(fā)生總線競(jìng)爭(zhēng)冒險(xiǎn),大大提高了RS-485總線通信的質(zhì)量。
參考文獻(xiàn)
【1】閻石主編.?dāng)?shù)字電子技術(shù)基礎(chǔ)(第4版).北京:高等教育出版社,2001
【2】康華光主編.電子技術(shù)基礎(chǔ)(第3版).北京:高等教育出版社,1988
【3】劉必虎,沈建國(guó)編著.?dāng)?shù)字邏輯電路.北京:科學(xué)出版社,2000
【4】電子工程手冊(cè)編委會(huì),集成電路手冊(cè)分編委會(huì)編.標(biāo)準(zhǔn)集成電路數(shù)據(jù)手冊(cè) TTL電路(增補(bǔ)本).北京:電子工業(yè)出版社,1994
【5】【美】Jan Axelson.Serial Port Complete Programming and Circuits for RS-232 and RS-485 Links and Networks.北京:中國(guó)電力出版社,2001