版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第8章計算機通信技術8.1計算機通信概述8.2開放系統(tǒng)互連模型8.3串行通信的接口標準8.4串行通信的軟件實現(xiàn)技術8.5現(xiàn)場總線8.1計算機通信概述
8.1.1并行通信與串行通信
并行數(shù)據(jù)通信是以字節(jié)或字為單位的數(shù)據(jù)傳輸方式,即一次的傳輸量為8位(1個字節(jié)),除了8根或16根數(shù)據(jù)線、1根公共線外,還需要通信雙方聯(lián)絡用的控制線。并行通信的傳送速度快,但是傳輸線的根數(shù)多,成本高,一般用于近距離數(shù)據(jù)傳送。例如,部分科學儀器、醫(yī)療診斷儀器由于需要傳輸?shù)臄?shù)據(jù)量相當大,因此經(jīng)常使用并行傳輸接口(如GPIB和LPT等)。串行數(shù)據(jù)通信是以二進制的位(bit)為單位的數(shù)據(jù)傳輸方式,即每次只傳送1位,除了公共線以外,在一個數(shù)據(jù)傳輸方向上只需要1根數(shù)據(jù)線,這根線既作為數(shù)據(jù)線又作為通信聯(lián)絡控制線,數(shù)據(jù)信號和聯(lián)絡信號在這根線上按位進行傳送。串行通信需要的信號線少,最少只需要2根線(雙絞線),適用于距離較遠的場合。計算機和很多智能設備都有通用的串行通信接口,例如RS232C或RS485接口,工業(yè)控制中一般采用串行通信方式。并行通信雖然可以在一次數(shù)據(jù)傳輸中傳輸8位,但是在數(shù)據(jù)電壓發(fā)送的過程中,容易因線路的因素而使得標準電位發(fā)生變化(最常見的是電壓衰減問題,以及信號間互相串音干擾(Crosstalk)),從而使得傳輸?shù)臄?shù)據(jù)發(fā)生錯誤。如果傳輸線比較長,則電壓衰減效應及串音干擾問題會更加明顯,數(shù)據(jù)的錯誤也會比較容易發(fā)生。相比之下,串行通信一次只傳輸1位,相對而言,處理的數(shù)據(jù)電壓只有一個標準電位,因此不容易把數(shù)據(jù)漏失,再加上一些防范措施,要遺漏就更不容易了,因此可靠性會更高。在系統(tǒng)設計時可根據(jù)不同的需要采用不同的通信方式。8.1.2異步通信與同步通信
在串行通信中,通信的速率與時鐘脈沖有關,接收方和發(fā)送方應使用相同的傳輸速率。接收方和發(fā)送方的標稱傳輸速率雖然相同,但它們之間總是有一些微小的差別,如果不采取措施,在連續(xù)傳送大量的信息時,就會因積累誤差造成發(fā)送和接收的數(shù)據(jù)錯位,使接收方收到錯誤的信息。為了解決這一問題,需要使發(fā)送過程和接收過程同步。按同步方式的不同,串行通信可以分為異步通信和同步通信。異步通信的字符信息格式如圖8-1所示,發(fā)送的字符由1個起始位、7或8個數(shù)據(jù)位、1個奇偶校驗位(可以沒有)和停止位(1位或2位)組成。在通信開始之前,通信雙方需要對采用的信息格式和數(shù)據(jù)的傳輸速率作相同的約定。接收方檢測到停止位和起始位之間的下降沿后,將它作為接收的起始點,在每一位的中點接收信息。由于一個字符中包含的位數(shù)不多,即使發(fā)送方和接收方的收發(fā)頻率略有不同,也不會因為兩臺設備之間的時鐘周期的積累誤差而導致收發(fā)錯位。異步通信的缺點是傳送附加的非有效信息較多,傳輸效率較低,但是隨著通信速率的提高,可以滿足控制系統(tǒng)通信的要求,計算機通信中采用異步通信的情況也較多。圖8-1異步通信的信息格式同步通信以字節(jié)為單位(一個字節(jié)由8位二進制數(shù)組成),每次傳送1或2個同步字符、若干個數(shù)據(jù)字節(jié)和校驗字符。同步字符起聯(lián)絡作用,用它來通知接收方開始接收數(shù)據(jù)。在同步通信中,發(fā)送方和接收方要保持完全的同步,這意味著發(fā)送方和接收方應使用同一時鐘脈沖。在近距離通信時,可以在傳輸線中設置一根時鐘信號線。在遠距離通信時,可以通過調(diào)制解調(diào)方式在數(shù)據(jù)流中提取出同步信號,使接收方得到與發(fā)送方完全相同的接收時鐘信號。由于同步通信方式不需要在每個數(shù)據(jù)字符中加起始位、停止位和奇偶校驗位,只需要在數(shù)據(jù)塊(往往很長)之前加一兩個同步字符,因此傳輸效率高,但正是由于數(shù)據(jù)塊傳遞開始要用同步字符來指示,同時要求由時鐘來實現(xiàn)發(fā)送端與接收端之間的同步,故對硬件的要求較高,一般用于高速通信。8.1.3單工與雙工通信方式
單工通信方式只能沿單一方向傳輸數(shù)據(jù),雙工通信方式的信息可以沿兩個方向傳送,每一個站既可以發(fā)送數(shù)據(jù),也可以接收數(shù)據(jù)。雙工方式又分為全雙工和半雙工兩種方式。
1.全雙工方式
全雙工方式中數(shù)據(jù)的發(fā)送和接收分別使用兩根或兩組不同的數(shù)據(jù)線傳送,通信的雙方都能在同一時刻接收和發(fā)送信息(見圖8-2)。這種傳送方式稱為全雙工方式。圖8-2全雙工方式
2.半雙工方式
半雙工方式用同一組線(例如雙絞線)接收和發(fā)送數(shù)據(jù),通信的某一方在同一時刻只能發(fā)送數(shù)據(jù)或接收數(shù)據(jù)(見圖8-3)。這種傳送方式稱為半雙工方式。圖8-3半雙工方式
3.傳輸速率
在串行通信中,傳輸速率(又稱波特率)的單位是波特,即每秒傳送的二進制位數(shù),其符號為b/s。常用的標準波特率為300~38400b/s等,從300開始成倍數(shù)增加。不同的串行通信網(wǎng)絡的傳輸速率差別極大,有的只有數(shù)百b/s,高速串行通信網(wǎng)絡的傳輸速率可達1Gb/s。
8.2開放系統(tǒng)互連模型
如果沒有一套通用的計算機網(wǎng)絡通信標準,要實現(xiàn)不同廠家生產(chǎn)的智能設備之間的通信,就會付出昂貴的代價。
國際標準化組織ISO提出了開放系統(tǒng)互連模型OSI,作為通信網(wǎng)絡國際標準化的參考模型,它詳細描述了軟件功能的7個層次,如圖8-4所示。圖8-4開放系統(tǒng)互連模型
1.物理層
物理層的下面是物理媒體,如雙絞線、同軸電纜等。物理層為用戶提供建立、保持和斷開物理連接的功能,RS232C、RS422A/RS485等就是物理層標準的例子。
2.數(shù)據(jù)鏈路層
數(shù)據(jù)以幀為單位傳送,每一幀包含一定數(shù)量的數(shù)據(jù)和必要的控制信息,如同步信息、地址信息、差錯控制和流量控制信息。數(shù)據(jù)鏈路層負責在兩個相鄰節(jié)點間的鏈路上,實現(xiàn)差錯控制、數(shù)據(jù)成幀、同步控制等。
3.網(wǎng)絡層
網(wǎng)絡層的主要功能是報文包的分段、報文包阻塞的處理和通信子網(wǎng)中路徑的選擇。
4.傳輸層
傳輸層的信息傳送單位是報文(Message),它的主要功能是流量控制、差錯控制、連接支持,傳輸層向上一層提供一個可靠的端到端(end-to-end)的數(shù)據(jù)傳送服務。
5.會話層
會話層的功能是支持通信管理和實現(xiàn)最終用戶應用進程之間的同步,按正確的順序收發(fā)數(shù)據(jù),進行各種對話。
6.表示層
表示層用于應用層信息內(nèi)容的形式變換,如數(shù)據(jù)加密/解密、信息壓縮/解壓和數(shù)據(jù)兼容,把應用層提供的信息變成能夠共同理解的形式。
7.應用層
應用層作為OSI的最高層,為用戶的應用服務提供信息交換,為應用接口提供操作標準。
8.3串行通信的接口標準
8.3.1RS232C
RS232C通信接口是一種標準化的串行接口。RS232標準最初是由美國電子工程師學會(EIA)于1962年推出的,1969年美國EIC(電子工業(yè)聯(lián)合會)將其改進為RS232C標準,至今仍普遍用于計算機之間和計算機與外設之間的串行通信。
RS232C所需的信號線少,在某些場合,完成雙工通信只需使用幾根線就可完成任務。它有多種可供選擇的信息傳送速率,如50、75、110、150、300、600、1200、2400、4800、9600和19200波特的標準傳輸率。RS232C標準定義了數(shù)據(jù)終端設備(DTE)與數(shù)據(jù)通信設備(DCE)之間的物理接口,標準規(guī)定了通信的雙方采用D型9芯或25芯連接器。標準連接器的兩個D型插頭之間用圓電纜或扁平電纜互相連接。RS232C用的D型25芯插頭(Male)和插座(Female)的引腳排列如圖8-5所示。圖8-5RS232C用的D型25芯插頭和插座的引腳排列
RS232C的數(shù)據(jù)線是單向的,因此有兩根數(shù)據(jù)線:發(fā)送數(shù)據(jù)線TxD(引腳2)以及接收數(shù)據(jù)線RxD(引腳3)。它們通過信號地(引腳7)構(gòu)成回路。副發(fā)送數(shù)據(jù)(引腳14)和副接收數(shù)據(jù)(引腳16)的功能相同。
這里必須注意參與通信的設備的屬性。RS232C對參與通信的設備屬性加以定義,一個稱為數(shù)據(jù)終端設備(DTE),另一個稱為數(shù)據(jù)通信設備(DCE)。這樣定義的目的是為了規(guī)定信號的流向,無論是從數(shù)據(jù)終端設備(DTE)一側(cè)來看,還是從數(shù)據(jù)通信設備(DCE)一側(cè)來看,都是一致的。這樣就保證了在使用RS232C電纜以同名引腳連接終端設備與通信設備時,全部信號都暢通無阻。通常,計算機或終端設備的RS232C接口都是按DTE方式連接的,而調(diào)制解調(diào)器(Modem)是按DCE方式配置的。
這里必須注意DTE設備與DCE設備的區(qū)別。因為絕大部分的計算機與終端都是采用DTE方式連接其RS232C接口的,所以常會在使用一條同名腳相連的電纜去連接計算機和終端時不能工作。如圖8-6所示的交叉連接方法是兩臺DTE設備利用RS232C接口互相連接的最常用方法。圖中,發(fā)送數(shù)據(jù)(TxD)與接收數(shù)據(jù)(RxD)是交叉連接的,使得兩臺設備都能正確地發(fā)送和接收。數(shù)據(jù)終端就緒(DTR)與數(shù)據(jù)設備就緒(DSR)兩根線也是交叉的,使得雙方設備都能檢測出對方是否已經(jīng)準備好。圖8-6兩臺DTE設備用RS232C互連的最常用方法另一種更完整的連接圖如圖8-7所示。這里,兩臺設備都是DTE設備,它們的請求發(fā)送端(RTS)與各自的清除發(fā)送端(CTS)相連。這樣,當設備向?qū)Ψ秸埱蟀l(fā)送時,同時通知自己的清除發(fā)送端,表示對方已響應。圖8-7兩臺DTE設備用RS232C的完整連接當兩臺設備距離較近時,往往可采用最簡單的三線制方式通信。此時,只將兩臺DTE的發(fā)送數(shù)據(jù)(TxD)和接收數(shù)據(jù)(RxD)交叉連接,各自的信號地也相互連接,而其余的信號線都不連接,如圖8-8所示。圖8-8兩臺DTE設備用RS232C的三線制方式通信有時候,在計算機的通信程序中,可能會檢測一些通信狀態(tài)線,如RTS、CTS等,這時,圖8-8的連接方式就會使通信進行不下去。對于這種情況,可用改進的最簡方式連接兩臺DTE,如圖8-9所示,即將自身的一些信號進行短接,自我應答,以使通信程序得以運行。圖8-9兩臺DTE設備用RS232C的改進式三線通信
RS232C標準采用負邏輯,以+5~+15V的電平表示邏輯“0”,以-5~-15V的電平表示邏輯“1”,信號幅值很大,與計算機和檢測系統(tǒng)中最常用的TTL電平不兼容。因為TTL電平采用正邏輯,以0~+5V的電平表示邏輯“1”,以0~-5V的電平表示邏輯“0”。所以需要在計算機檢測系統(tǒng)的串行接口與RS232C接口之間加裝一個電平轉(zhuǎn)換器,使得RS232C標準的-15V“邏輯1”信號轉(zhuǎn)變成TTL電平的+5V“邏輯1”信號,將+15V“邏輯0”信號轉(zhuǎn)變成TTL電平的0V“邏輯0”信號。
RS232C的最大通信距離為15m,最高傳輸速率為20Kb/s,只能進行一對一的通信。由于RS232C使用單端驅(qū)動、單端接收的電路(見圖8-10),因此容易受到共地線上的電位差和外部引入的干擾信號的影響。圖8-10單端驅(qū)動單端接收8.3.2RS422A
美國的EIC于1977年制定了串行通信標準RS499,對RS232C的電氣特性作了改進,RS422A是RS499的子集。RS422A采用平衡驅(qū)動、差分接收電路(見圖8-11),從根本上取消了信號地線。平衡驅(qū)動器相當于兩個單端驅(qū)動器,其輸入信號相同,兩個輸出信號互為反相信號,圖中的小圓圈表示反相。外部輸入的干擾信號是以共模方式出現(xiàn)的,兩根傳輸線上的共模干擾信號相同,因接收器是差分輸入,共模信號可以互相抵消。只要接收器有足夠的抗共模干擾能力,就能從干擾信號中識別出驅(qū)動器輸出的有用信號,從而克服外部干擾的影響。圖8-11平衡驅(qū)動差分接收
RS422A在最大傳輸速率(10Mb/s)時,允許的最大通信距離為12m。傳輸速率為100Kb/s時,最大通信距離為1200m。一臺驅(qū)動器可以連接10臺接收器。8.3.3RS485
RS232C接口通常只用于點對點通信的系統(tǒng)中,若系統(tǒng)中需要相互通信的節(jié)點數(shù)超過兩個時,則不能直接滿足要求,為此EIA制定了新的接口標準RS485,它能支持一點對多點的通信。
RS485的電氣標準為RS422標準。RS485是RS422A的變形。RS422A是全雙工,兩對平衡差分信號線分別用于發(fā)送和接收。RS485為半雙工,只有一對平衡差分信號線,不能同時發(fā)送和接收。
使用RS485通信接口和雙絞線可組成串行通信網(wǎng)絡(見圖8-12),構(gòu)成分布式系統(tǒng),系統(tǒng)中最多可有32個站。如果在一個網(wǎng)中連接的設備數(shù)超過32個,則可使用RS485中繼器。新的接口器件已允許連接128個站。圖8-12RS485網(wǎng)絡
RS485通信接口的信號傳輸是用兩根線之間的電壓差來表示邏輯1和0的,因為發(fā)送端需兩根傳送線,而接收端也需要兩根傳送線,這樣,RS485接收與發(fā)送端僅需兩根線就完成了信號的傳輸。由于傳輸線采用了差動信道,因此它的干擾抑制性極好;又由于它的阻抗低,無接地問題,故傳輸距離可多達1200m,傳輸速率可達1Mb/s。
8.4串行通信的軟件實現(xiàn)技術
8.4.1網(wǎng)絡集成
在設備檢修數(shù)據(jù)采集處理系統(tǒng)中,我們采用串行通信網(wǎng)絡結(jié)構(gòu)。在設計用485總線實現(xiàn)分布式控制網(wǎng)絡中,分布式控制網(wǎng)絡的主站(上位機)在控制網(wǎng)絡中可以視為一個主機,它與從站之間通過485總線的通信協(xié)議進行數(shù)據(jù)傳輸。在與信息網(wǎng)絡的集成中,可以將主站(上位機)作為信息網(wǎng)絡的一個工作站。將工作站通過二級客戶機/服務器(C/S)結(jié)構(gòu)模式與主服務器連接,并使用ODBC向主服務器的數(shù)據(jù)庫傳輸數(shù)據(jù),從而實現(xiàn)數(shù)據(jù)的網(wǎng)絡共享。這樣一來,控制網(wǎng)絡的上位機就成為企業(yè)網(wǎng)絡的一個工作站。網(wǎng)絡集成結(jié)構(gòu)示意圖如圖8-13所示。圖8-13信息網(wǎng)絡和控制網(wǎng)絡集成結(jié)構(gòu)示意圖從圖中可知,控制網(wǎng)絡的主站(客戶機)實質(zhì)上是作為信息網(wǎng)絡和控制網(wǎng)絡的結(jié)合部分,它不僅向上作為信息網(wǎng)絡的工作站,而且向下作為控制網(wǎng)絡的主機,控制網(wǎng)絡的網(wǎng)絡層協(xié)議要根據(jù)這樣的實際結(jié)構(gòu)進行設計。從這樣的網(wǎng)絡集成的結(jié)構(gòu)出發(fā),通過編寫的網(wǎng)絡通信程序(包括信息網(wǎng)絡的通信程序和控制網(wǎng)絡的485總線網(wǎng)絡通信程序),使工作站能夠?qū)⒃O備傳送的采集數(shù)據(jù)上傳到網(wǎng)絡主服務器上,實現(xiàn)數(shù)據(jù)網(wǎng)絡共享,同時也實現(xiàn)了網(wǎng)絡的集成。在這里,主要討論控制網(wǎng)絡的485總線網(wǎng)絡通信程序。8.4.2控制網(wǎng)絡的通信原理
電機車間的數(shù)據(jù)采集部分是由RS485通信子系統(tǒng)構(gòu)成的控制網(wǎng)絡,如圖8-14所示。RS485是一點對多點的通信接口,通信電纜一般為雙絞線。由于普通的PC機一般不帶RS485接口,因此必須使用RS232C/RS485轉(zhuǎn)換器。單片機通過RS232C/RS485轉(zhuǎn)換器連接到RS485通信線上。在RS485通信方式中,系統(tǒng)中各個節(jié)點(包括上位機)的識別是通過設置不同的站地址,從而實現(xiàn)通信中的尋址。由圖8-14可見,對5臺設備分別用與之相對應的單片機的編號進行1~5的編號,在程序中,需尋呼某設備時,是通過尋呼它的站號(本系統(tǒng)中站號分別為1、2、3、4、5)來實現(xiàn)的。在圖8-14所示的通信系統(tǒng)中,單片機主要完成現(xiàn)場設備信號的采集和控制,上位機主要負責發(fā)出控制信號和接收采集數(shù)據(jù),并對數(shù)據(jù)進行處理。上位機與單片機以及各個設備之間的信息交換都必須預先協(xié)商好通信規(guī)則,也就是一定的協(xié)議。在這個統(tǒng)一的標準上,通過通信握手和數(shù)據(jù)幀的交互傳輸實現(xiàn)數(shù)據(jù)的通信傳輸技術。圖8-14RS485通信硬件連接在這個系統(tǒng)的網(wǎng)絡集成中,信息網(wǎng)絡是不需要用戶制定通信協(xié)議的,因為工業(yè)以太網(wǎng)的通信協(xié)議已經(jīng)形成了國際標準,用戶只需要遵循這個標準的規(guī)定編寫通信程序?qū)崿F(xiàn)數(shù)據(jù)的遠程傳輸即可。而用485總線實現(xiàn)的控制網(wǎng)絡中,則需要用戶自定義具體的通信協(xié)議內(nèi)容,才能實現(xiàn)通信的順利進行。有了這個數(shù)據(jù)收發(fā)雙方統(tǒng)一的協(xié)議,在信息字段的處理上也就能有一個統(tǒng)一標準,這一點對程序接收或發(fā)送的數(shù)據(jù)段有很重要的意義。這個系統(tǒng)中,監(jiān)控機和設備之間采用異步串行通信方式。
在實際的工程中,協(xié)議的制定跟具體項目的要求有關,下面就是根據(jù)電機車間的要求而制定的一個協(xié)議,內(nèi)容如下。
電機車間監(jiān)控機向?qū)O備發(fā)出的查詢呼號格式為:
FEH,EFH(這兩個字節(jié)為開始符),XXH(對應站號,十六進制數(shù)),F(xiàn)FH(結(jié)束符)
監(jiān)控機所管轄的各設備裝置都會接收到車間監(jiān)控機發(fā)出的這個查詢呼號,但站號不同的裝置不理睬,只有所要求站號相同的設備裝置才會發(fā)出下述響應:
FEH,EFH,XXH(對應站號,十六進制數(shù)),XXH(0表示本設備無上網(wǎng)數(shù)據(jù)可發(fā)送;1表示馬上要發(fā)送數(shù)據(jù),請監(jiān)控機轉(zhuǎn)入接收狀態(tài)),F(xiàn)FH(結(jié)束符)設備裝置向監(jiān)控機發(fā)出的數(shù)據(jù)幀格式如下:
FEH,EFH,XXH(對應站號,十六進制數(shù)),數(shù)據(jù)組(各設備工作性質(zhì)不同,工作時間長短也不同,所發(fā)送的字節(jié)數(shù)也不相同),XXH(數(shù)據(jù)組的累加和),F(xiàn)FH(結(jié)束符)
監(jiān)控機接收到對應設備發(fā)來的數(shù)據(jù)后,應立即校驗站號和累加和,并向該設備發(fā)出響應:
FEH,EFH,XXH(對應站號,十六進制數(shù)),XXH(0表示通信正確;1表示通信出錯),F(xiàn)FH(結(jié)束符)下面以烘干爐為例,說明采集數(shù)據(jù)記錄規(guī)則和上網(wǎng)數(shù)據(jù)格式。
1個工件進行烘干作業(yè)的數(shù)據(jù)組格式如下:
XXH,XXH,XXH,XXH(操作員工號,ASCII碼)
XXH,XXH,XXH,XXH,XXH,XXH,XXH,XXH,XXH,XXH,XXH,XXH,XXH,XXH,XXH,XXH
(工件編號,ASCII碼,最多16個字符,不足16個字符的在后面補空位NUL,即ASCII碼00H)
XXH,XXH,XXH,XXH,XXH,XXH
(開始烘干日期時間,二進制6字節(jié),年月日時分秒)
XXH,XXH,XXH,XXH,XXH,XXH
(結(jié)束烘干日期時間,二進制6字節(jié),年月日時分秒)
XXH,XXH,XXH,XXH,XXH,XXH
(資料上網(wǎng)發(fā)送時間,二進制6字節(jié),年月日時分秒)
SSH,F(xiàn)FH,MMH,WDGH,WDDH,…
(烘干過程中采集資料組(時間/溫度資料))每一組資料中:時間是時,分,秒(二進制3字節(jié));溫度是高位,低位(二進制2字節(jié)),單位是度,每溫度變化10℃記錄一次。
其他設備的記錄規(guī)則和上網(wǎng)數(shù)據(jù)格式基本相同,這里不再贅述。
在設計好網(wǎng)絡結(jié)構(gòu)和通信協(xié)議的基礎上,就可以進行軟件編程了。首先,通過分析可以得到通信程序流程圖,如圖8-15所示。
在下面的內(nèi)容中,將以VisualBasic語言為例說明上位機的高級語言如何與下位機的匯編語言相結(jié)合實現(xiàn),模擬實現(xiàn)數(shù)據(jù)的發(fā)送和接收。圖8-15監(jiān)控機與設備通信程序流程圖8.4.3VisualBasic的通信控件
1.MSComm控件的工作原理
由于在VisualBasic中要實現(xiàn)數(shù)據(jù)的收發(fā),需借助于一種特殊功能的控件——MSComm控件,所以在本節(jié)中先介紹MSComm通信控件。
在Windows環(huán)境下,操作系統(tǒng)通過驅(qū)動程序控制各硬件資源,不允許用戶像在DOS環(huán)境下那樣直接對串口進行底層的操作。為此,VisualBasic提供了一個串行通信控件MicrosoftCommControl,簡稱MSComm控件。用戶只需設置和監(jiān)視MSComm控件的屬性和事件,就可以輕而易舉地實現(xiàn)串行通信。
MSComm控件通過串行端口傳輸和接收數(shù)據(jù),為應用程序提供串行通信功能。每個使用的MSComm控件對應著一個串行端口。如果應用程序需要訪問多個串行端口,就必須使用多個MSComm控件??梢栽赪indows控制面板中改變端口地址和中斷地址。MSComm控件有許多重要的屬性,表8-1列出了常用的幾個屬性。表8-1MSComm控件的幾個重要屬性續(xù)表
MSComm控件提供了兩種處理接收信息的方式:
事件驅(qū)動方式:RThreshold屬性非0時,收到字符或傳輸線發(fā)生變化時就會產(chǎn)生串口事件OnComm。通過查詢CommEvent屬性可以捕獲并處理這些通信事件。
查詢方式:通過查詢InBufferCount(接收緩沖區(qū)的字節(jié)數(shù))屬性值,處理接收到的信息。
2.MScomm控件的設置
VisualBasic的內(nèi)置控件會默認出現(xiàn)在工具箱中,它提供了一些基本的系統(tǒng)設計控件。而像用來設計通信功能的MScomm控件,這一類具有比較特別功能的控件就不會出現(xiàn)在其中,當我們需要MScomm控件并讓它出現(xiàn)在工具箱中時,可進行如下操作:
(1)選擇菜單“工程”→“部件”,打開“部件”對話框,如圖8-16所示。圖8-16“部件”對話框
(2)在“部件”對話框中選中“MicrosoftCommControl6.0”復選框選項。
(3)單擊“應用”或“確定”按鈕,即可在工具箱中見到“電話盒(MSComm控件)”的圖標,如圖8-17所示,我們就可以將MSComm控件加載,進行串行通信了。圖8-17MSComm控件的加載若在圖8-16所示的界面中沒有“MicrosoftCommControl6.0”復選框選項,則可在“部件”對話框中單擊“瀏覽”按鈕,打開如圖8-18所示的“添加ActiveX控件”對話框,并在Windows\System(若是Windows98操作系統(tǒng))或WINT\System32(若是Windows2000操作系統(tǒng))目錄下選擇MSCOMM32.OCX選項,然后點擊“打開”按鈕,便可在“部件”對話框中看到MicrosoftCommControl6.0的復選框。
如果打開的是以前的工程,工程中就含有MSComm控件的引用記錄,則工程會自動搜索MSComm控件,并將它加載,不需要進行以上的步驟。圖8-18“添加ActiveX控件”對話框界面
3.通信步驟
通??梢酝ㄟ^下面的步驟來使用VisualBasic中的MSComm控件進行通信控制。
(1)在工作區(qū)窗體上聲明MSComm通信控件的實例,也就是電話盒。使用默認名稱MSComm1,如圖8-19所示。圖8-19聲明MSComm通信控件的實例
(2)設置通信端口號碼,即CommPort屬性。可在圖8-20所示的“屬性-MSComm1”屬性設置界面中找到“CommPort”屬性項,設置通信連接端口號碼。程序必須制定所要使用的串行端口號,Windows系統(tǒng)會使用所設置的通信端口與外界進行通信。程序也可借助此屬性返回所使用的連接端口號碼。在此設置的通信端口號由1開始往上遞增,CommPort屬性所允許的最大值是16,當使用的通信端口號碼超過16時,此控件會彈出錯誤提示窗口,如圖8-21所示。圖8-20“CommPort”屬性項設置界面圖8-21“CommPort”屬性值超限錯誤提示窗口雖然Windows操作系統(tǒng)可以容納最多256個串行端口,但VisualBasic的MSComm控件僅限于16個端口。盡管如此,要一次用到超過16個的RS232通信端口也不那么容易。若有必要使用超過16個通信端口時,就要采用其他的方式來控制通信端口,例如PcommPro軟件。
(3)設置通信協(xié)議,即Handshaking屬性。該屬性用于指定通信雙方的握手協(xié)議。只有在緩沖區(qū)沒有超速的情況下,才能保證數(shù)據(jù)不被遺失。而緩沖區(qū)超速是指數(shù)據(jù)到達連接口的速度太快,以致于通信裝置來不及將數(shù)據(jù)轉(zhuǎn)移到接收緩沖區(qū)。
握手協(xié)議所要進行的是數(shù)據(jù)傳輸速度的控制,因此也被稱為“流量控制(FlowControl)”。簡單地說,當雙方傳輸數(shù)據(jù)時,如果一方送出數(shù)據(jù)的速度快于另一方所能處理的速度,接收的一方便要求發(fā)送的一方暫停送出數(shù)據(jù),待接收的一方處理完數(shù)據(jù)之后,再通知發(fā)送方繼續(xù)發(fā)送未傳完的數(shù)據(jù)。設置ComNone值為0(默認值),沒有握手協(xié)議;
設置ComXOnXOff值為1,(XON/XOFF)握手協(xié)議;
設置ComRTS值為2,RTS/CTS(RequestToSent/CleatToSend)握手協(xié)議;
設置ComRTSXOnXOff值為3,RequestToSend和XON/XOFF握手協(xié)議。
(4)設置傳輸速度等參數(shù),即Settings屬性。
(5)設置其他參數(shù)。必要時再加上其他的屬性設置。
(6)打開通信端口,即PortOpen屬性設成True。
(7)送出字符串或讀入字符串。使用Input及Output屬性。
(8)使用完MSComm通信控件后,將通信端口關閉,即PortOpen屬性設成False。按以上的步驟,就可以創(chuàng)建自己的串行通信傳輸系統(tǒng)。從實例中了解如何使用此控件是最快也是最好的一種方法。不僅VisualBasic的步驟如此,使用其他的串行通信工具也是同樣的步驟。
步驟(5)以前的設置可以在設計環(huán)境中的屬性窗口中進行,也可以在程序中以程序的語法進行設置;而步驟(6)以后的設置及使用則只能在程序中以VisualBasic的相關語法進行。8.4.4檢測裝置數(shù)據(jù)發(fā)送模擬
下面繼續(xù)對圖8-14所示的電機車間數(shù)據(jù)采集子系統(tǒng)中的下位單片機向上位監(jiān)控機發(fā)送數(shù)據(jù)進行程序代碼分析。
單片機從設備上采集了數(shù)據(jù),就做好了數(shù)據(jù)傳送的準備。根據(jù)前面制定的通信協(xié)議,每個設備都從總線上接收到監(jiān)控機發(fā)出的數(shù)據(jù)幀,并做分析。根據(jù)協(xié)議規(guī)定,設備可以根據(jù)這個數(shù)據(jù)幀各段的意義來判斷監(jiān)控機是否需要自己向總線發(fā)送信息。也就是說,每個設備都從總線上接收數(shù)據(jù)幀加以判斷,如果判斷數(shù)據(jù)幀中的設備編號正好表示自己,就做數(shù)據(jù)發(fā)送的準備,否則就忽略。因為在上位機軟件調(diào)試的過程之初,不方便直接收集硬件設備送來的信息,所以我們可以用軟件程序來模擬這個過程,比如用一個文本文件來模仿設備,文本文件中所記錄的信息模擬從設備采集來的數(shù)據(jù),表8-2中的5個文本文件分別存在c:\data文件夾下以不同的名稱來命名。表中所有的數(shù)據(jù)都是按照前面所描述的通信協(xié)議排列的。這種用軟件文本文件或數(shù)據(jù)庫文件模擬硬件設備傳來的數(shù)據(jù)的方法,可以方便和簡化程序的調(diào)試,也不會因為軟、硬件設計進程不同步,硬件設施不到位等客觀因素而影響軟件的模塊測試。這是我們在測控軟件設計中經(jīng)常使用的方法。表8-2模擬設備發(fā)送數(shù)據(jù)文本內(nèi)容數(shù)據(jù)發(fā)送工作是否需要執(zhí)行直接受到數(shù)據(jù)接收終端也就是監(jiān)控機的影響。當我們選中發(fā)送設備并點擊“發(fā)送數(shù)據(jù)”按鈕時,發(fā)送過程還要等待接收過程的巡檢信號,才可以發(fā)送數(shù)據(jù)段。若數(shù)據(jù)接收終端沒有準備好,某設備就將它的工作數(shù)據(jù)送上總線,則會造成數(shù)據(jù)丟失,數(shù)據(jù)通信失敗。具體的程序運行過程流程圖如圖8-22所示。圖8-22發(fā)送過程流程圖首先設計一個數(shù)據(jù)發(fā)送的操作窗口界面,如圖8-23所示。用到的部分資源列于表8-3中。其中,列表框中輸入5臺等待發(fā)送數(shù)據(jù)的設備名稱,當前需要哪臺設備發(fā)送數(shù)據(jù)就選中它。標簽Label1的Caption屬性為空,用來顯示當前數(shù)據(jù)通信的狀態(tài)提示信息。命令按鈕“發(fā)送數(shù)據(jù)”用來實現(xiàn)將列表框中選中設備的工作數(shù)據(jù)送上總線。圖8-23發(fā)送數(shù)據(jù)界面設計表8-3數(shù)據(jù)發(fā)送界面部分資源列表下面就可以用VisualBasic編程實現(xiàn)發(fā)送模擬了。
在窗體加載時,要做的就是對通信控件的一些初始化工作。初始化工作包括端口的選擇(在這里選擇的是通信端口2)、緩沖區(qū)的清零、握手協(xié)議的設置(在這里沒有使用握手協(xié)議)以及輸入數(shù)據(jù)的格式等。除了初始化,還要將端口打開,最后還要將表示站號的變量初始化為零。具體代碼如下:PrivateSubForm_Load()
MSComm1.CommPort=2
MSComm1.Settings="9600,n,8,1"
MSComm1.InputLen=0
MSComm1.Handshaking=comNone
MSComm1.InputMode=comInputModeBinary
MSComm1.RTSEnable=True
MSComm1.DTREnable=True
MSComm1.InBufferSize=1024*8
IfMSComm1.PortOpen=FalseThen
MSComm1.PortOpen=True
EndIf
zhanhao=0
flag=False
EndSub根據(jù)流程圖,下面對命令按鈕編程。命令按鈕是對選中的設備發(fā)出發(fā)送命令。這個發(fā)送命令只需發(fā)送設備的站號并將發(fā)送標志設置為“True”即可。程序段如下:PrivateSubCommand1_Click()
SelectCaseList1.Text
Case"烘干爐"
zhanhao=1
Case"浸漆罐"
zhanhao=2
Case"耐壓機"
zhanhao=3
Case"劈相機"
zhanhao=4
Case"壓力機"
zhanhao=5
EndSelect
EndSub整個發(fā)送過程的觸發(fā)是由接收數(shù)據(jù)的監(jiān)控機進行控制的,當我們選中了一個設備并準備讓它發(fā)送數(shù)據(jù)時,只有在監(jiān)控機發(fā)出詢問信號并被響應之后,這些數(shù)據(jù)才可以發(fā)送出來。所以,發(fā)送數(shù)據(jù)的過程是由接收程序觸發(fā)的(接收程序?qū)⒃谙乱还?jié)討論)。接收程序?qū)⑿盘査腿攵丝?,發(fā)送端的通信控件接收到信號,觸發(fā)發(fā)送端MSComm1控件的OnComm事件,發(fā)送程序才得以執(zhí)行。具體實現(xiàn)程序如下:PrivateSubMSComm1_OnComm()
DimlengthAsInteger
DiminputbufferAsVariant'用于接收數(shù)據(jù)的緩沖區(qū)
DimiAsLong
Ifflag=TrueThen
SelectCaseMSComm1.CommEvent
CasecomEvReceive
length=0
length=MSComm1.InBufferCount
inputbuffer=MSComm1.Input
MSComm1.InBufferCount=0
Iflength=6Then
Ifinputbuffer(0)=&HFEAndinputbuffer(1)=&HEFAndinputbuffer(3)=&HEEAndinputbuffer(4)=&HFFThen
shebeihao=inputbuffer(2)
Ifzhanhao=shebeihaoThen
Callfile_path
Calldata_handle
EndIf
Else
Label1.Caption="握手失敗"
ExitSub
EndIf
Else
ExitSub
EndIf
EndSelect
EndIf
EndSub程序中有這樣一條語句:
Ifinputbuffer(0)=&HFEAndinputbuffer(1)=&HEFAndinputbuffer(3)=&HEEAndinputbuffer(4)=&HFFThen
這個語句實際上是根據(jù)通信協(xié)議判斷查詢呼號的格式是否正確,如果正確則將站號對應到相應的設備號,再調(diào)用兩個函數(shù)file_path(尋找文本文件)和data_handle(進行數(shù)據(jù)處理并放入輸出緩沖區(qū)發(fā)送),將數(shù)據(jù)發(fā)送出去。
函數(shù)file_path是通過設備號找到相應的文本文件,只需要一個簡單的選擇語句就可實現(xiàn)設備號與相應模擬數(shù)據(jù)文本文件的匹配。程序段如下:PrivateSubfile_path()
SelectCaseshebeihao
Case1
txtname="c:\data\hongganlu.txt"
Case2
txtname="c:\data\jinqiguan.txt"
Case3
txtname="c:\data\naiyaji.txt"
Case4
txtname="c:\data\pixiangji.txt"
Case5
txtname="c:\data\yaliji.txt"
EndSelect
EndSub函數(shù)data_handle是本程序中相對來說較為復雜的部分,因為它要對數(shù)據(jù)進行處理并發(fā)送,在發(fā)送過程中有可能出現(xiàn)發(fā)送錯誤或失誤,這些都要進行相應的錯誤處理。
在這個程序中,數(shù)據(jù)處理都是根據(jù)文本文件中數(shù)據(jù)格式和協(xié)議定義的,所以不同的工程中,數(shù)據(jù)處理的算法是不同的,相應的協(xié)議以及程序當中發(fā)送數(shù)據(jù)的算法也可以做相應的調(diào)整。這里不作具體的數(shù)據(jù)處理描述。
對于本程序,要強調(diào)的是,當選中了一種設備后一定要等待發(fā)送方傳送過來信號,只有當這個信號的第三個字節(jié)(協(xié)議中規(guī)定好的)與設備站號匹配了之后才可以傳送信息。8.4.5監(jiān)控計算機數(shù)據(jù)的接收
在上一節(jié)中,我們用文本文件模擬設備,并用VisualBasic編程向總線發(fā)送了這些數(shù)據(jù),下面要解決的就是監(jiān)控機數(shù)據(jù)接收的問題。在這個過程當中,監(jiān)控機采用RS485串行通信,通過RS232C/RS485的轉(zhuǎn)換接收到一個字符串信息,監(jiān)控機首先對這個字符串進行分析處理,再將處理好的信息放入緩沖數(shù)據(jù)表準備數(shù)據(jù)上網(wǎng)。信息存入數(shù)據(jù)表的過程在前幾章有過介紹,這里我們只對數(shù)據(jù)的接收及分析做編程處理。
接收過程是與發(fā)送過程緊密結(jié)合起來的。接收過程首先發(fā)出巡檢信號,如果發(fā)送過程對其有應答,就會將響應數(shù)據(jù)發(fā)送過來,接收過程經(jīng)過分析和處理就可以觸發(fā)發(fā)送過程的執(zhí)行了。接收過程的流程圖如圖8-24所示。圖8-24數(shù)據(jù)接收過程流程圖在開始進行數(shù)據(jù)采集環(huán)節(jié)時,還有多種情況,比如無數(shù)據(jù)傳送、傳送握手失敗或者經(jīng)過校驗數(shù)據(jù)傳送失誤。這些情況都要考慮進程序的運行當中。當無數(shù)據(jù)傳送時,要在界面上顯示“線路暢通但無數(shù)據(jù)傳送”;當握手失敗時,要顯示“握手失敗”;當數(shù)據(jù)經(jīng)過校驗發(fā)現(xiàn)錯誤時,要顯示“數(shù)據(jù)錯誤”。只有當數(shù)據(jù)無誤地傳送過來時,才可進入下一個環(huán)節(jié)——數(shù)據(jù)處理。在數(shù)據(jù)處理環(huán)節(jié),只需將數(shù)據(jù)進行分類,再送入相應的子程序中進行處理。因為不同的設備傳送過來的數(shù)據(jù)信息格式也有所不同,相應的處理方式也就存在差異。這里的數(shù)據(jù)處理主要是將傳送過來的二進制數(shù)還原成字符或數(shù)字,便于放入表中。當數(shù)據(jù)處理完成后,就可以將數(shù)據(jù)放入數(shù)據(jù)庫中了。在放入數(shù)據(jù)庫中時必須選擇好對應的數(shù)據(jù)表,這里的處理方式也是調(diào)用一個子程序來完成。
首先是要設計界面,如圖8-25所示。在這個界面中,其中有5個標簽控件聲明成一個控件數(shù)據(jù)Label1(i),i從0到4,分別用以顯示5個設備當前的通信狀態(tài)。MSComm控件是用來通信的。時鐘控件是用來控制巡檢的時間間隔的。界面設計中用到的部分資源在表8-4中給予說明。圖8-25接收數(shù)據(jù)界面設計表8-4數(shù)據(jù)接收界面部分資源列表下面用VisualBasic編程實現(xiàn)數(shù)據(jù)的接收。
在窗體加載時,需要對MSComm1控件進行初始化,主要內(nèi)容與發(fā)送程序的初始化內(nèi)容基本相同,只是在這里所選中的端口是串行端口1并打開該端口;然后對時鐘控件初始化,規(guī)定它每隔1500ms觸發(fā)一次,實現(xiàn)對設備的輪巡;最后初始化Lable1(0)~Lable1(4),做好界面上顯示提示信息的初始準備,將其Caption值都設置為“線路中斷或設備未開通”。具體代碼如下:PrivateSubForm_Load()
DimiAsInteger
MSComm1.CommPort=1
MSComm1.Settings="9600,n,8,1"
MSComm1.InputLen=0
MSComm1.Handshaking=comNone
MSComm1.InputMode=comInputModeBinary
MSComm1.RTSEnable=True
MSComm1.DTREnable=True
MSComm1.InBufferSize=1024*8
IfMSComm1.PortOpen=FalseThen
MSComm1.PortOpen=True
EndIf
Timer1.Interval=1500
Timer1.Enabled=True
Fori=0To4
Label1(i).Caption="線路中斷或設備未開通"
Nexti
EndSub窗體加載之后,程序就要自動地每隔一個固定的時間輪流巡檢各設備。這個功能由定時器來完成。這里設置定時器Timer的定時時間是1500ms,只要定時時間到,系統(tǒng)就自動觸發(fā)Timer1的Timer事件,即在程序規(guī)定的時間范圍內(nèi),發(fā)送端傳來了數(shù)據(jù)以及設備號,可以進行數(shù)據(jù)采集工作。所以需要對Timer事件編程,實現(xiàn)對設備的巡檢。代碼如下:PrivateSubTimer1_Timer()'實現(xiàn)對各設備的巡檢
DimiAsInteger
Fori=1To5
Callcaijishuju
Nexti
Timer1.Enable=Ture
EndSub可以看出在程序中調(diào)用了采集數(shù)據(jù)子程序caijishuju,也可以說這個子程序是整個程序的核心。程序代碼如下:PrivateSubcaijishuju()
Dimchaxunyingda()AsByte '通信時的查詢應答信號
DimdurationAsVariant '通信中的延遲時間
DimshebeibytAsByte '設備號的字節(jié)表示
DimlengthAsInteger
Dimi%,j%,k%,jiaoyanhe&
DimnAsInteger
DimresendAsIntegerDimchaduAsInteger
DiminputbufferAsVariant ‘用于接收數(shù)據(jù)的緩沖區(qū)
DimoutputbufferAsVariant ’用于發(fā)送數(shù)據(jù)的緩沖區(qū)
DimzijieshuAsInteger ‘用于計算將要接收的數(shù)
據(jù)大小(包括協(xié)議字節(jié)數(shù))
Dimjieshoushuju()AsByte ’用于接收真正的數(shù)據(jù)
shebeibyt=“&h”+Hex(shebeihao)
‘將設備號用字節(jié)的形式表示
MSComm1.InBufferCount=0
'對輸入/輸出緩沖區(qū)進行清零
MSComm1.OutBufferCount=0XJ:
ReDimchaxunyingda(5)AsByte'定義巡檢數(shù)據(jù)段
chaxunyingda(0)=&HFE
chaxunyingda(1)=&HEF
chaxunyingda(2)="&h"+Hex(shebeihao)
chaxunyingda(3)=&HEE
chaxunyingda(4)=&HFF
outputbuffer=chaxunyingda
MSComm1.Output=outputbuffer
‘將巡檢數(shù)據(jù)段發(fā)送出去
YC:
duration=Timer+0.11’設定延遲時間
Do
'循環(huán)檢測并判斷輸入數(shù)據(jù)
length=MSComm1.InBufferCount
If(length=MSComm1.InBufferCount)And(length>=7)Then
GoToX1
EndIf
LoopUntilTimer>duration
Label1(shebeihao-1).Caption=
"線路故障或設備未開通!"
ExitSub
X1: '處理各種傳輸情況的子程序段
inputbuffer=MSComm1.Input
MSComm1.InBufferCount=0Ifinputbuffer(0)=&HFEAndinputbuffer(1)=&HEFAndinputbuffer(6)=&HFFThen
'握手成功
Ifinputbuffer(2)=shebeibytThen '站號
Ifinputbuffer(3)=&H0Then
Label7(shebeihao-1).Caption="通信正常,沒有數(shù)據(jù)傳送!"
ExitSub
ElseIfinputbuffer(3)=&H1Then
i=inputbuffer(4)
j=inputbuffer(5)
zijieshu=i*256+j+5 ‘計算字節(jié)數(shù)
resend=0 ’計數(shù)重發(fā)次數(shù)
Label7(shebeihao-1).Caption=“系統(tǒng)開始通信!”
GoTotongxin
'設備+CStr(shebeihao)+進入數(shù)據(jù)傳送階段
EndIf
Else
ExitSub
EndIf
Else'握手失敗
Label1(shebeihao-1).Caption="握手失敗"
ExitSub
EndIf
tongxin: '進入正常通信模式下的通信子程序段
ReDimjieshoushuju(zijieshu-3)AsByte
Do
length=MSComm1.InBufferCount
If(length=MSComm1.InBufferCount)And(length>=zijieshu)Then
inputbuffer=MSComm1.Input
MSComm1.InBufferCount=0
GoToX2
EndIf
LoopX2:
j=zijieshu
k=0
Ifinputbuffer(0)=&HFEAndinputbuffer(1)=&HEFAndinputbuffer(j-1)=&HFFThen
Ifinputbuffer(2)=shebeibytThen'站號
Fori=3Toj-1
Ifi<>j-1Then
jieshoushuju(i-3)=inputbuffer(i)
k=k+1
Else
Label1(shebeihao-1).Caption=
"系統(tǒng)開始通信校驗!"
GoTojiaoyan'轉(zhuǎn)入校驗程序
EndIf
Nexti
EndIf
Else'數(shù)據(jù)傳送錯誤
resend=resend+1'記錄傳送次數(shù)
Ifresend>=2Then
Label1(shebeihao-1).Caption=“數(shù)據(jù)重傳失??!”
ExitSub
Else'重新發(fā)出查詢應答信號
chaxunyingda(0)=&HFE
chaxunyingda(1)=&HEF
chaxunyingda(2)="&h"+Hex(shebeihao)
chaxunyingda(3)=&H1
chaxunyingda(4)=&HFF
outputbuffer=chaxunyingdaMSComm1.Output=outputbuffer
GoTotongxin
EndIf
EndIf
jiaoyan: '校驗過程
jiaoyanhe&=0
Fori=0Tok-2
jiaoyanhe&=jiaoyanhe&+jieshoushuju(i)
NextiReDimchaxunyingda(5)AsByte
If(jiaoyanhe&Mod256)=jieshoushuju(k-1)Then
'校驗無誤,發(fā)出相應信號
chaxunyingda(0)=&HFE
chaxunyingda(1)=&HEF
chaxunyingda(2)="&h"+Hex(shebeihao)
chaxunyingda(3)=&H0
chaxunyingda(4)=&HFF
outputbuffer=chaxunyingda
MSComm1.Output=outputbufferLabel1(shebeihao-1).Caption="通信完成!"
GoToshujuchuli1'進入數(shù)據(jù)處理的下一步
Else'校驗有誤,進行如下處理
resend=resend+1
Ifresend>=2Then
'數(shù)據(jù)已經(jīng)傳送過兩次則退出程序
Label1(shebeihao-1).Caption="資料重傳失??!"
ExitSubchongfa:
Else '否則再次重發(fā)
chaxunyingda(0)=&HFE
chaxunyingda(1)=&HEF
chaxunyingda(2)="&h"+Hex(shebeihao)
chaxunyingda(3)=&H1
chaxunyingda(4)=&HFF
outputbuffer=chaxunyingda
MSComm1.Output=outputbuffer
GoTotongxin
EndIf
EndIfshujuchuli1:'要將數(shù)據(jù)放入相應的數(shù)據(jù)庫的數(shù)據(jù)表中
Callxuanzebiao'調(diào)用程序以便找到相應的數(shù)據(jù)表
Sethchdb=DBEngine.Workspaces(0).OpenDatabase(dbstr+hchdbname)
` '在此處設置本地數(shù)據(jù)庫
Sethchtb=hchdb.OpenRecordset(tbname)
Callshujuchuli'調(diào)用數(shù)據(jù)處理子程序
hchtb.Close
hchdb.Close
EndSub在這個程序段中要完成的工作很多,下面逐一介紹。
首先要做的就是發(fā)出一個巡檢信號,這個信號中的信息段是根據(jù)協(xié)議而定的,要想發(fā)出信息,只需將要發(fā)出的信息放入通信輸出緩沖區(qū)即可。這部分功能在語句標號XJ處完成。
發(fā)出信號之后,就要等待數(shù)據(jù)發(fā)送終端(即上一節(jié)中的發(fā)送模擬程序)進行數(shù)據(jù)的發(fā)送。如果等待時間超出了規(guī)定時間,就可以進行下一輪的巡檢。在本程序中是通過設置一個變量duration來規(guī)定通信中的延遲時間。這部分功能在語句標號YC處完成。如果一切正常,收到了來自設備終端的信號,則進行采集過程。在采集過程中,還要分情況處理。從語句標號X1處開始處理這些不同的數(shù)據(jù)。
在數(shù)據(jù)處理時,如果握手成功,程序先檢查信息的第四位,這一位按照協(xié)議規(guī)定是指傳送來的信息是否為空,如果為空,則在相應的位置上顯示“通信正常,沒有數(shù)據(jù)傳送!”。
當一切順利并且有數(shù)據(jù)傳送過來時,則進入通信模塊,否則顯示“握手失敗”。通信模塊從語句標號tongxin處開始實現(xiàn)。在通信模塊中,要根據(jù)協(xié)議規(guī)定依次進行數(shù)據(jù)的輸入(從語句標號tongxin處完成),輸入的同時對數(shù)據(jù)進行校驗(從語句標號jiaoyan處完成),看是否為有效數(shù)據(jù),如果有錯誤則要提示,并且重新進行傳送(從語句標號chongfa處完成),再一次執(zhí)行通信模塊程序(從語句標號tongxin處完成)。
通信成功之后,就要將這些二進制數(shù)據(jù)進行一些處理,使之成為用戶能識別的有效數(shù)據(jù)放入表中,這部分功能在語句標號shujuchuli1處完成。這個過程調(diào)用了兩個子程序xuanzebiao和shujuchuli來實現(xiàn)不同的數(shù)據(jù)在不同的表中的不同格式處理,以提高程序的模塊化。
下面分析這兩個子程序。選擇各設備對應的表子程序xuanzebiao的代碼如下:PrivateSubxuanzebiao()
dbstr="c:\DD\"
hchdbname="電機車間設備檢修緩沖數(shù)據(jù)庫.mdb"
SelectCaseshebeihao
Case1
tbname="烘干爐緩沖數(shù)據(jù)表"
Case2
tbname="浸漆罐緩沖數(shù)據(jù)表"
Case3
tbname="耐壓機緩沖數(shù)據(jù)表"
Case4
tbname="劈相機緩沖數(shù)據(jù)表"
Case5
tbname="壓力機緩沖數(shù)據(jù)表"
EndSelect
EndSub程序中根據(jù)變量shebeihao的標識值找到相應的表名。在這里將數(shù)據(jù)庫放入了C盤下的DD文件夾中。
數(shù)據(jù)處理子程序shujuchuli具體的程序代碼如下:PrivateSubshujuchuli()
SelectCaseshebeihao
Case1
sjcl1 '烘干爐數(shù)據(jù)入表處理
Case2
sjcl2 '浸漆罐數(shù)據(jù)入表處理
Case3
sjcl3 '耐壓機數(shù)據(jù)入表處理
Case4
sjcl4 '劈相機數(shù)據(jù)入表處理
Case5
sjcl5 '壓力機數(shù)據(jù)入表處理
EndSelect
EndSub這個子程序塊中又調(diào)用了其他的子程序去進行不同設備對應的不同的數(shù)據(jù)在數(shù)據(jù)表中的存放。因為各種工程項目中數(shù)據(jù)的計算、存放等因問題而異,這里不作具體限制。所以各設備具體的數(shù)據(jù)接收處理算法不作具體程序分析。
8.5現(xiàn)場總線
8.5.1現(xiàn)場總線簡介
現(xiàn)場總線是計算機網(wǎng)絡適應工業(yè)環(huán)境的產(chǎn)物。在計算機數(shù)據(jù)傳輸領域內(nèi),長期以來使用的是RS232等通信標準,盡管它們被廣泛地使用,但卻是一種低數(shù)據(jù)速率和點對點的數(shù)據(jù)傳輸標準,不能支持更高層次的計算機之間的功能操作。同時,在復雜或者大規(guī)模的工業(yè)現(xiàn)場或者生產(chǎn)自動化領域中,往往要使用大量的傳感器、執(zhí)行器和控制器等,它們通常分布在非常廣泛的范圍內(nèi)。如果在低層次上采用傳統(tǒng)的星型拓撲結(jié)構(gòu),則安裝成本和介質(zhì)造價都非常昂貴。而采用流行的局域網(wǎng)(LocalAreaNetwork,LAN)組件及環(huán)型或總線型拓撲結(jié)構(gòu),雖可減少電纜長度,但是增加的LAN介質(zhì)及相關硬件和軟件又使其系統(tǒng)造價與星型系統(tǒng)相差無幾。所以確實需要設計出一種造價低廉而且能經(jīng)受住工業(yè)現(xiàn)場環(huán)境的通信系統(tǒng),于是現(xiàn)場總線就在這種背景下產(chǎn)生了。
根據(jù)IEC1158定義,現(xiàn)場總線(FieldBus)可定義為一種“安裝在生產(chǎn)過程區(qū)域的現(xiàn)場設備/儀表與控制室內(nèi)的自動控制裝置/系統(tǒng)之間的一種串行、數(shù)字式、雙向傳輸和多分支結(jié)構(gòu)的通信網(wǎng)絡”。或者說,現(xiàn)場總線是以單個分散的、數(shù)字化、智能化的測量和控制設備作為網(wǎng)絡節(jié)點,用總線連接,實現(xiàn)信息互換,共同完成自動控制功能的網(wǎng)絡系統(tǒng)與控制系統(tǒng)。其中,“生產(chǎn)過程”包括斷續(xù)生產(chǎn)過程和連續(xù)生產(chǎn)過程兩種;現(xiàn)場設備/儀表是指位于生產(chǎn)現(xiàn)場的各種傳感器、驅(qū)動器和執(zhí)行器等設備;現(xiàn)場是指工作環(huán)境處于生產(chǎn)設備的一側(cè);總線是指傳送信息的公共路徑。因此,現(xiàn)場總線是面向工廠底層自動化及信息集成的數(shù)字化網(wǎng)絡技術。人們把基于這項技術的自動化系統(tǒng)稱為基于現(xiàn)場總線的控制系統(tǒng)(FieldbusControlSystem,F(xiàn)CS)。FCS是繼繼電式氣動儀表控制系統(tǒng)、電動單元組合式模擬儀表控制系統(tǒng)、集中式數(shù)字控制系統(tǒng)和集散控制系統(tǒng)DCS后的新一代控制系統(tǒng)。
1.典型的現(xiàn)場總線
由于歷史的原因,現(xiàn)在有多種現(xiàn)場總線標準并存。到目前為止,世界上約有40多種現(xiàn)場總線?,F(xiàn)將具有代表性的幾種介紹如下:
(1)?FoundationFieldbus(基金會現(xiàn)場總線)?,F(xiàn)場總線基金會(FF)是不依附于公司或企業(yè)集團的非商業(yè)化的國際標準化組織,它致力于建立國際上統(tǒng)一的現(xiàn)場總線協(xié)議?;饡F(xiàn)場總線(FF)標準無專利許可要求,可供所有的生產(chǎn)廠家使用,其總線標準、產(chǎn)品檢驗等信息全部公開。
(2)?PROFIBUS(過程現(xiàn)場總線)。PROFIBUS(ProcessFieldBus)是作為IEC標準的現(xiàn)場總線,將在9.2節(jié)中詳細介紹。
(3)?LonWorks(局域操作網(wǎng)絡)。LonWorks(LocalOperatingNetwork)采用符合ISO/OSI模型全部7層標準的LonTalk通信協(xié)議,它被封裝在被稱為Neuron(神經(jīng)元)的芯片中。該芯片有3個8位的CPU,第一個是介質(zhì)訪問控制處理器,第二個為網(wǎng)絡處理器,第三個是應用處理器,執(zhí)行用戶程序及其調(diào)用的操作系統(tǒng)服務。Neuron芯片還固化了34種I/O控制對象,目前已有幾千家公司推出了LonWorks產(chǎn)品。
(4)?CAN(控制器局域網(wǎng)絡)?,F(xiàn)場總線領域中,在IEC61158和IEC62026標準之前,CAN(ControllerAreaNetwork)總線是唯一被批準為國際標準的現(xiàn)場總線。CAN總線的總線規(guī)范已被國際標準化組織(ISO)制定為國際標準ISO11898和ISO11519。CAN總線得到了主要的計算機芯片商的廣泛支持,它們紛紛推出帶有CAN接口的微處理器(MCU)芯片。帶有CAN的MCU芯片總量已經(jīng)超過1億片,因此在接口芯片技術方面CAN已經(jīng)遙遙領先于其他所有現(xiàn)場總線。
需要指出的是,CAN總線同時是IEC62026-3設備網(wǎng)絡(DeviceNetwork,DN)和IEC62026-5靈巧配電系統(tǒng)(SDS)的物理層,因此它是IEC62026最主要的技術基礎。
2.現(xiàn)場總線的特點
(1)用數(shù)字化通信取代4~20mA模擬儀表。傳統(tǒng)的自動化控制技術的現(xiàn)場設備與控制設備是通過一對一的方式(一個I/O點對現(xiàn)場設備的一個測控點)連接的,即所謂I/O接線方式,信號以4~20mA(傳送模擬信號)或24V(DC)(傳送開關量信號)傳遞?,F(xiàn)場總線技術采用一條通信電纜連接控制設備和現(xiàn)場設備,使用數(shù)字化通信完成對現(xiàn)場設備的聯(lián)絡和控制。
(2)控制功能下移,實現(xiàn)徹底的分散控制?,F(xiàn)場總線技術是計算機網(wǎng)絡通信向現(xiàn)場級的延伸,因此,它可以把DCS子站的功能分散地分配給現(xiàn)場儀表,構(gòu)成虛擬的控制站,這樣就廢棄了DCS的I/O單元和控制站。通過現(xiàn)場儀表和裝置可以構(gòu)成控制回路,實現(xiàn)徹底的分散控制,提高控制系統(tǒng)的可靠性和靈活性。
(3)具有互操作性。由于功能分散在多臺現(xiàn)場儀表中,并且可以統(tǒng)一組態(tài),供用戶靈活地選用各種功能模塊,因此現(xiàn)場儀表或設備通過一對傳輸線就可實現(xiàn)不同廠商產(chǎn)品的交互操作和呼喚,將各廠商性能價格比最優(yōu)的產(chǎn)品集成在一起,實現(xiàn)“即接即用”,即所謂互操作性。
(4)集現(xiàn)場設備的遠程控制及故障診斷為一體。現(xiàn)場總線技術采用計算機數(shù)字通信技術連接現(xiàn)場設備。控制設備可以很便捷地從現(xiàn)場設備獲取所需的信息,實現(xiàn)設備狀態(tài)、故障、參數(shù)信息的快速傳送,完成對設備的遠程控制及故障的診斷工作。
(5)真正的開放式系統(tǒng),現(xiàn)場總線為開放式互聯(lián)網(wǎng)絡。所有技術和標準都是公開的,用戶可以自由地集
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年汨羅市文學藝術服務中心公開選調(diào)工作人員備考題庫及答案詳解一套
- 2026年宣威市板橋街道公開招聘村級衛(wèi)生室鄉(xiāng)村醫(yī)生備考題庫及答案詳解參考
- 2026年中鐵七局集團第二工程有限公司招聘備考題庫及1套完整答案詳解
- 2026年北京一零一中溫泉校區(qū)招聘備考題庫有答案詳解
- 2026年吐魯番市消防救援支隊面向社會公開招聘政府專職消防員16人備考題庫及完整答案詳解1套
- 完善資產(chǎn)內(nèi)控制度
- 檔案室內(nèi)控制度
- 五項費用內(nèi)控制度
- 內(nèi)控制度如何匯編
- 免房租內(nèi)控制度
- 售后服務流程管理手冊
- 2020-2021學年新概念英語第二冊-Lesson14-同步習題(含答案)
- 混凝土構(gòu)件的配筋計算
- 國家開放大學《政治學原理》章節(jié)自檢自測題參考答案
- GB/T 5758-2023離子交換樹脂粒度、有效粒徑和均一系數(shù)的測定方法
- 防雷裝置維護保養(yǎng)制度
- 中醫(yī)治療“膏淋”醫(yī)案67例
- 黃金冶煉行業(yè)三廢處理綜述
- 統(tǒng)編版高中語文選擇性必修上冊 在民族復興的歷史豐碑上-2020中國抗疫記 教學課件
- GB/T 2792-2014膠粘帶剝離強度的試驗方法
- 小波分析及其應用教材課件
評論
0/150
提交評論