Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16500896
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:08:24

下载本文示例代码
          推荐:深入浅出Visual C 串口编程  摘 要 介绍了一种简易的Windows平台下基于串口的数据采集系统。系统上层软件采用简单的非重叠I/O模式,通过合理的设置,有效地解决了I/O读写阻塞问题。  关键词 串行通讯,非重叠I/O,数据采集  串行通讯因其线路简单,开发相对比较容易,所以经常应用于各种监控、测试和自动化设备中。在DOS环境下,上层软件可以直接对端口进行读写,但是在Windows环境下,不能直接对硬件进行读写,而只能调用一系列的系统函数。这对上层程序的开发带来了一定的复杂性。本文给出了Windows环境下,对串口进行读写的一种简化步骤,降低了程序的复杂性。   1、Windows环境下串口读写的一般过程  在现行32位的Windows系统中,串行通信是作为文件读写来处理的。其串口读写的一般过程为:    1.1 打开串口  在Windows环境下,打开串口使用CreateFile函数,其原型为: HANDLE CreateFile(LPCTSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSA,DWORD dwCreate,DWORD dwFlagsAndAttributes,HANDLE hTemplate);  其中比较重要的几个参数是:  ﹥ lpFileName —— 为端口名称,如”COM1”,”COM2”等等;  ﹥dwDesiredAccess —— 希望对串口进行何种操作,可为GENERIC_READ(读)、GENERIC_WRITE(写)或两者的位或;  ﹥ dwCreate —— 必须设置为OPEN_EXISTING;  ﹥ dwFlagsAndAttributes —— 可为FILE_FLAG_ OVERLAPPED (重叠模方式)或NULL(非重叠模式);  ﹥ dwShareMode和hTemplate参数在打开串口时必须为NULL;  1.2 配置串口  包括初始化端口、设置DCB结构和设置超时值。  使用SetupComm函数初始化端口,设置端口的读写缓冲区大小。  设置DCB结构包括波特率、字节长度、校验位、停止位等等。使用SetCommState函数。  设置超时值使用SetCommTimeouts函数。下一节以下将对该函数做进一步说明。  1.3 串口读写  Win32环境下对串口的读写采用ReadFile和WriteFile函数。读写方式有两种:重叠模式和非重叠模式(或者称为异步模式和同步模式)。  1.4 关闭串口  串口使用完毕,使用CloseHandle函数关闭即可。  2、重叠模式和非重叠模方式  一般认为非重叠I/O模式比较简单,但是会占用大量I/O时间,而重叠I/O模式比较灵活,但是编程复杂。  非重叠模式下,读写函数知道执行完毕才返回,因而会阻塞同步执行的其它线程。而在重叠模式下,读写函数会立即返回,I/O操作在后台进行,这样线程就可以处理其它事务。  重叠模式需要监测和处理通信事件的状态,给编程带来了很大复杂性。其实,通过对端口进行合理的设置,编程简单的非重叠模式,也可以发挥出重叠模式的优点。  3、优化的非重叠模式  在前面提到,在串口读写之前,需要设置读写超时值。使用的函数是SetCommTimeouts,其原型为: BOOL SetCommTimeouts(HANDLE hFile,LPCOMMTIMEOUTS lpTimeouts);  其中第二个参数是一个指向串口超时结构(COMMTIMEOUTS)的指针。该结构指明了串口读写的各种超时间隔值。当设置结构成员ReadIntervalTimeout为MAXDWORD,并且同时设置成员ReadTotalTimeoutConstant以及成员ReadTotalTimeoutMultiplier为0时,ReadFile函数会立即返回,即使没有读入任何字节。这样就不会引起任何阻塞了。共2页。 1 2 :           推荐:深入浅出Visual C 串口编程  摘 要 介绍了一种简易的Windows平台下基于串口的数据采集系统。系统上层软件采用简单的非重叠I/O模式,通过合理的设置,有效地解决了I/O读写阻塞问题。  关键词 串行通讯,非重叠I/O,数据采集  串行通讯因其线路简单,开发相对比较容易,所以经常应用于各种监控、测试和自动化设备中。在DOS环境下,上层软件可以直接对端口进行读写,但是在Windows环境下,不能直接对硬件进行读写,而只能调用一系列的系统函数。这对上层程序的开发带来了一定的复杂性。本文给出了Windows环境下,对串口进行读写的一种简化步骤,降低了程序的复杂性。   1、Windows环境下串口读写的一般过程  在现行32位的Windows系统中,串行通信是作为文件读写来处理的。其串口读写的一般过程为:    1.1 打开串口  在Windows环境下,打开串口使用CreateFile函数,其原型为: HANDLE CreateFile(LPCTSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSA,DWORD dwCreate,DWORD dwFlagsAndAttributes,HANDLE hTemplate);  其中比较重要的几个参数是:  ﹥ lpFileName —— 为端口名称,如”COM1”,”COM2”等等;  ﹥dwDesiredAccess —— 希望对串口进行何种操作,可为GENERIC_READ(读)、GENERIC_WRITE(写)或两者的位或;  ﹥ dwCreate —— 必须设置为OPEN_EXISTING;  ﹥ dwFlagsAndAttributes —— 可为FILE_FLAG_ OVERLAPPED (重叠模方式)或NULL(非重叠模式);  ﹥ dwShareMode和hTemplate参数在打开串口时必须为NULL;  1.2 配置串口  包括初始化端口、设置DCB结构和设置超时值。  使用SetupComm函数初始化端口,设置端口的读写缓冲区大小。  设置DCB结构包括波特率、字节长度、校验位、停止位等等。使用SetCommState函数。  设置超时值使用SetCommTimeouts函数。下一节以下将对该函数做进一步说明。  1.3 串口读写  Win32环境下对串口的读写采用ReadFile和WriteFile函数。读写方式有两种:重叠模式和非重叠模式(或者称为异步模式和同步模式)。  1.4 关闭串口  串口使用完毕,使用CloseHandle函数关闭即可。  2、重叠模式和非重叠模方式  一般认为非重叠I/O模式比较简单,但是会占用大量I/O时间,而重叠I/O模式比较灵活,但是编程复杂。  非重叠模式下,读写函数知道执行完毕才返回,因而会阻塞同步执行的其它线程。而在重叠模式下,读写函数会立即返回,I/O操作在后台进行,这样线程就可以处理其它事务。  重叠模式需要监测和处理通信事件的状态,给编程带来了很大复杂性。其实,通过对端口进行合理的设置,编程简单的非重叠模式,也可以发挥出重叠模式的优点。  3、优化的非重叠模式  在前面提到,在串口读写之前,需要设置读写超时值。使用的函数是SetCommTimeouts,其原型为: BOOL SetCommTimeouts(HANDLE hFile,LPCOMMTIMEOUTS lpTimeouts);  其中第二个参数是一个指向串口超时结构(COMMTIMEOUTS)的指针。该结构指明了串口读写的各种超时间隔值。当设置结构成员ReadIntervalTimeout为MAXDWORD,并且同时设置成员ReadTotalTimeoutConstant以及成员ReadTotalTimeoutMultiplier为0时,ReadFile函数会立即返回,即使没有读入任何字节。这样就不会引起任何阻塞了。共2页。 1 2 : 下载本文示例代码


Windows平台下基于串口的数据采集系统Windows平台下基于串口的数据采集系统Windows平台下基于串口的数据采集系统Windows平台下基于串口的数据采集系统Windows平台下基于串口的数据采集系统Windows平台下基于串口的数据采集系统Windows平台下基于串口的数据采集系统Windows平台下基于串口的数据采集系统Windows平台下基于串口的数据采集系统Windows平台下基于串口的数据采集系统Windows平台下基于串口的数据采集系统Windows平台下基于串口的数据采集系统Windows平台下基于串口的数据采集系统Windows平台下基于串口的数据采集系统Windows平台下基于串口的数据采集系统
阅读(105) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~