- 2
- 0
- 约3.74千字
- 约 8页
- 2017-11-03 发布于福建
- 举报
基于自定义多线程串口类串行通信
基于自定义多线程串口类串行通信 【摘要】本文介绍了在VC++环境下,通过自定义串行通信类SerialPort更加灵活的实现监控系统中上位机和下位机之间的数据传输。
【关键词】串行通信类,VC++,API函数,监控系统
串行通信作为一种灵活方便可靠的通信方式,在工业控制领域仍不失为有效的通信手段。工业控制领域(如DCS系统),经常涉及到串行通信问题。为了实现微机和单片机之间的数据交换,人们用各种不同方法实现串行通信。Windows 平台已成为当今工控管理系统的主流平台,在工业领域得到广泛应用,因此开发Windows 环境下串行通信技术就显得日益重要。应用VC++开发串行通信中,自己定义串行通信类具有最好的灵活性,只要理解这种类的几个成员函数,就能方便的使用。
1、串行通信类SerialPort
Windows 9x系统提供的开放式通用功能增强接口Win32 API(应用编程接口)是一个复杂函数、消息的集合。Windows 9x下把对串口和其它通信设备的支持与基本输入输出驱动程序集成为一体,串口的打开、关闭、读取和写入所用的函数与操作文件的函数相同,系统通过被称为设备控制块DCB的数据结构对串行口和串口通信驱动程序进行配置。Win32串行通信编程的基本步骤如下:首先,打开与外设相连的串口,并设置接收和发送的缓冲区大小;然后对串口进行初始化,也就是跟据通信协议(包括通信信号的起始终止,数据的长度和格式等)对通信控制模块(BCD结构)进行设置;接下来进行读写操作,并为了数据的正确传输而对通信错误进行检查和必要的处理;最后在串行通信结束后,关闭所有串口。
为了简化使用串行通信,对用于串行通信的Windows API函数进行封装,构成串行通信类CSerial。CSerial.h中程序如下:
class CSerial
{
public:
CSerial(); // 类构造函数,不带参数,负责初始化所有类成员变量
~CSerial(); // 类析构函数
BOOL Open( int nPort = 2, int nBaud = 9600 ); // Open这个成员函数打开通信端口。带两个参数,第一个是埠号,有效值是1到4,第二个参数是波特率,返回一个布尔量
BOOL Close( void ); // Close函数关闭通信端口。类析构函数调用这个函数,所以可不用显式调用这个函数
int ReadData( void *, int ); //函数从端口接收缓冲区读入数据。第一个参数是void*缓冲区指针,资料将被放入该缓冲区;第二个参数是个整数值,给出缓冲区的大小
int SendData( const char *, int ); //函数把数据从一个缓冲区写到串行端口。它所带的第一个参数是缓冲区指针,其中包含要被发送的资料;这个函数返回已写到端口的实际字节数。
int ReadDataWaiting( void ); 函数返回等待在通信端口缓冲区中的数据,不带参数
BOOL IsOpened( void ) { return( m_bOpened ); } // 判断串口是否打开
protected:
BOOL WriteCommByte( unsigned char ); // 发送字节
HANDLE m_hIDComDev; // 通信设备句柄
OVERLAPPED m_OverlappedRead, m_OverlappedWrite; // 重叠操作结构体
BOOL m_bOpened; // 串口打开标志
HANDLE hPostEvent; // 协调线程的事件对象
};
实现文件Serial.cpp 中部分函数源代码:
1、初始化所有类成员变量
CSerial::CSerial()
{
memset( m_OverlappedRead, 0, sizeof( OVERLAPPED ) );
memset( m_OverlappedWrite, 0, sizeof( OVERLAPPED ) );
m_hIDComDev = NULL;
m_bOpened = FALSE;
}
2、串口初始化函数
BOOL CSerial::Open( int nPort, int nBaud )
{
if( m_bOpened ) return( TRUE );
char szPort[15];
char szComParams[50];
DCB dcb;
wsprintf( szPort, “
您可能关注的文档
最近下载
- 2025年海南省初中学业水平考试地理卷试题真题(含答案).pdf VIP
- 腹横肌平面阻滞讲解学习.ppt VIP
- 中职英语(新语文版)基础模块2词汇表.pdf VIP
- 排水管道检测与评估课件 项目3 传统检查方法.pptx VIP
- 膈肌起搏器课件.pptx VIP
- QTZ63(PT5210B)塔式起重机说明书.pdf
- 流畅英语口语教程(第二版)第4册引进课后习题答案.pdf
- 放射物理与防护放射物理与防护第六章-常用的辐射量和单位第二节.ppt VIP
- 《民航飞机航电设备故障检测与诊断》课件 第一章 航电设备故障诊断与维修基础.pdf
- 2026年春季新学期开学德育工作副校长讲话:以自律诠释成长,以行动彰显文明.docx
原创力文档

文档评论(0)