在VC++6.0环境下实现汽车点火线圈测试台的串口通信-PLC技术网(www.plcjs.com)-可编程控制器技术门户


在VC++6.0环境下实现汽车点火线圈测试台的串口通信

 (点击题目可以在互联网中搜索该题目的相关内容)
日期:2006-4-30 10:18:27     来源:本文摘自《PLC&FA》   作者: 点击:
点击【 大  中  小 】, 可 以 选 择 字 体的大小,以便 你 阅读.

1  引言
    点火线圈是汽车点火系统的核心部件,对整个点火系统的工作性能甚至是整个机车的工作性能都有着重要影响。因此采用先进的测试技术对点火线圈进行测试,是我们非常关注的问题。本系统采用VC++的编程平台很好的解决了对点火线圈系统产生的被测信号的采集问题。

    整个平台以PC机作为上位机,测试点火线圈性能和各项参数所必需的点火电压源和控制点火时间的信号源均是程控的。电压源和信号源的参数均由用户输入给计算机,由计算机通过串口通信的方式发送给单片机。利用数据采集卡从现场采集初级、次级线圈的电压和电流。采集卡通过ISA槽与PC机相连,系统框图如图1所示。本测试台的功能强大,可以测试双头、四头、六头等多种类型的汽车点火线圈,并且线圈带不带模块都可以进行测试。PC机通过操作同样连在总线上的IO接口板来实现不同的逻辑组合以选择测量参数。在上述过程中,PC机与单片机的通讯可以采用基于VC++的串口通信方式来实现。


 图1      系统框图


    利用VC++实现串口通信的方法有多种,如:利用Windows API提供的一系列标准串口通信函数、利用MSCommActiveX控件等。我们可以直接调用Window API中的一系列标准的串口通信函数,直接用这些标准函数来完成Windows下面的串口通信编程。我们也可以利用在VC++系统下提供了串口通信功能完备的ActiveX控件即MSComm控件(Microsoft Communication Control俗称电话盒)它使我们比较容易的写出所需要的串口通信技术,下面就这两种方法分别结合在汽车点火系统测试这一实例进行具体分析。

2  利用WindowsAPI函数控制
    利用API函数实现对RS232串口通信的访问,在实现控制通信中,我们必定要调动3个函数来实现对串口的控制:
CreatFile()函数实现串口初始化并打开串口;
ReadFile()函数接收串口传递过来的二进制流并返回数据到接收缓冲区中
WriteFile()把应用程序发出的指令送到发送缓冲区以供串口接收

2.1 打开串口
以下程序用于以同步方式打开串口COM1;
HANDLE hCom;
DWORD dwError
Hcomm=CreateFile(“COM1”,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING, 0, NULL);
if (hComm==(HANDLE)0Xffff)
{dwError=GetLastError();
 MessageBox(dwError);
}

2.2 配置串口
    配置串口是通过改变设备控制块DCB(Device Control Block)的成员变量值来实现的,程序实现如下:
DCB dcb
dcb.BaudRate=1200;   //波特率为1200bps
dcb.ByteSize=8;      //数据位8位
dcb.Parity=EVENPARTTY;  //有校验
dcb.StopBits=ONESTOPRTT; //一个停止位
SetCommState(hCom,&dcb);

2.3 数据读写
    对串口进行读写与对文件进行读写所用的函数相同,具体为可采用查询、同步、异步或事件驱动等方法对串口进行读写所用函数如下所示:

bReadStatus=ReadFile(hCom,buffer,length,&length &m_lpOverlapped);
if(!bReadStatus)
{if(GetLastError()=ERROR_IO_PENDING)
{WaitForSingleObject(m_lpOverlapped,hEvent,1000);
      return((char)length);}
return 0; }

//写入函数程序为:

bWriteStatus=WriteFile(hCom,buffer,length,&length,&m_lpOverlapped)
if(!bWriteStatus)
{if(GetLastError()=ERROR_IO_PENDING)
{WaitForSingleObject(m_lpOverlapped,
hEvent,1000);
      return((char)length);}
return 0; }

3  利用MsCommActiveX控件
3.1 向工具箱中添加MSComm控件
    启动VC++利用MFC Appwizard(EXE)建立一个新的项目文件,在过程中一定要把ActiveX Control复选框选中,表示程序支持ActiveX控件,其他按缺省设置,然后单击Project菜单→Add to project→Components and controls→Registered ActiveX Controls 选择Components:Microsoft Communication Control,version6.0插入到当前的workplace中,此时便在工具箱里面添加了CMSComm控件,在类CMSComm中我们可以看到MSComm控件的属性,相应文件为MSComm.h和MSComm.cpp。

本新闻共3页,当前在第11 2  3  

上一篇: 基于ODBC的iFIX工控组态软件与关系数据库Oracle通讯研究
下一: 基于CAN总线的双容水箱控制系统