摘 要:該文介紹了利用VB ActiveX控件MSComm實(shí)現(xiàn)工控機(jī)和多個(gè)通訊協(xié)議監(jiān)控設(shè)備之間的數(shù)據(jù)串口通訊,主要討論了串口通訊常見的通訊協(xié)議格式及其組成結(jié)構(gòu),并結(jié)合具體的硬件設(shè)計(jì)實(shí)例,給出了多協(xié)議串口通訊系統(tǒng)完整體系結(jié)構(gòu)及優(yōu)化管理方案。同時(shí),分析了串口通訊的兩種方式并給出了相應(yīng)的軟件設(shè)計(jì)例程,整個(gè)系統(tǒng)結(jié)構(gòu)簡單、可靠性高、運(yùn)行效果良好。
關(guān)鍵詞:RS232;監(jiān)控系統(tǒng);串口通訊;MSComm控件
Abstract:The paper deals with the serial communication that uses the VB ActiveX MSComm to realize the data communication between an industrial contral computer and multi-communication protocol monitoring devices along with the common communication protocol format and composite structure.The whol e communicational system architecture and optimal management mechanism are prese nted whith an instance of concrete hardware design,This paper also analyzes two modes of serial communication and gives out a corresponding example of the soft ware design. The practical application shows that the syetem has many features, such as simple structure,high reliability and good effectiveness.
Key words:RS232;monitoring system;serial communication;MSComm control
0引言
伴隨著現(xiàn)代化生產(chǎn)過程中智能化、自動(dòng)化程度的提高,越來越多的綜合過程系統(tǒng)需要開發(fā)自身的數(shù)據(jù)采集與監(jiān)控平臺(tái)[1],利用Windows編程技術(shù)開發(fā)這樣的實(shí)時(shí)測控應(yīng)用程序時(shí),關(guān)鍵而且經(jīng)常要面臨與外圍監(jiān)控設(shè)備通訊的問題[2,3]。由于串行通訊是在一根傳輸線上一位一位的傳送信息,避免了多條線路特性的不一致,所以現(xiàn)在大量的智能儀器或數(shù)據(jù)采集模塊都帶有RS232/485串行通訊接口,通過相應(yīng)的通訊協(xié)議和串口通訊程序,可以將測試、采集的數(shù)據(jù)傳輸?shù)缴衔还た貦C(jī),以滿足各種形式后續(xù)數(shù)據(jù)處理的要求。同時(shí)整 個(gè)監(jiān)控系統(tǒng)會(huì)根據(jù)系統(tǒng)運(yùn)行情況通過串口向監(jiān)控設(shè)備發(fā)送指令,調(diào)節(jié)設(shè)備的運(yùn)行參數(shù)等使得 生產(chǎn)過程平穩(wěn)進(jìn)行。該文就是對大型數(shù)據(jù)采集及監(jiān)控系統(tǒng)中針對多個(gè)設(shè)備儀表串口通訊如何實(shí)現(xiàn)優(yōu)化管理和控制做一些探討。
1系統(tǒng)硬件及信號線的連接
在某大型物理模擬監(jiān)控系統(tǒng)中共有4個(gè)設(shè)備利用串口[4,5]進(jìn)行控制,圖1所示系統(tǒng)硬件連接圖中,每個(gè)設(shè)備都通過工控機(jī)RS232(<12 m)串口進(jìn)行遠(yuǎn)程實(shí)時(shí)數(shù)據(jù)采集和控制管理。
系統(tǒng)中工控機(jī)與終端的接口只需3根信號線,即發(fā)送數(shù)據(jù)線(TXD)、接收數(shù)據(jù)線(RXD)和信號地線(SG),便可以直接對終端進(jìn)行數(shù)據(jù)的接收和發(fā)送,不需對信號線 的狀態(tài)進(jìn)行判斷或設(shè)置。
2多通訊協(xié)議與通訊格式
通訊協(xié)議是指通訊雙方的一種約定。約定包括對數(shù)據(jù)格式、同步方式、傳送速度、傳送步驟、檢糾錯(cuò)方式以及控制字符定義等問題做出統(tǒng)一規(guī)定,通訊雙方必須共同遵守。它屬于ISO‘ S OSI 7層參考模型中的數(shù)據(jù)鏈路層。當(dāng)有多個(gè)串口檢測設(shè)備需要與上位機(jī)通訊時(shí)[6],正確的理解通訊協(xié)議是串口通訊的關(guān)鍵和難點(diǎn)。實(shí)際上由于各廠家自行定制格式,因此控制、參數(shù)設(shè)置、參數(shù)讀取、狀態(tài)讀取指 令相差甚遠(yuǎn),沒有形成統(tǒng)一的協(xié)議標(biāo)準(zhǔn)。表1分別以ISCO注塞泵的Dasnet通訊格式和恒溫箱先鋒溫控儀的Normal通訊格式兩個(gè)典型為例進(jìn)行說明,對讀者快速、正確理解串口協(xié)議起到拋磚引玉的作用。
2.1Dasnet發(fā)送命令代碼說明
(1)從接收命令的終端設(shè)備地址(目的地址)開始,地址是一個(gè)數(shù)字位(0~9),多個(gè)設(shè)備連接時(shí),設(shè)定地址號不能重疊;
(2)應(yīng)答方式標(biāo)識,具體有3種意思:E-錯(cuò)誤,B-繁忙,C-接收;
(3)命令源地址:發(fā)命令設(shè)備的初始地址,一般為0;
(4)長度:表示了所要發(fā)送命令的長度,以ASCⅡ碼表示;
(5)命令:單獨(dú)的讀命令或?qū)懨睿ㄆ浜髱Щ虿粠?shù))組成;
(6)校驗(yàn)碼:是兩位十六進(jìn)制數(shù),它從起始位置到命令結(jié)束全部字符的和然后 求補(bǔ)所得結(jié)果的單字節(jié)校驗(yàn)碼(和以256為模等于0);
(7)回車CR符(0DH):表示全命令的結(jié)束。
如發(fā)送命令:R304STOPD1[CR]

