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

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

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

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

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