VC MFC串口通信编程详解
VC MFC串口通信编程详解
在用ReadFile和WriteFile读写串行口时,需要考虑超时问题.超时的作用是在指定的时间内没有读入或发送指定数量的字符,ReadFile或WriteFile的操作仍然会结束.
要查询当前的超时设置应调用GetCommTimeouts函数,该函数会填充一个
COMMTIMEOUTS结构.调用SetCommTimeouts可以用某一个COMMTIMEOUTS结构的内容来设置超时.
读写串口的超时有两种:间隔超时和总超时.间隔超时是指在接收时两个字符之间的最大时延.总超时是指读写操作总共花费的最大时间.写操作只支持总超时,而读操作两种超时均支持.用COMMTIMEOUTS结构可以规定读写操作的超时.
COMMTIMEOUTS结构的定义为:
typedef struct _COMMTIMEOUTS {
DWORD ReadIntervalTimeout;//读间隔超时
DWORD ReadTotalTimeoutMultiplier;//读时间系数
DWORD ReadTotalTimeoutConstant;//读时间常量
DWORD WriteTotalTimeoutMultiplier;//写时间系数
DWORD WriteTotalTimeoutConstant;//写时间常量
} COMMTIMEOUTS,*LPCOMMTIMEOUTS;
COMMTIMEOUTS结构的成员都以毫秒为单位.总超时的计算公式是:
总超时=时间系数×要求读/写的字符数+时间常量
例如要读入10个字符,那么读操作的总超时的计算公式为:
读总超时=ReadTotalTimeoutMultiplier×10+ReadTotalTimeoutConstant
可以看出:间隔超时和总超时的设置是不相关的,这可以方便通信程序灵活地设置各种超时.
如果所有写超时参数均为0,那么就不使用写超时.如果ReadIntervalTimeout为0,那么就不使用读间隔超时.如果ReadTotalTimeoutMultiplier和
ReadTotalTimeoutConstant 都为0,则不使用读总超时.如果读间隔超时被设置成MAXDWORD并且读时间系数和读时间常量都为0,那么在读一次输入缓冲区的内容后读操作就立即返回,而不管是否读入了要求的字符.
在用重叠方式读写串口时,虽然ReadFile和WriteFile在完成操作以前就可能返回,但超时仍然是起作用的.在这种情况下,超时规定的是操作的完成时间,而不是ReadFile和WriteFile的返回时间.
配置串口的示例:
SetupComm(hCom,1024,1024);//输入缓冲区和输出缓冲区的大小都是1024 COMMTIMEOUTS TimeOuts;
//设定读超时
TimeOuts.ReadIntervalTimeout=1000;
TimeOuts.ReadTotalTimeoutMultiplier=500;
TimeOuts.ReadTotalTimeoutConstant=5000;
//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier=500;
TimeOuts.WriteTotalTimeoutConstant=2000;
SetCommTimeouts(hCom,&TimeOuts);//设置超时
DCB dcb;
GetCommState(hCom,&dcb);
dcb.BaudRate=9600;//波特率为9600
dcb.ByteSize=8;//每个字节有8位
dcb.Parity=NOPARITY;//无奇偶校验位
dcb.StopBits=TWOSTOPBITS;//两个停止位
SetCommState(hCom,&dcb);
PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
你可能喜欢
- c++经典代码大全
- MFC入门教程
- 串口通信编程
- VB高级编程
- VB控件大全
- API函数
- 工程电路
- Visual_C++MFC入门教程83页
- Visual_C++MFC入门教程84页
- MFC入门教程doc75页
- C++_MFC入门教程75页
- Visual C++MFC入门教程 + 控件说明43页
- VC MFC入门教程85页
- 基于MatlabGUI的串口通信编程实现4页
- Delphi 串口 通信 编程10页
- C#中串口通信编程2页
- 上位机串口通信编程51页
- PC与PLC的串口通信及编程实现4页
- 《Visual C++ Turbo C串口通信编程实践(第2版)》串口通信初学者学习方法建议2页
- 《VB高级编程》理论课程教学大纲6页
- VB高级编程48页
- VB高级编程论文10页
- VB高级编程初探(子类技术SUBCLASS与消息捕获)8页
- VB高级编程100例54页
- VB高级编程论文10页
- VB控件大全属性详解 OLE容器3页
- VB控件大全属性详解 组合框3页
- VB控件大全属性详解 树状视图3页
- VB控件大全属性详解 平面滚动条2页
- VB控件大全属性详解 命令按钮3页
- VB控件大全属性详解 直线2页
- VB使用Win32 API函数入门20页
- Win32 API 函数大全使用速查60页
- 常用API函数16页
- 用API函数控制鼠标2页
- API函数_超强HOOK技术5页
- 利用API函数实现VB特殊窗体的两种方法3页
- 电气工程师_电路基础91页
- 电气工程师_电路的分析方法81页
- 20种工程电路7页
- 工程电路分析答案(英文版)15页
- 工程电路分析答案(英文版)34页
- 工程电路分析答案(英文版)19页


