RS 232串口多方控制的實(shí)現(xiàn)
RS 232串行通訊是各類工程應(yīng)用中經(jīng)常使用的通訊方式之一,但其點(diǎn)對(duì)點(diǎn)的通訊方式經(jīng)常會(huì)在使用中帶來(lái)不便。 一般的RS 232通訊應(yīng)用,經(jīng)常由一個(gè)控制方控制一臺(tái)設(shè)備,或采用菊花鏈方式連接,根據(jù)通訊地址的不同,由一個(gè)控制方控制多臺(tái)設(shè)備。但在工程應(yīng)用中卻經(jīng)常會(huì)遇到2臺(tái)或2臺(tái)以上的PC機(jī)需要控制同一臺(tái)設(shè)備,即由多個(gè)控制方控制一臺(tái)設(shè)備的情況,而為受控設(shè)備僅具備1個(gè)RS 232串口,這時(shí)需要有一臺(tái)能夠?qū)崿F(xiàn)RS 232串口多方控制的設(shè)備,本文針對(duì)這種設(shè)備的其中一種比較先進(jìn)的設(shè)計(jì)方法進(jìn)行說(shuō)明。該設(shè)備不僅成本低,實(shí)現(xiàn)方法簡(jiǎn)單,而且功能可擴(kuò)展,在工程中具有較強(qiáng)的適用性,能滿足多種復(fù)雜控制的需要。 l硬件設(shè)計(jì) 在控制系統(tǒng)中,控制方和被控設(shè)備的通訊協(xié)議和控制程序是固定的,在設(shè)計(jì)中不能改變,只能通過(guò)一臺(tái)中間設(shè)備,即串口擴(kuò)展設(shè)備,對(duì)控制方的命令進(jìn)行一定的解析處理,從而實(shí)現(xiàn)控制方和被控方之間的協(xié)調(diào)應(yīng)答。本文選用AT89S52單片機(jī)作為串口擴(kuò)展設(shè)備的核心控制器,系統(tǒng)的硬件原理圖如圖1所示。
系統(tǒng)中把單片機(jī)本身的串口作為主串口,用于連接被控設(shè)備,另外4個(gè)擴(kuò)展串口,用于連接4個(gè)控制方。當(dāng)多個(gè)控制方同時(shí)連續(xù)發(fā)送較多的命令數(shù)據(jù)時(shí),為了保證對(duì)所有數(shù)據(jù)的完整接收,需要將沒有來(lái)得及處理的數(shù)據(jù)做暫時(shí)的存儲(chǔ)。AT89S52單片機(jī)本身帶有256 B內(nèi)置的RAM,在很多情況下并不能滿足使用需要。DALLAS公司的DSl225含8 k×8 b非易失性SRAM,可作為外置的擴(kuò)展存儲(chǔ)器件。該器件的讀寫速度達(dá)到70 ns,完全能夠滿足對(duì)數(shù)據(jù)的即時(shí)讀寫[3]。 2程序設(shè)計(jì) 2.1數(shù)據(jù)存儲(chǔ)空間的分配 程序設(shè)計(jì)時(shí),首先應(yīng)對(duì)數(shù)據(jù)空間進(jìn)行規(guī)劃。在該系統(tǒng)中,根據(jù)需要,從AT89S52內(nèi)部8 k的數(shù)據(jù)存儲(chǔ)器中劃分出5塊區(qū)域,做5個(gè)FIFO數(shù)據(jù)隊(duì)列,每個(gè)FIFO隊(duì)列l(wèi) 536 B空間,分別用于存儲(chǔ)來(lái)自5個(gè)端口的數(shù)據(jù)。剩下的512 B作數(shù)據(jù)存儲(chǔ)的備用空間。 2.2 程序模塊 程序采用模塊化的設(shè)計(jì)思想,以方便修改、移植和檢錯(cuò)。整個(gè)控制程序由主程序、中斷、命令處理模塊、回送處理模塊4部分組成,實(shí)現(xiàn)原理如下: (1)中斷 串行口中斷和外部中斷,用于接收來(lái)自5個(gè)端口的數(shù)據(jù),分端口將接收到的數(shù)據(jù)存入對(duì)應(yīng)的FIFO,這里對(duì)數(shù)據(jù)不做其他的判斷或處理,盡量用最少的指令完成,減少中斷時(shí)間。以避免多個(gè)串口同時(shí)受到大量數(shù)據(jù)時(shí),發(fā)生數(shù)據(jù)丟失。 (2)命令處理模塊 針對(duì)控制方端口FIFO,若控制方FIFO中存在數(shù)據(jù),根據(jù)協(xié)議對(duì)數(shù)據(jù)進(jìn)行判斷,直接清除不符合協(xié)議的數(shù)據(jù);對(duì)符合協(xié)議的命令數(shù)據(jù),判斷完整條命令后,通過(guò)受控方端口向受控設(shè)備轉(zhuǎn)發(fā)整條命令,然后清掉FIFO中此條命令,如此逐步清空FIFO。 (3)回送處理模塊 針對(duì)受控方端口FIFO,若受控方FIFO中存在數(shù)據(jù),與"命令處理模塊"類似,根據(jù)協(xié)議對(duì)數(shù)據(jù)進(jìn)行判斷,清除不符合協(xié)議的數(shù)據(jù),對(duì)符合協(xié)議的回送數(shù)據(jù),判斷完整后,同時(shí)通過(guò)4個(gè)控制方端口向控制設(shè)備回送數(shù)據(jù),然后清掉FIFO中此條命令,如此逐步清空FIFO。 (4)主程序模塊 在主程序中,循環(huán)判斷5個(gè)FIFO中是否有數(shù)據(jù)。若控制方FIFO存在數(shù)據(jù),進(jìn)入命令處理模塊,清空FIFO后返回主程序,繼續(xù)循環(huán);若受控方FIFO存在數(shù)據(jù),進(jìn)入回送處理模塊,清空FIFO后返回主程序,繼續(xù)循環(huán)。這樣,每個(gè)控制方發(fā)送的命令,都會(huì)在FIFO中有短暫的緩沖,在多控制方同時(shí)發(fā)送命令時(shí),本設(shè)備可分先后將所有收到的命令逐個(gè)發(fā)送到受控設(shè)備,不會(huì)因發(fā)生沖突而造成數(shù)據(jù)丟失。對(duì)于受控設(shè)備回送的數(shù)據(jù),一般包含了工作狀態(tài)及配置等信息,需要同時(shí)回送到各個(gè)控制設(shè)備,使各個(gè)控制設(shè)備能夠及時(shí)做相應(yīng)的調(diào)整。 3功能擴(kuò)展 按照上述方法設(shè)計(jì)的該系統(tǒng)不僅適用于多控制方控制一個(gè)串口情況,還可根據(jù)工程中遇到的各種需求進(jìn)行功能擴(kuò)展。 (1)一個(gè)控制設(shè)備和多個(gè)受控設(shè)備 雖然,若被控的受控設(shè)備提供的通訊協(xié)議包含地址,可通過(guò)菊花鏈方式分別控制,但在工程應(yīng)用中有相當(dāng)多的設(shè)備協(xié)議中并不包含地址。如果要實(shí)現(xiàn)分別控制,可使用本設(shè)備,對(duì)每個(gè)下位端口分別分配一個(gè)虛擬地址,在命令處理模塊中加入地址判斷,使收到的命令僅向?qū)?yīng)地址的下位端口發(fā)送。 (2)多個(gè)控制設(shè)備和多個(gè)受控設(shè)備 在這種情況下,普通的連接方法不能滿足多設(shè)備之間協(xié)調(diào)通訊的需要。若使用本設(shè)備,只需在命令處理模塊和回送處理模塊中,修改相應(yīng)的端口數(shù)目即可。控制方和受控方的功能不變。 (3)在控制設(shè)備和受控設(shè)備中存在著多種不同的通訊協(xié)議。此時(shí),可利用本設(shè)備,添加協(xié)議轉(zhuǎn)換模塊,使之具備多種協(xié)議的解析功能,在收和發(fā)之間進(jìn)行對(duì)應(yīng)的協(xié)議轉(zhuǎn)換,這種方法,比工程中通常采用更改控制設(shè)備的控制程序的方法更簡(jiǎn)單、方便。 (4)上述幾種情況并存。尤其是控制設(shè)備與受控設(shè)備協(xié)議不同,而多個(gè)受控設(shè)備協(xié)議沒有地址,且需要分別控制時(shí)。本設(shè)備也可對(duì)每個(gè)受控方端口分別分配一個(gè)虛擬地址來(lái)實(shí)現(xiàn)分控,并在收發(fā)中間進(jìn)行通訊協(xié)議的轉(zhuǎn)換。 4 結(jié) 語(yǔ) 本文設(shè)計(jì)的串口擴(kuò)展設(shè)備,不但成本低、設(shè)計(jì)簡(jiǎn)單,而且可滿足工程上串口應(yīng)用的多種不同需要,具有較高的使用價(jià)值,對(duì)工程技術(shù)人員具有一定的參考意義。 |