1 引言
WWW_PLC※JS_COM-PmLC-技.术_网
点火线圈是汽车点火系统的核心部件,对整个点火系统的工作性能甚至是整个机车的工作性能都有着重要影响。因此采用先进的测试技术对点火线圈进行测试,是我们非常关注的问题。本系统采用VC++的编程平台很好的解决了对点火线圈系统产生的被测信号的采集问题。WW.W_PLCJS_COM-PLC-技.术_网
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
整个平台以PC机作为上位机,测试点火线圈性能和各项参数所必需的点火电压源和控制点火时间的信号源均是程控的。电压源和信号源的参数均由用户输入给计算机,由计算机通过串口通信的方式发送给单片机。利用数据采集卡从现场采集初级、次级线圈的电压和电流。采集卡通过ISA槽与PC机相连,系统框图如图1所示。本测试台的功能强大,可以测试双头、四头、六头等多种类型的汽车点火线圈,并且线圈带不带模块都可以进行测试。PC机通过操作同样连在总线上的IO接口板来实现不同的逻辑组合以选择测量参数。在上述过程中,PC机与单片机的通讯可以采用基于VC++的串口通信方式来实现。WWcW_PLCJS_COM-PLC-技.术_网
WW.W_PLCJS_COM-PLC-技.术_网
plcjs.技.术_网
图1 系统框图WWW_PLC※JS_COM-PmLC-技.术_网
WWW_PLCJS@_COM%-PLC-技.术_网
利用VC++实现串口通信的方法有多种,如:利用Windows API提供的一系列标准串口通信函数、利用MSCommActiveX控件等。我们可以直接调用Window API中的一系列标准的串口通信函数,直接用这些标准函数来完成Windows下面的串口通信编程。我们也可以利用在VC++系统下提供了串口通信功能完备的ActiveX控件即MSComm控件(Microsoft Communication Control俗称电话盒)它使我们比较容易的写出所需要的串口通信技术,下面就这两种方法分别结合在汽车点火系统测试这一实例进行具体分析。WWW.PLCJS.COM——可编程控制器技术门户
2 利用WindowsAPI函数控制
WWW.PLCJS.COM——可编程控制器技术门户
利用API函数实现对RS232串口通信的访问,在实现控制通信中,我们必定要调动3个函数来实现对串口的控制:WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
CreatFile()函数实现串口初始化并打开串口;WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
ReadFile()函数接收串口传递过来的二进制流并返回数据到接收缓冲区中WW.W_PLCJS_COM-PLC-技.术_网
WriteFile()把应用程序发出的指令送到发送缓冲区以供串口接收WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
2.1 打开串口WWW.PLCJS.COM——可编程控制器技术门户
以下程序用于以同步方式打开串口COM1;WWW_P※LCJS_CO※M-PLC-技-.术_网
HANDLE hCom;——可——编——程——控-制-器-技——术——门——户
DWORD dwErrorWWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
Hcomm=CreateFile(“COM1”,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING, 0, NULL);WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
if (hComm==(HANDLE)0Xffff)WWcW_PLCJS_COM-PLC-技.术_网
{dwError=GetLastError();WW.W_PLCJS_COM-PLC-技.术_网
MessageBox(dwError);WWW.PLCJS.COM——可编程控制器技术门户
}P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WWW_PL※CJS_COM-PLC-技.术_网
2.2 配置串口WWW_PLC※JS_COM-PmLC-技.术_网
配置串口是通过改变设备控制块DCB(Device Control Block)的成员变量值来实现的,程序实现如下:WWW_P※LCJS_CO※M-PLC-技-.术_网
DCB dcbWWW.PLCJS.COM——可编程控制器技术门户
dcb.BaudRate=1200; //波特率为1200bpsWWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
dcb.ByteSize=8; //数据位8位WWW_P※LCJS_CO※M-PLC-技-.术_网
dcb.Parity=EVENPARTTY; //有校验WWW_PLCJS_COM-PLC-技.术_网
dcb.StopBits=ONESTOPRTT; //一个停止位WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
SetCommState(hCom,&dcb);P.L.C.技.术.网——可编程控制器技术门户
WW.W_PLC※JS_C,OM-PL,C-技.术_网
2.3 数据读写WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
对串口进行读写与对文件进行读写所用的函数相同,具体为可采用查询、同步、异步或事件驱动等方法对串口进行读写所用函数如下所示:WWW_PLCJS_COM-PLC-技.术_网
…WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
bReadStatus=ReadFile(hCom,buffer,length,&length &m_lpOverlapped);plcjs.技.术_网
if(!bReadStatus)P.L.C.技.术.网——可编程控制器技术门户
{if(GetLastError()=ERROR_IO_PENDING)WWW_P※LCJS_COM-PLC-)技.术_网
{WaitForSingleObject(m_lpOverlapped,hEvent,1000);WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
return((char)length);}WW.W_PLCJS_COM-PLC-技.术_网
return 0; }WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
…P.L.C.技.术.网——可编程控制器技术门户
//写入函数程序为:WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
…WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
bWriteStatus=WriteFile(hCom,buffer,length,&length,&m_lpOverlapped)WW.W_PLC※JS_C,OM-PL,C-技.术_网
if(!bWriteStatus)WWcW_PLCJS_COM-PLC-技.术_网
{if(GetLastError()=ERROR_IO_PENDING)W1WW_P4LCJS_COM-PLC-技.术_网
{WaitForSingleObject(m_lpOverlapped,WWcW_PLCJS_COM-PLC-技.术_网
hEvent,1000);WWW_PLCJS@_COM%-PLC-技.术_网
return((char)length);}WW.W_PLCJS_COM-PLC-技.术_网
return 0; }plcjs.技.术_网
…WW.W_PLCJS_COM-PLC-技.术_网
3 利用MsCommActiveX控件
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
3.1 向工具箱中添加MSComm控件plcjs.技.术_网
启动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。plcjs.技.术_网