vc中实现串行通信的编程技术new

vc中实现串行通信的编程技术new

ID:19678724

大小:40.00 KB

页数:6页

时间:2018-10-04

vc中实现串行通信的编程技术new_第1页
vc中实现串行通信的编程技术new_第2页
vc中实现串行通信的编程技术new_第3页
vc中实现串行通信的编程技术new_第4页
vc中实现串行通信的编程技术new_第5页
资源描述:

《vc中实现串行通信的编程技术new》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、在工业控制中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。本文将介绍在Windows平台下串行通信的工作机制和用VisualC++设计串行通信程序的编程方法及通信方式。VC中实现串行通信的编程技术以下我们将介绍VC中几种实现串行通信的编程技术:利用VC++的标准通信函数利用VC++的标准通信函数_inp和_outp可实现串口通信。下面是一个串口初始化的程序:voidinit_com(PORT){chari;outp(PORT+3,0x80);outp(PORT,0x0C);outp(PORT+1,

2、0);outp(PORT+3,0x3a);outp(PORT+3,0x03);i=inp(PORT+5)&&0xfe;outp(PORT+5,i);}使用串行通信控件MSComm串行通信控件MSCOmm32.OCX提供了使用RS-232来进行数据通信的所有协议,VC为该控件提供了标准的事件处理函数、过程,并通过属性和方法提供了串行通信的设置。它使用户能够方便地访问Windows串行通信驱动程序的大多数特性,包括输入、输出缓冲区的大小及决定何时使用流控制命令挂起数据传输等。在ClassWizard中为新创建的通信控件定义成员对象(CMSCom

3、mm_Serial),通过该对象便可以对串口属性进行设置,MSComm控件共有27个属性。以下是通过设置控件属性对串口进行初始化的实例:BOOLCSampleDlg::PortOpen(){BOOLm_Opened;......m_Serial.SetCommPort(2);//指定串口号m_Serial.SetSettings("4800,N,8,1");//通信参数设置m_Serial.SetInBufferSize(1024);//指定接收缓冲区大小m_Serial.SetInBufferCount(0);//清空接收缓冲区m_Ser

4、ial.InputMode(1);//设置数据获取方式m_Serial.SetInputLen(0);//设置读取方式m_Opened=m_Serail.SetPortOpen(1);//打开指定的串口returnm_Opened;}打开所需串口后,我们需要考虑串口通信的时机。在接收或发送数据过程中,可能需要监视并响应一些事件和错误,所以事件驱动是处理串行端口交互作用的一种非常有效的方法。使用OnComm事件和CommEvent属性捕捉并检查通信事件和错误的值。发生通信事件或错误时将触发OnComm事件,CommEvent属性的值将被改变,

5、应用程序通过检查CommEvent属性值并作出相应的反应。使用API函数控件虽然简单易用,但由于必须拿到对话框中使用,在一些需要在线程中实现通信的应用场合下,控件的使用显得捉襟见肘。API是附带在Windows内部的一个极其重要的组成部分。Windows的32位API主要是一系列很复杂的函数和消息集合。它可以看作是Windows系统为在其下运行的各种开发系统提供的开放式通用功能增强接口。通信程序在CreateFile处指定串口设备及相关的操作属性,再返回一个句柄,该句柄将被用于后续的通信操作,并贯穿整个通信过程。串口打开后,其属性被设置为默

6、认值,根据具体需要,通过调用GetCommState(hComm,&&dcb)读取当前串口设备控制块DCB设置,修改后通过SetCommState(hComm,&&dcb)将其写入。运用ReadFile()与WriteFile()这两个API函数实现串口读写操作,若为异步通信方式,两函数中最后一个参数为指向OVERLAPPED结构的非空指针,在读写函数返回值为FALSE的情况下,调用GetLastError()函数,返回值为ERROR_IO_PENDING,表明I/O操作悬挂,即操作转入后台继续执行。此时,可以用WaitForSingleO

7、bject()来等待结束信号并设置最长等待时间,举例如下:BOOLbReadStatus;bReadStatus=ReadFile(m_hIDComDev,buffer,dwBytesRead,&&dwBytesRead,&&m_OverlappedRead);if(!bReadStatus){if(GetLastError()==ERROR_IO_PENDING){WaitForSingleObject(m_OverlappedRead.hEvent,1000);return((int)dwBytesRead);}return(0);}r

8、eturn((int)dwBytesRead);多线程下实现串行通信Windows内部的抢先调度程序在活动的线程之间分配CPU时间,Windows区分两种不同类型的线程,一种是用

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。