首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

金刚石合成控制系统中多串口通信技术的设计与实现 02

金刚石合成控制系统中多串口通信技术的设计与实现 02

3 VC串口通信的设计与实现
笔者在Windows系统下,采用面向对象的方法和多线程技术,并使用Visual C6.0作为编程工具开发了一个通用串口通信类CSerialPort,该CSerialPort类封装了串口通信的基本数据和方法,下面给出CSerialPort类的简单介绍。


CSerialPort类头文件中的主要成员变量和成员函数如下:
Class CSerialPort
{
private:
HANDEL m_hPort;
DCB m_Dcb;
COMMTIMEOUTS m_TimeOuts;
DWORD m_Error;
Public:
CSerialPort();   //构造函数
virtual~CSerialPort();   //析构函数
//InitPort() 函数实现初始化串口
BOOL InitPort(
char* str=“com1”,
UINT BaudRate=9600,
UINT Parity=0,
UINT ByteSize=8,
UINT StopBits=1,
UINT ReadMultiplier=0,
UINT ReadConstant=0,
UINT WriteMultiplier=10,
UINT WriteConstant=1000);
DCB GetDCB(); //获得DCB参数
//SetDCB()函数实现设置DCB参数
BOOL SetDCB(
UINT BaudRate=9600,
UINT Parity=0,
UNIT ByteSize=8,
UINT StopBits=1);
// GetTimeOuts()函数获得超时参数
COMMTIMEOUTS GetTimeOuts();
// SetTimeOuts()函数设置超时参数
BOOL SetTimeOuts(
UINT ReadMultiplier=0,
UINT ReadConstant=0,
UINT WriteMultiplier=10,
UINT WriteConstant=1000);
// WritePort()函数实现写串口操作
void WritePort(HANDLE port,CString);
CString ReadPort(HANDLE port); //读串口操作
BOOL ClosePort(); //关闭串口
};
下面对该类的重要函数作以说明:
(1)在构造函数CSerialPort()中已对该类的数据成员进行了初始化操作。
(2)初始化串口函数InitPort()函数用于完成串口的初始化工作,包括打开串口、设置DCB参数、设置通信的超时时间等。
打开串口使用CreateFile()函数,其中InitPort()函数中的第一个参数为要打开的串口,通常将该参数赋给CreateFile()函数中的第一个参数;设置DCB参数应调用该类中的SetDCB()函数,并将InitPort()函数中的第2至第5参数赋给SetDCB()函数;设置通信的超时时间应调用该类中的SetTimeOuts()函数,并将InitPort()函数中的第6至第9参数赋给SetTimeOuts()函数。另外,该串口是系统资源,应该根据不同要求对其安全属性进行设置。


(3)SetDCB()函数用于设置DCB参数,包括传输的波特率、是否进行奇偶校验、每字节长度以及停止位等。
(4)SetTimeOuts()函数用于设定访问的超时值,根据设置的值可以计算出总的超时间隔。前面两个参数用来设置读操作总的超时值,后面两个参数用来设置写操作总的超时值。
(5)WritePort()函数用来完成向串口写数据。由于该系统需要对多个串口进行通信,所以首先应把串口号作为参数传递给该函数;接着该函数把按参数传递过来的、要发送的数据进行编码(也就是加入校验,这样能减少误码率),然后再调用Windows API函数WriteFile()并把数据发送到串口。
(6)ReadPort()函数用来完成从串口读数据,由于有多个串口,所以应把串口作为参数传递进来,然后调用API函数ReadFile(),并把下位机发送到串口,数据读出来放到缓存里面,接着对数据进行处理以将其变换成字符串(CString)类型并返回。
(7)GetDCB()函数主要用于获得串口的当前配置,可通过调用API函数GetCommState()来实现,然后再进行相应的处理。
(8)GetTimeOuts()函数用于获得访问超时值。
(9)ClosePort()函数可用来关闭串口。因为在Windows系统中串口是系统资源,因而在不用时,应将其释放掉,以便于其它进程对该资源的使用
返回列表