编辑: 飞翔的荷兰人 | 2018-11-22 |
李成贵(1964一),河北荆州人,北京航空航天大学副教授,博士,主要研究方向为微纳米表面测量和表征技 术、计算机测量和控制、智能仪器等. 万方数据 第2l卷第4期 谷庆华等:基于Vc++和数据库的实时温度监控系统软件的开发
21 符数,缺省值为0,表示读取接收缓冲区中的全部内 容;
5)Input属性:读入并清除接收缓冲区的字符;
6)InBufferCount属性:返回接收缓冲区已接收 到的字符数,通过置0,可清空接收缓冲区;
7)Output属性:将发送的字符串或数据写到发 送缓冲区;
8)InputMode属性:定义Input属性获得的数据 的类型,0――文本,1――二进制;
9)Rthreshold属性:引发一个接收数据的 OnComm事件,接收缓冲区中所需存在的最少字节 数;
10)SThreshold属性:引发一个传送数据的 OnComm事件,接收缓冲区中所需存在的最少字节 数. 通常在一些比较复杂和需要在线程中实现通 信的应用场合,该控件的使用显得不够灵活. Windows API是Windows系统和Windows应用程序 间的标准通信接121,它由一系列的例程构成,应用 程序通过调用这些例程来请求操作系统完成一些 低级的服务.使用其编写串口程序具有很大的灵 活性,配合Win32的重叠I/0操作和多线程设计,可 以编写出高效灵活的通信程序,可充分弥补API函 数的不足.但通常对编程人员要求比较高,需要掌 握较多的底层API函数和较为复杂的数据结构. 一般编程步骤如下: 1)打开串口:使用CreateFile函数;
2)建立串口通信事件:使用CreateEvent函数;
3)初始化串口,设置串口参数:使用 SetCommState函数;
4)建立读数据的线程:使用ReadFile函数,如 果要检测通信状态,如CTS信号、Rinsh等,则使用 SetCommMask、 WaitCommEvent、 ClearCommEvent、 GetCommModemStatus函数;
5)写数据:使用WriteFile函数;
6)结束关闭串口:若程序中打开其他的线程, 则先终止线程,然后停止WaitCommEvent的等待,使用CloseHandle()函数关闭端口.平时程序会停留 在WaitCommEvent的等待中,当要终止线程的时候, 程序需从WaitCommEvent中退出. CSefialPort类是由Remon Spekreijse提供的免费 串151类,由底层API函数编写而成,可以在http:// www.codegum.com/network/serialport.shtml网站中获 得其源代码.CSerialPort类是一个非常好用的多线 程串口类,支持连接的(非MODEM)串口编程操作, 用它可以很轻松的完成一般串口编程任务,编写的 程序在windows 98/NT/2000/XP操作系统下可很好 地运行.和MSComm控件相比,这个类打包时不需 要加入其他的文件,而且函数是开放、透明的,允许 用户进行改造,编程者可以从烦心的框架编写中解 脱出来,将更多的精力集中在串行通信协议的编制 及数据的处理上.其常用的函数有: 1)串口初始化函数InitPort(),用于设置串口 的通信参数、需要打开的串口号、波特率、奇偶校验 位、数据位、停止位;
2)启动串口通信监测线程函数StartMonitoring (),用来启动串口监测线程;
3)暂停或停止监测线程函数StopMonitoring(), 用来暂停或停止串口监测;
4)关闭串口函数ClosePort(),用于关闭串口、 释放资源;
5)写串口函数WfiteToPort(),用于通过串口发 送字符. 本文分别采用win32 API函数,MSComm控件和 CSerialPort类结合Access 2000数据库开发串口监控 系统软件. 2系统软件设计 2.1用win32 API函数和Access 2000数据库开发 串口通信监控软件 本程序是按照事件驱动方式进行数据的读写, 同时利用了多线程,将串口数据的读写放在一个用 户自定义的线程中完成,在开始监控时打开这个有 关串口通信的线程,串口的创建、设置、读写都在这 个线程中进行.步骤如下: 1)打开串口 HANDLE idComDev;