其文本方式發(fā)送為:R304STOPD1[CR]
其二進(jìn)制發(fā)送方式為:

計(jì)算校驗(yàn)碼的方法有:模數(shù)的十六進(jìn)制、模數(shù)的十進(jìn)制、非模數(shù)的十六進(jìn)制、非模數(shù)的十進(jìn)制。現(xiàn)以模數(shù)的十六進(jìn)制方法為例說明校驗(yàn)碼的計(jì)算:
(1)22FH=52H+33H+30H+34H+53H+54H+4FH+50H;
(2)2F=22FH÷100H;
(3)D1H=100H-2FH;
(4)把D1H用16進(jìn)制兩個(gè)ASCⅡ碼表示,并加到命令結(jié)尾;
(5)把“CR”(0DH)加到最后表示整個(gè)命令的結(jié)束。
2.2Normal發(fā)送全文件和返回全文件通訊格式代碼說明
(1)起始符以“ @”(40H),表示文件的開始;
(2)地址:調(diào)節(jié)器設(shè)定的地址號00~31,多調(diào)節(jié)器時(shí),設(shè)定地址號不能重疊;
(3)文件:文件是由單獨(dú)的讀命令或?qū)懨睿ㄆ浜髱Щ虿粠?shù))組成;
(4)文件是以ASC Ⅱ碼字符冒號“:”(3AH)作為結(jié)束;
(5)BCC校驗(yàn)碼:從起始字符“@”后到文件的結(jié)束符“:”(含結(jié)束符)全部字符的異或運(yùn)算(XOR),所得結(jié)果的雙字節(jié)校驗(yàn)碼;
(6)回車CR符(0DH)表示全文件的結(jié)束。
舉例說明:

二進(jìn)制異或30H XOR 31H XOR 44H XOR 31H XOR 3AH=4EH
其文本方式為:@01D1∶4E CR
其二進(jìn)制方式為
40H30H31H44H31H3AH34H45H0DH
2.3多串口通訊協(xié)議特點(diǎn)
通過以上兩種通訊格式的對比可以看出,一般都具有如下的組織結(jié)構(gòu)和特點(diǎn):
(1)開始、結(jié)束標(biāo)志字符所有信息傳輸必須以一個(gè)標(biāo)志字符開始,且以同一個(gè)字符結(jié)束。這個(gè)標(biāo)志字符是[CR],稱標(biāo)志場(F)。從開始標(biāo)志到結(jié)束標(biāo)志之間構(gòu)成一個(gè)完整的信息單位,稱為一幀(Frame)。所有的信息是以幀的形式傳輸?shù)模鴺?biāo)志字符提供了每一幀的邊界。接收端可以通過這些信息來探知幀的開頭和結(jié)束,以此建立幀同步。
(2)地址場和控制場在標(biāo)志場之后,可以有一個(gè)地址場A(Address)和一個(gè)控制場C(Control)。地址場用來規(guī)定與之通訊的次站的地址。控制場可規(guī)定若干個(gè)命令。其寬度可為8位或16位。
(3)信息場跟在控制場之后的是信息場I(Information),也叫數(shù)據(jù)場,包含有要傳送的數(shù)據(jù)。并不是每一幀都必須有信息場,即數(shù)據(jù)場可以省略,當(dāng)它省略時(shí),則這一幀主要是控制命令。
(4)幀校驗(yàn)信息緊跟在信息場之后的是兩字節(jié)的校驗(yàn)信息,幀校驗(yàn)場稱為FC(Frame Che ck)場或稱為幀校驗(yàn)序列FCS(Frame Check Squence)。校驗(yàn)碼可以為縱橫奇偶校驗(yàn)或16位循環(huán)冗余校驗(yàn)CRC(Cyclie Redundancy Code )。正確理解校驗(yàn)碼的計(jì)算是實(shí)際串口通訊的難點(diǎn)和關(guān)鍵。
3管理體系結(jié)構(gòu)
基于多協(xié)議的串口通訊系統(tǒng)在大型系統(tǒng)的開發(fā)過程中,扮演著極其重要的角色,它具備完整的體系結(jié)構(gòu),在實(shí)踐中形成了一套完整的優(yōu)化管理方案,具有很清晰的層次性。從功能上講,它的涵蓋面很廣,從硬件設(shè)備的驅(qū)動(dòng)程序到開發(fā)整套系統(tǒng)所需的各個(gè)開發(fā)環(huán)節(jié)在內(nèi),具體結(jié)構(gòu)如圖2所示。

