在現(xiàn)代的各種
實(shí)時(shí)監(jiān)控系統(tǒng)和通信系統(tǒng)中,在Windows 9X/NT下利用VC++對(duì)RS-232
串口編程是常用的手段。
本程序以動(dòng)態(tài)連接庫(DLL)形式實(shí)現(xiàn)對(duì)多串口的操作,MSCOMM串口通訊控件在基于對(duì)話框的程序中很好使用,但在基于文檔的程序不能直接使用該控件,且生成的可執(zhí)行文件不能適用于不同的計(jì)算機(jī)。
Windows通信一般都以WOSA(Windows Open Services Architecture,即Windows開放式服務(wù)體系)模型為基礎(chǔ),在此模型中位于上層的應(yīng)用程序通過調(diào)用各種通信API(Application Programming Interfaces,即應(yīng)用程序接口)與位于下層的
設(shè)備驅(qū)動(dòng)程序進(jìn)行數(shù)據(jù)交換。Windows對(duì)串行口的讀寫也不例外,通過調(diào)用Win32的串口通信API函數(shù),即可編寫
串行通信程序。本DLL是基于API函數(shù)的。
一、 多串口DLL功能
?。ㄒ唬?串口參數(shù)設(shè)置
對(duì)RS-232-C串行端口進(jìn)行參數(shù)配置是使用串口進(jìn)行通訊的必要條件。而且由于場合不同、用途、功能的不同對(duì)串口也采取不同的配置方式,為了使本程序更靈活,適應(yīng)面更廣,采取將所有的可能參數(shù)都預(yù)先設(shè)置在幾個(gè)組合框中,可以在程序運(yùn)行后隨時(shí)更改設(shè)置。
圖1 串口參數(shù)設(shè)置界面
串口號(hào): 自動(dòng)檢測計(jì)算機(jī)存在的串口,但只能控制從COM1到COM5,能滿足絕大多數(shù)人的需求。
是否使用:如果選中,則表示要對(duì)該串口進(jìn)行
初始化,以及收發(fā)控制。否則表示對(duì)計(jì)算機(jī)存在的串口不操作。
波特率:從1200bps到57600bps。
校驗(yàn):有無校驗(yàn)(NOPARITY)。
數(shù)據(jù)位:7位或是8位。
停止位:1位、1.5位或是2位。
流控制:有無流控制(flow)。
(二) 串口收發(fā)數(shù)據(jù)調(diào)試顯示
在進(jìn)行串口操作時(shí),尤其是在調(diào)試期間,需要知道串口的收發(fā)數(shù)據(jù)。本DLL提供串口收發(fā)數(shù)據(jù)的顯示界面。
圖2 串口收發(fā)數(shù)據(jù)ASCII顯示界面
圖3 串口收發(fā)數(shù)據(jù)16進(jìn)制顯示界面
?。ㄈ?串口參數(shù)設(shè)置文件
串口參數(shù)設(shè)置文件名為MscommSet.ini,該文件保存在工程工作目錄下,如果沒有該文件,串口按缺省值設(shè)置,在設(shè)置串口參數(shù)后,自動(dòng)生成該設(shè)置文件。其內(nèi)容如下:
[0串口信息]
use=1
baud=2400
port=1
databits=8
stopbits=1
flow=0
parity=N
[1串口信息]
use=1
baud=2400
port=2
databits=8
stopbits=1
flow=0
parity=N
[2串口信息]
use=0
baud=2400
port=1
databits=8
stopbits=1
flow=0
parity=N
[3串口信息]
use=0
baud=2400
port=4
databits=8
stopbits=1
flow=0
parity=N
[4串口信息]
use=0
baud=2400
port=1
databits=8
stopbits=1
flow=0
parity=N
二、 多串口DLL的作用
本DLL 提供三個(gè)文件SerialAPIDLL.dll,SerialAPIDLL.lib和MultiSerialAPI.h。在應(yīng)用時(shí),要把這三個(gè)文件拷貝到相應(yīng)的目錄下,并且要作如圖4的設(shè)置。詳見示例工程。
圖4 應(yīng)用工程連接設(shè)置界面
三、 多串口DLL主要函數(shù)使用說明
1.BOOL OnCommsCreate(CWnd* pParentWnd);
創(chuàng)建串口,本DLL同時(shí)創(chuàng)建32個(gè)串口。pParentWnd為窗口指針,一般為this。
2. BOOL OnComportOpen();
根據(jù)串口設(shè)置文件中的設(shè)置參數(shù),打開多串口。
3.void OnCommSend(unsigned int uiCom, CString sSendData, unsigned int uiKind);
往指定串口發(fā)送數(shù)據(jù)。其中uiCom為指定的串口,注意串口1的uiCom為0;sSendData為要發(fā)送的字符串; uiKind: 發(fā)送數(shù)據(jù)類型:0:原始數(shù)據(jù) 1:加回車符 2:加校驗(yàn)和。
4.void OnMscommsSet();
打開串口設(shè)置界面,改變串口設(shè)置,并保存到設(shè)置文件中。
5.BOOL OnComportTimerProcess(CString strProcess[MaxPort]);
判斷串口接收的一組數(shù)據(jù)是否已經(jīng)接收完。
6. BOOL OnPopupDialog();
打開串口收發(fā)數(shù)據(jù)顯示調(diào)試界面。