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

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

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

二進制異或30H XOR 31H XOR 44H XOR 31H XOR 3AH=4EH
其文本方式為:@01D1∶4E CR
其二進制方式為
40H30H31H44H31H3AH34H45H0DH
2.3多串口通訊協(xié)議特點
通過以上兩種通訊格式的對比可以看出,一般都具有如下的組織結(jié)構(gòu)和特點:
?。?)開始、結(jié)束標志字符所有信息傳輸必須以一個標志字符開始,且以同一個字符結(jié)束。這個標志字符是[CR],稱標志場(F)。從開始標志到結(jié)束標志之間構(gòu)成一個完整的信息單位,稱為一幀(Frame)。所有的信息是以幀的形式傳輸?shù)?,而標志字符提供了每一幀的邊界。接收端可以通過這些信息來探知幀的開頭和結(jié)束,以此建立幀同步。
?。?)地址場和控制場在標志場之后,可以有一個地址場A(Address)和一個控制場C(Control)。地址場用來規(guī)定與之通訊的次站的地址??刂茍隹梢?guī)定若干個命令。其寬度可為8位或16位。
?。?)信息場跟在控制場之后的是信息場I(Information),也叫數(shù)據(jù)場,包含有要傳送的數(shù)據(jù)。并不是每一幀都必須有信息場,即數(shù)據(jù)場可以省略,當它省略時,則這一幀主要是控制命令。
(4)幀校驗信息緊跟在信息場之后的是兩字節(jié)的校驗信息,幀校驗場稱為FC(Frame Che ck)場或稱為幀校驗序列FCS(Frame Check Squence)。校驗碼可以為縱橫奇偶校驗或16位循環(huán)冗余校驗CRC(Cyclie Redundancy Code )。正確理解校驗碼的計算是實際串口通訊的難點和關(guān)鍵。
3管理體系結(jié)構(gòu)
基于多協(xié)議的串口通訊系統(tǒng)在大型系統(tǒng)的開發(fā)過程中,扮演著極其重要的角色,它具備完整的體系結(jié)構(gòu),在實踐中形成了一套完整的優(yōu)化管理方案,具有很清晰的層次性。從功能上講,它的涵蓋面很廣,從硬件設(shè)備的驅(qū)動程序到開發(fā)整套系統(tǒng)所需的各個開發(fā)環(huán)節(jié)在內(nèi),具體結(jié)構(gòu)如圖2所示。
設(shè)備硬件層:主要包括基于RS232串行接口的物理測量設(shè)備,它是完成整個系統(tǒng)自動化的底層硬件基礎(chǔ)。
資源管理層:是軟件設(shè)計平臺和設(shè)備之間連接的橋梁,主要由接口驅(qū)動和接口軟件、控件組成。VB提供的通訊控件提供了標準的事件處理函數(shù)、過程,并通過屬性的方法提供了串行通訊口參數(shù)的設(shè)置,可以較容易地解決串口通訊,實現(xiàn)對儀器和設(shè)備的遠程計算機控制。這部分還包括Windows串口驅(qū)動程序和拓展的串口驅(qū)動程序,完成Windows底層封裝和接口鏈接[7]。
開發(fā)應(yīng)用層:是一個集成軟件開發(fā)和程序執(zhí)行平臺,實現(xiàn)對串口檢測儀器模塊進行初始化和 各種配置并實現(xiàn)設(shè)備的遠程監(jiān)控,對數(shù)據(jù)進行保存,方便后期試驗數(shù)據(jù)處理。
多協(xié)議串口管理介于開發(fā)應(yīng)用層和資源管理層之間,包括了各種的串口管理機制,主要包括端口分配、通訊協(xié)議及通訊格式設(shè)置、數(shù)據(jù)校驗處理機制、通訊錯誤處理機制、緊急故障處 理機制(主要硬件故障等)、測試及調(diào)試機制、優(yōu)先級機制、優(yōu)化協(xié)調(diào)機制、進出口數(shù)據(jù)存儲機制。這些協(xié)議共同保障了多協(xié)議串口通訊系統(tǒng)的安全、有效運行。
4串口通訊程序的編制
4.1編程環(huán)境
雖然Windows提供了完備的開放式通用增強的W32API(應(yīng)用程序接口)函數(shù),它把對串口和其他通訊設(shè)備的支持和基本輸入驅(qū)動程序集于一體,其優(yōu)點是可實現(xiàn)的功能更豐富、應(yīng)用面 更廣泛、更適合于編寫較為復(fù)雜的低層通訊程序,但是利用API函數(shù)編寫串口通訊程序較 為復(fù)雜,需要掌握大量通訊知識。另一種方式是采用其通訊控件MSComm來實現(xiàn)[2],該控件“隱藏”了大部分串口通訊的低層運行過程和許多繁瑣的過程,提供了標準的事件 處理函數(shù)、過程。并通過屬性的方法提供了串行通訊口參數(shù)的設(shè)置。所以只需編寫少量的代 碼來實現(xiàn)主要應(yīng)用功能和界面的設(shè)計,就可以完成軟件的開發(fā)過程[8]。
MSComm控件提供了事件驅(qū)動、查詢兩種控制串口的方法。查詢方式就是在用戶程序中設(shè)計定時或不定時查詢MSComm控件的某些屬性是否發(fā)生變化(一般查詢InBufferCount接收緩沖區(qū) 中等待計算機接收的字符數(shù)是否滿足要求),當程序較小,實時性不高時應(yīng)用這種方 法,在該程序中恒溫箱和恒流恒壓注塞泵的管理用這種方法。而事件驅(qū)動方式即中斷方式,當有數(shù)據(jù)到達端口或端口狀態(tài)發(fā)生改變或有通訊錯誤產(chǎn)生時,MSComm控件會產(chǎn)生OnComm事件,用戶程序可以捕獲該事件并檢查CommEvent屬性的值來查詢事件和錯誤并進行相應(yīng)處理,采用這種方法程序響應(yīng)及時,可靠性高。在程序中回壓閥和飽和度測試儀應(yīng)用這種方式通訊。
4.2程序代碼
在測控系統(tǒng)串口通訊過程中有多個設(shè)備同時通訊時,特別是同時有多個任務(wù)需要處理時,互相沖突,容易受到外界干擾,為防止通訊錯誤,需要在集成處理軟件中進行抗干擾處理。文中采用兩種方法來進行糾錯、檢錯處理:
(1)啟動錯誤定時器,掃描錯誤數(shù)據(jù)傳輸中的錯誤,如果有錯誤則重新啟動通訊線程;
?。?)對接收的數(shù)據(jù)進行校驗,若超過通訊設(shè)定時間要求或者接收數(shù)據(jù)誤碼時重發(fā)。
運行證明,以上兩種方法的應(yīng)用大大提高了通訊可靠性,減小了誤碼率。下面是其通訊部分程序的片段。
/打開串口,啟動通訊模塊

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