設(shè)備硬件層:主要包括基于RS232串行接口的物理測量設(shè)備,它是完成整個(gè)系統(tǒng)自動(dòng)化的底層硬件基礎(chǔ)。
資源管理層:是軟件設(shè)計(jì)平臺(tái)和設(shè)備之間連接的橋梁,主要由接口驅(qū)動(dòng)和接口軟件、控件組成。VB提供的通訊控件提供了標(biāo)準(zhǔn)的事件處理函數(shù)、過程,并通過屬性的方法提供了串行通訊口參數(shù)的設(shè)置,可以較容易地解決串口通訊,實(shí)現(xiàn)對儀器和設(shè)備的遠(yuǎn)程計(jì)算機(jī)控制。這部分還包括Windows串口驅(qū)動(dòng)程序和拓展的串口驅(qū)動(dòng)程序,完成Windows底層封裝和接口鏈接[7]。
開發(fā)應(yīng)用層:是一個(gè)集成軟件開發(fā)和程序執(zhí)行平臺(tái),實(shí)現(xiàn)對串口檢測儀器模塊進(jìn)行初始化和 各種配置并實(shí)現(xiàn)設(shè)備的遠(yuǎn)程監(jiān)控,對數(shù)據(jù)進(jìn)行保存,方便后期試驗(yàn)數(shù)據(jù)處理。
多協(xié)議串口管理介于開發(fā)應(yīng)用層和資源管理層之間,包括了各種的串口管理機(jī)制,主要包括端口分配、通訊協(xié)議及通訊格式設(shè)置、數(shù)據(jù)校驗(yàn)處理機(jī)制、通訊錯(cuò)誤處理機(jī)制、緊急故障處 理機(jī)制(主要硬件故障等)、測試及調(diào)試機(jī)制、優(yōu)先級機(jī)制、優(yōu)化協(xié)調(diào)機(jī)制、進(jìn)出口數(shù)據(jù)存儲(chǔ)機(jī)制。這些協(xié)議共同保障了多協(xié)議串口通訊系統(tǒng)的安全、有效運(yùn)行。
4串口通訊程序的編制
4.1編程環(huán)境
雖然Windows提供了完備的開放式通用增強(qiáng)的W32API(應(yīng)用程序接口)函數(shù),它把對串口和其他通訊設(shè)備的支持和基本輸入驅(qū)動(dòng)程序集于一體,其優(yōu)點(diǎn)是可實(shí)現(xiàn)的功能更豐富、應(yīng)用面 更廣泛、更適合于編寫較為復(fù)雜的低層通訊程序,但是利用API函數(shù)編寫串口通訊程序較 為復(fù)雜,需要掌握大量通訊知識。另一種方式是采用其通訊控件MSComm來實(shí)現(xiàn)[2],該控件“隱藏”了大部分串口通訊的低層運(yùn)行過程和許多繁瑣的過程,提供了標(biāo)準(zhǔn)的事件 處理函數(shù)、過程。并通過屬性的方法提供了串行通訊口參數(shù)的設(shè)置。所以只需編寫少量的代 碼來實(shí)現(xiàn)主要應(yīng)用功能和界面的設(shè)計(jì),就可以完成軟件的開發(fā)過程[8]。
MSComm控件提供了事件驅(qū)動(dòng)、查詢兩種控制串口的方法。查詢方式就是在用戶程序中設(shè)計(jì)定時(shí)或不定時(shí)查詢MSComm控件的某些屬性是否發(fā)生變化(一般查詢InBufferCount接收緩沖區(qū) 中等待計(jì)算機(jī)接收的字符數(shù)是否滿足要求),當(dāng)程序較小,實(shí)時(shí)性不高時(shí)應(yīng)用這種方 法,在該程序中恒溫箱和恒流恒壓注塞泵的管理用這種方法。而事件驅(qū)動(dòng)方式即中斷方式,當(dāng)有數(shù)據(jù)到達(dá)端口或端口狀態(tài)發(fā)生改變或有通訊錯(cuò)誤產(chǎn)生時(shí),MSComm控件會(huì)產(chǎn)生OnComm事件,用戶程序可以捕獲該事件并檢查CommEvent屬性的值來查詢事件和錯(cuò)誤并進(jìn)行相應(yīng)處理,采用這種方法程序響應(yīng)及時(shí),可靠性高。在程序中回壓閥和飽和度測試儀應(yīng)用這種方式通訊。
4.2程序代碼
在測控系統(tǒng)串口通訊過程中有多個(gè)設(shè)備同時(shí)通訊時(shí),特別是同時(shí)有多個(gè)任務(wù)需要處理時(shí),互相沖突,容易受到外界干擾,為防止通訊錯(cuò)誤,需要在集成處理軟件中進(jìn)行抗干擾處理。文中采用兩種方法來進(jìn)行糾錯(cuò)、檢錯(cuò)處理:
(1)啟動(dòng)錯(cuò)誤定時(shí)器,掃描錯(cuò)誤數(shù)據(jù)傳輸中的錯(cuò)誤,如果有錯(cuò)誤則重新啟動(dòng)通訊線程;
(2)對接收的數(shù)據(jù)進(jìn)行校驗(yàn),若超過通訊設(shè)定時(shí)間要求或者接收數(shù)據(jù)誤碼時(shí)重發(fā)。
運(yùn)行證明,以上兩種方法的應(yīng)用大大提高了通訊可靠性,減小了誤碼率。下面是其通訊部分程序的片段。
/打開串口,啟動(dòng)通訊模塊

