多串口DLL解决方案API版

硬件/系统
多串口DLL解决方案API版
作者 许士敏 

调用Win32的串口通信API函数,以动态连接库(DLL)形式实现对多串口的操作。 

正文
[refer]下载演示程序[/refer]
[refer]下载技术文档[/refer]

在现代的各种实时监控系统和通信系统中,在Windows 9X/NT下利用VC++对RS-232串口编程是常用的手段。
本程序以动态连接库(DLL)形式实现对多串口的操作,MSCOMM串口通讯控件在基于对话框的程序中很好使用,但在基于文档的程序不能直接使用该控件,且生成的可执行文件不能适用于不同的计算机。
Windows通信一般都以WOSA(Windows Open Services Architecture,即Windows开放式服务体系)模型为基础,在此模型中位于上层的应用程序通过调用各种通信API(Application Programming Interfaces,即应用程序接口)与位于下层的设备驱动程序进行数据交换。Windows对串行口的读写也不例外,通过调用Win32的串口通信API函数,即可编写串行通信程序。本DLL是基于API函数的。

一、 多串口DLL功能
(一) 串口参数设置
  对RS-232-C串行端口进行参数配置是使用串口进行通讯的必要条件。而且由于场合不同、用途、功能的不同对串口也采取不同的配置方式,为了使本程序更灵活,适应面更广,采取将所有的可能参数都预先设置在几个组合框中,可以在程序运行后随时更改设置。
图1 串口参数设置界面

串口号: 自动检测计算机存在的串口,但只能控制从COM1到COM5,能满足绝大多数人的需求。
是否使用:如果选中,则表示要对该串口进行初始化,以及收发控制。否则表示对计算机存在的串口不操作。
波特率:从1200bps到57600bps。
校验:有无校验(NOPARITY)。
数据位:7位或是8位。
停止位:1位、1.5位或是2位。
流控制:有无流控制(flow)。

(二) 串口收发数据调试显示
在进行串口操作时,尤其是在调试期间,需要知道串口的收发数据。本DLL提供串口收发数据的显示界面。


图2 串口收发数据ASCII显示界面



图3 串口收发数据16进制显示界面
(三) 串口参数设置文件
串口参数设置文件名为MscommSet.ini,该文件保存在工程工作目录下,如果没有该文件,串口按缺省值设置,在设置串口参数后,自动生成该设置文件。其内容如下:
[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 提供三个文件SerialAPIDLL.dll,SerialAPIDLL.lib和MultiSerialAPI.h。在应用时,要把这三个文件拷贝到相应的目录下,并且要作如图4的设置。详见示例工程。


图4 应用工程连接设置界面 

三、 多串口DLL主要函数使用说明
1.BOOL OnCommsCreate(CWnd* pParentWnd);
创建串口,本DLL同时创建32个串口。pParentWnd为窗口指针,一般为this。
2. BOOL OnComportOpen();
根据串口设置文件中的设置参数,打开多串口。
3.void OnCommSend(unsigned int uiCom, CString sSendData, unsigned int uiKind); 
往指定串口发送数据。其中uiCom为指定的串口,注意串口1的uiCom为0;sSendData为要发送的字符串; uiKind: 发送数据类型:0:原始数据 1:加回车符 2:加校验和。
4.void OnMscommsSet();
打开串口设置界面,改变串口设置,并保存到设置文件中。
5.BOOL OnComportTimerProcess(CString strProcess[MaxPort]);
判断串口接收的一组数据是否已经接收完。
6.    BOOL OnPopupDialog();     
打开串口收发数据显示调试界面。

 


CSDN VC编程经验总结

 

 
/* --------------------------------------------------------------- 文件名称:SmartMComDll.h 说 明:声明串口DLL函数 作 者:温子祺 创建时间:2010-08-06 联系方式:wenziqi@hotmail.com 博 客:http://www.cnblogs.com/wenziqi/ 小 组:http://group.ednchina.com/2748/ 官 网:www.smartmcu.com --------------------------------------------------------------- */ #ifdef SMARTMCOMDLL_EXPORTS #define SMARTMCOMDLL_API __declspec(dllexport) #else #define SMARTMCOMDLL_API __declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif /***************************************************** *函数名称:Init *输 入:portnr 端口号 baud 波特率 parity 校验方式 databits 数据位 stopbits 停止位 *输 出:TRUE/FALSE *功 能:初始化串口 *示 例: BOOL b=Init(1,9600,NOPARITY,8,ONESTOPBIT); ******************************************************/ SMARTMCOMDLL_API extern BOOL Init(UINT portnr, UINT baud, UINT parity, UINT databits, UINT stopbits); /***************************************************** *函数名称:Close *输 入:无 *输 出:TRUE/FALSE *功 能:关闭串口 *示 例: BOOL b=Close(); ******************************************************/ SMARTMCOMDLL_API extern BOOL Close(void); /***************************************************** *函数名称:Send *输 入:pSendBytes 发送数据缓冲区 unSendLength 发送数据长度 *输 出:成功发送的字节数 *功 能:串口发送数据 *示 例: UINT8 buf[3]={0x01,0x02,0x03} UINT b=Send(buf,3); ******************************************************/ SMARTMCOMDLL_API extern UINT Send(UCHAR *pSendBytes,UINT unSendLength); /***************************************************** *函数名称:Recv *输 入:pRecvBytes 接收数据缓冲区 unRecvLength 接收数据长度 *输 出:成功接收的字节数 *功 能:串口接收数据 *示 例: UINT8 buf[3]; UINT b=Recv(buf,3); ******************************************************/ SMARTMCOMDLL_API extern UINT Recv(UCHAR *pRecvBytes,UINT unRecvLength); #ifdef __cplusplus } #endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值