【摘 要】RS485總線是一種多用于半雙工通信方式的總線,在工業(yè)控制和數(shù)據(jù)采集中因其總線網(wǎng)絡(luò)組建成本低廉,可靠性高,分布范圍大等特點(diǎn)而得到廣泛應(yīng)用。本文介紹了在windows環(huán)境下進(jìn)行輪循訪問的總線協(xié)議,借鑒了windows應(yīng)用程序的消息隊(duì)列的模型,采用了多線程技術(shù),對(duì)整個(gè)網(wǎng)絡(luò)進(jìn)行統(tǒng)一控制,可應(yīng)用在實(shí)時(shí)性要求不是很高的工業(yè)控制和數(shù)據(jù)采集程序中。
【關(guān)鍵詞】RS485;多線程;輪循訪問;總線協(xié)
1 引言
RS485總線是由RS232總線發(fā)展而來,在工業(yè)控制和數(shù)據(jù)采集中得到廣泛應(yīng)用。然而RS485總線沒有統(tǒng)一的通信協(xié)議,所以在開發(fā)時(shí)往往臨時(shí)進(jìn)行協(xié)議設(shè)計(jì),這就導(dǎo)致了整個(gè)網(wǎng)絡(luò)系統(tǒng)在穩(wěn)定上存在或多或少的缺陷。
2 通信協(xié)議的總體模型
該通信協(xié)議以PC機(jī)(上位機(jī))為整個(gè)RS485總線網(wǎng)絡(luò)通信的控制中心,在一臺(tái)上上位機(jī)多臺(tái)下位機(jī)(可以是單片機(jī)或PLC等)以總線形式連接時(shí),由于RS485總線網(wǎng)絡(luò)為半雙工通信方式,因此在同一時(shí)刻,總線上只能存在一臺(tái)連接在總線上的設(shè)備信號(hào),若多臺(tái)設(shè)備同時(shí)發(fā)送信號(hào),則總線上的信號(hào)會(huì)發(fā)生沖突,進(jìn)而導(dǎo)致總線網(wǎng)絡(luò)通信失敗。為了避免這種情況的發(fā)生,我們采用了通過PC機(jī)(上位機(jī))對(duì)多臺(tái)下位機(jī)進(jìn)行輪循詢問的方式進(jìn)行信息交換(其實(shí)這種針對(duì)性的輪循詢問機(jī)制在RS485總線上進(jìn)行的是一種數(shù)據(jù)幀廣播,只不過下位機(jī)對(duì)于不是發(fā)給自己的數(shù)據(jù)幀不做響應(yīng)而已)。
在PC機(jī)(上位機(jī))對(duì)下位機(jī)進(jìn)行輪循詢問的時(shí)候,會(huì)向下位機(jī)發(fā)送詢問消息或者是控制消息,下位機(jī)若有數(shù)據(jù)需要提交給上位機(jī)時(shí),則會(huì)發(fā)送給上位機(jī)帶有相應(yīng)數(shù)據(jù)的數(shù)據(jù)幀,否則會(huì)回應(yīng)給上位機(jī)一個(gè)應(yīng)答消息表明已經(jīng)收到數(shù)據(jù)然后下位機(jī)會(huì)去執(zhí)行相應(yīng)的控制程序。
我們定義出四種數(shù)據(jù)幀:
詢問數(shù)據(jù)幀,它被用于上位機(jī)對(duì)下位機(jī)無控制信息進(jìn)行常態(tài)詢問時(shí)發(fā)送。
應(yīng)答數(shù)據(jù)幀,它被用于下位機(jī)對(duì)上位機(jī)無數(shù)據(jù)傳送進(jìn)行常態(tài)應(yīng)答時(shí)發(fā)送。
控制數(shù)據(jù)幀,它被用于上位機(jī)對(duì)下位機(jī)進(jìn)行控制或者傳送數(shù)據(jù)時(shí)發(fā)送。
上傳數(shù)據(jù)幀,它被用于下位機(jī)給上位機(jī)發(fā)送數(shù)據(jù)時(shí)發(fā)送。
3 多線程和共享隊(duì)列
在windows環(huán)境下,每一個(gè)應(yīng)用程序運(yùn)行起來都會(huì)產(chǎn)生一個(gè)相應(yīng)的進(jìn)程,在每一個(gè)進(jìn)程中至少包含一個(gè)線程,被稱之為主線程,其余的通過主線程創(chuàng)建的線程和主線程一起被稱之為該進(jìn)程的多個(gè)線程,一個(gè)進(jìn)程的多個(gè)線程能夠共享該進(jìn)程的地址空間和內(nèi)核對(duì)象,因此線程運(yùn)行時(shí)所需的資源比進(jìn)程要少得多,而且多個(gè)線程能夠在多核CPU的硬件環(huán)境下真正實(shí)現(xiàn)多任務(wù)的并發(fā)運(yùn)行,能夠大幅度的提高程序執(zhí)行效率,因此在實(shí)現(xiàn)上述RS485總線通信協(xié)議的時(shí)候,我們通過VC++的WinMain函數(shù)建立主線程并創(chuàng)建一個(gè)有主線程和子線程共享的隊(duì)列,主線程主要用來監(jiān)聽來自Microsoft Communications Control version 6.0綁定的COM端口的事件,創(chuàng)建子線程和向共享隊(duì)列中添加要發(fā)送的數(shù)據(jù)幀等功能。
4 結(jié)束語
本協(xié)議應(yīng)用在實(shí)時(shí)性要求不高的數(shù)據(jù)采集環(huán)境和工業(yè)控制環(huán)境中,能夠簡(jiǎn)化網(wǎng)絡(luò)設(shè)計(jì),減少企業(yè)開發(fā)的成本的投入。
參考文獻(xiàn):
[1]金為民. VC下利用串口進(jìn)行數(shù)據(jù)通訊的研究[J]. 計(jì)算機(jī)工程與設(shè)計(jì),2003,24(12).
[2]張克涵,張呼和,顧李馮.VC ++ 環(huán)境下的電機(jī)狀態(tài)監(jiān)測(cè)軟件設(shè)計(jì)[J]. 測(cè)控技術(shù),2012,31(2).
[3]駱斌,費(fèi)翔林. 多線程技術(shù)的研究與應(yīng)用[J]. 計(jì)算機(jī)學(xué)報(bào),2000,4.
[4]周桃,宗竹林,趙磊. 一種PON結(jié)構(gòu)航電總線協(xié)議的建模與仿真[J].計(jì)算機(jī)工程與應(yīng)用,2011,47(29).
[5]曾自強(qiáng),王玉菡.用VC++實(shí)現(xiàn)單片機(jī)與PC機(jī)串口通信的三種方法[J].自動(dòng)化與儀器儀表,2005,3.
作者簡(jiǎn)介:
李靖(1981-8-23),女,河北省邢臺(tái)人,碩士研究生,主要研究領(lǐng)域?yàn)樾畔⒓夹g(shù)應(yīng)用。
唐山市科技局科技項(xiàng)目,項(xiàng)目編號(hào):13130231z