/關(guān)閉串口,通訊結(jié)束模塊
5結(jié)束語
利用VB6.0的MSComm通訊控件建立了多個(gè)協(xié)議設(shè)備和工控機(jī)的串口通訊系統(tǒng),并將該系統(tǒng)運(yùn)用于實(shí)際的某大型三維物理模擬裝置。從實(shí)際運(yùn)行的情況看,由于在通訊系統(tǒng)中采用了先進(jìn)的多串口優(yōu)化管理機(jī)制,所以基于這種方式所構(gòu)成的計(jì)算機(jī)數(shù)據(jù)采集及監(jiān)控系統(tǒng),對于傳輸距離比較近的實(shí)驗(yàn)室或者現(xiàn)場控制,是一種性價(jià)比很高的系統(tǒng)解決方案,而且該系統(tǒng)具有結(jié) 構(gòu)簡單、可靠性高、測量精確、控制靈活的特點(diǎn),對以后建設(shè)此類基于通訊協(xié)議設(shè)備的串口通訊監(jiān)控系統(tǒng)具有很高的參考價(jià)值。
參考文獻(xiàn)
[1]鄭彪,汪秉文.串口通訊在工業(yè)控制中的應(yīng)用[J].自動(dòng)化儀表,2002,23(4)∶58-59.
[2]汪明建,汪明武,加油站計(jì)算機(jī)監(jiān)控系統(tǒng)串口通訊設(shè)計(jì)[J].自動(dòng)化與儀表,1999,14(3)∶57-59.
[3]柯文,華靜.微機(jī)與多臺(tái)加工中心串行通訊的實(shí)現(xiàn)[J].工業(yè)儀表與自動(dòng)化裝置,2003,(3)∶17-19.
[4]李英順,倫淑嫻. PC機(jī)和檢測儀器串口通訊的實(shí)現(xiàn)[J].沈陽航空工業(yè)學(xué)院學(xué)報(bào),2003,20(2)∶26-28.
[5]柯伯樂,池江,湯天浩.基于MOXA多串口卡的多串口通訊的實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī),2004,17(1)∶46-47.
[6]闕江,孫苓生,張明.用VB6.0實(shí)現(xiàn)工控軟件和下位機(jī)的串口通訊[J].電力自動(dòng)化設(shè)備,2002,22(9)∶34-36.
[7]莫衛(wèi)東,白鵬.Visual Basic6.0高級編程技巧-控制篇[M].西安:西安交通大學(xué)出版社,1999.
[8]劉炳文.精通Visual Basic6.0中文版[M].北京:電子工業(yè)出版社,1999.