基于自定义多线程串口类的串行通信.docVIP

基于自定义多线程串口类的串行通信.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于自定义多线程串口类的串行通信   【摘要】本文介绍了在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,

文档评论(0)

you-you + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档