用户中心

资讯 > 自动化软件

串行通信的编程方法

2007.04.03阅读 2870

  一、利用vc++标准通信函数_inp和_outp可实现串口通信

  下面是串口初始化的程序

  void init_com(PORT)

  {char i;

  outp(PORT+3,0x80);

  outp(PORT,0x0C);

  outp(PORT+1,0);

  outp(PORT+3 ,0x3a);

  outp(PORT+3 ,0x03);

  i=inp(PORT+5) && 0xfe;

  outp(PORT+5www.cechina.cn,i);

  }

  二、使用串行通信控件MSComm

  串行通信控件MSCOmm32.OCX提供了使用RS-232来进行数据通信的所有协议,VC为该控件提供了标准的事件处理函数、过程,并通过属性和方法提供了串行通信的设置。它使用户能够方便地访问Windows串行通信驱动程序的大多数特性,包括输入、输出缓冲区的大小及决定何时使用流控制命令挂起数据传输等。

  在ClassWizard中为新创建的通信控件定义成员对象(CMSComm m_Serial),通过该对象便可以对串口属

性进行设置,MSComm控件共有27个属性。以下是通过设置控件属性对串口进行初始化的实例:

  BOOL CSampleDlg:: PortOpen()

  { BOOL m_Opened;

  ......

  m_Serial.SetCommPort(2); // 指定串口号

  m_Serial.SetSettings("4800,N,8,1");// 通信参数设置

  m_Serial.SetInBufferSize(1024);// 指定接收缓冲区大小

  m_Serial.SetInBufferCount(0);// 清空接收缓冲区

  m_Serial.InputMode(1);// 设置数据获取方式

  m_Serial.SetInputLen(0);// 设置读取方式

  m_Opened=m_Serail.SetPortOpen(1);// 打开指定的串口

  return m_Opened;}

  打开所需串口后,我们需要考虑串口通信的时机。在接收或发送数据过程中,可能需要监视并响应一些事件和错误,所以事件驱动是处理串行端口交互作用的一种非常有效的方法。使用OnComm事件和CommEvent属性捕捉并检查通信事件和错误的值。发生通信事件或错误时将触发OnComm事件,CommEvent属性的值将被改变CONTROL ENGINEERING China版权所有,应用程序通过检查CommEvent属性值并作出相应的反应。

  三、使用API函数

  控件虽然简单易用,但由于必须拿到对话框中使用,在一些需要在线程中实现通信的应用场合下,控件的使用显得捉襟见肘。API是附带在Windows内部的一个极其重要的组成部分。Windows的32位API主要是一系列很复杂的函数和消息集合。它可以看作是Windows系统为在其下运行的各种开发系统提供的开放式通用功能增强接口。

  通信程序在CreateFile处指定串口设备及相关的操作属性,再返回一个句柄,该句柄将被用于后续的通信操作控制工程网版权所有,并贯穿整个通信过程。串口打开后控制工程网版权所有,其属性被设置为默认值,根据具体需要,通过调用GetCommState(hComm控制工程网版权所有,&&dcb)读取当前串口设备控制块DCB设置,修改后通过SetCommState(hComm控制工程网版权所有,&&dcb)将其写入。运用ReadFile()与WriteFile()这两个API函数实现串口读写操作,若为异步通信方式,两函数中最后一个参数为指向OVERLAPPED结构的非空指针,在读写函数返回值为FALSE的情况下,调用GetLastError()函数,返回值为ERROR_IO_PENDING,表明I/O操作悬挂,即操作转入后台继续执行。此时,可以用WaitForSingleObject()来等待结束信号并设置最长等待时间,举例如下:

  BOOL bReadStatus;

  bReadStatus = ReadFile( m_hIDComDev, buffer,

  dwBytesRead, &&dwBytesRead, &&m_OverlappedRead );

  if(!bReadStatus){

  if(GetLastError()==ERROR_IO_PENDING){

  WaitForSingleObject(m_OverlappedRead.hEvent,1000);

  return ((int)dwBytesRead);}

  

版权声明:版权归控制工程网所有,转载请注明出处!

频道推荐

关于我们

控制工程网 & CONTROL ENGINEERING China 全球工业控制、自动化和仪器仪表领域的先锋媒体

CE全球

联系我们

商务及广告合作
任小姐(北京)                 夏小姐(上海)
电话:010-82053688      电话:18616877918
rendongxue@cechina.cn      xiashuxian@cechina.cn
新闻投稿:王小姐

关注我们的微信

关于我们 | 网站地图 | 联系我们
© 2003-2020    经营许可编号:京ICP证120335号
公安机关备案号:110102002318  服务热线:010-82053688