点击【 大 中 小 】, 可 以 选 择 字 体的大小,以便 你 阅读.
1 引言
汽车发动机点火线圈测试台的原理框图如图1所示。汽车点火线圈测试台系统的硬件主要由被测件(线圈、负载)、程控信号源、程控电压源、I/O控制板、数据采集处理系统、工控机等的组成。其中负载、程控信号源、程控电压源用于模拟点火线圈的工况;其他部件由于测量以及控制。根据相关国家标准,点火线圈的各项参数必须在相应的条件下(不同的测试项目,此条件有可能不同)测得,并且不同型号的线圈的测试条件也不尽相同,所以图中给点火线圈提供工作条件的电压源和信号源都是可以由上位机中的系统软件通过串行通信接口来设定的。因此,解决上位机与单片机的串行通信的问题是开发此点火线圈测试系统软件的重点、难点问题之一。本文将介绍利用Visual Basic 6.0来解决这一难点的稳定可行的方法。

图1 汽车点火线圈测试台的原理框图
2 通信协议
PC机和单片机之间采用RS-232总线标准,以异步方式,以波特率为1200bps的传输速率进行通信,一位起始位,一位停止位,8位数据位,一位校验位,以二进制的方式传输数据。PC机发送的第一个字节作为二者通信的握手信号,同时也是区分电压源和信号源的项目号。单片机在接收到握手信号以后会另外返回一个字节,以表明握手是否成功。在一组数据发完以后单片机也会另外返回一个字节来通知PC机是否接收到有效的数据。握手信号的校验位恒为“1”,其他数据的校验位恒为“0”。同时,单片机用于串口通信的接收引脚和发送引脚处于短路状态,PC机发送的数据自己可以收到,每发送一个数据后,要等待与收到的返回值对比正确以后,才发送下一个数据,如果发送的数据和接收的数据不相同,那么全部重发。以此来保证发送的每一个二进制字节的准确性,从而提高通信的质量。
3 串行通信的方法
其一就是使用MSCOMM控件。此控件提供很多方便操作的属性和方法,利用它们可以很方便地实现设计目的;另外一种途径就是使用Windows API,微软为开发者提供了很多相关的串行操作编程接口,使用这些接口,可以完成更为强大的功能。这里着重介绍第一种方法,第二种方法实际思路与第一种方法一样,不同的是它利用Windows API函数代替了控件。
无论使用哪一种方法,其基本的操作步骤大致一样的:首先初始化串口,比如端口号、波特率等属性。然后打开端口,通过接收缓冲区读上行数据,通过发送缓冲区来写下行数据。最后通过事件驱动来实现数据的到达、发送和处理过程,另外在通信过程中的错误的产生也可以通过CommEvent属性来管理。
4 上位机程序实现
根据以上通信协议,将Mscomm的属性设置如下:
CommPort=2, 指定使用COM2进行通信传输;
InputModel=1,以二进制方式取得数据。
其他属性值不变,需要改变的在程序中改变。本通信程序成功的关键在于PC机在发送数据的过程中要进行延时,用一段固定的延时虽然可以成功通信,但是程序的效率会很低,因此有必要编写一段智能延时程序。还需要说明的是,以二进制方式发送数据,必须将数据定义成数组。下面给出一段通过串行通信来实现对点火线圈点火控制的程序来说明通信过程。
Public Sub SendFireon()
Dim fireon(2) As Byte
定义令点火开关闭合数组
Dim firenum(1 To 1) As Byte
Dim i As Integer
CErrFlag = False――通信失败标志位清零
firenum(1) = 80
fireon(0) = 3
fireon(1) = 6
fireon(2) = 9——点火开关闭合的数组值
FrmTest.Comm1.Settings =“1200,m,8,1”
项目号为80,设校验位为1
FrmTest.Comm1.Output = firenum
发送点火开关项目号
p = WaitRS(FrmTest.Comm1, 80241, 100)
If p = True Then
'MsgBox“发送点火开关开项目号失败,系统将退出测试程序,请再来一次”, vbCritical,“系统提示”