新闻中心

EEPW首页>嵌入式系统>设计应用> 捷达汽车组合仪表的串行通讯的实现

捷达汽车组合仪表的串行通讯的实现

作者: 时间:2013-02-17 来源:网络 收藏
1 引 言

在开发汽车仪表检测设备的过程中,非常重要的工作就是实现工控机与汽车仪表的。通过可以实现对仪表软、硬件版本的检测、仪表里程清零及仪表调校等一系列仪表出厂前重要的检测项目及参数设定。对应于"新捷达"型(西门子VDO公司产品),为实现技术安全性,故其串行口采用非标准协议,是用一般的串口通讯控件所难以实现的,必须由熟悉仪表软件结构的人员从底层编写通讯程序。

本文采用C++Builder开发平台,在Windows 98操作系统下,成功实现了与"新捷达"型的通讯,并具有美观简洁的用户操作界面。 2 New Jetta型仪表串行通讯要求简述

2.1 硬件连接

文中工控机与仪表的硬件连接是从仪表的K-line经过电平转换器连接工控机的RS-232串行口,采用半双工串行异步通讯方式。如图1所示。

2.2 软件规范

软件规范关于串口数据通讯协议中包括了通信握手、多重校验、出错重发、超时处理等。

2.2.1 通讯初始化

当仪表点火信号端起动约2s后可以建立通讯响应。首先以5b通讯速率发送信息,该信息包含1个起始位,7个数据位,1个奇偶校验位和1个停止位(向仪表发送* * H)。

仪表收到该信息后大约要等待一个约5 ms的循环时间,然后通讯模块起动。从此时起所有的通讯字节将以10 400b/s的波特率来收发(此波特率为非标准波特率)。

经过100ms仪表送出同步字节(1个起始位,8个数据位,1个停止位,为* * H),再经过loms仪表送出密码的低字节,10ms后仪表送出密码的高字节(1个起始位,7个数据位,1个奇偶校验位,1个停止位,密码值为* * * *H)。

此后,仪表等待工控机送回倒序的密码高字节。这种回送方式是本串行通讯的防错处理机制。如果此字节仪表没有接收到,那么仪表将再次发送同步字节和密码字节。

当仪表接收到回送字节后,标准模块通讯以10 400b/s的波特率起动(每字节包含1个起始位,8个数据位,1个停止位)。此时,仪表开始发送仪表ID模块,为4个模块,分别包括16,16,15,9个字节。在这4个模块的发送过程中,仪表与工控机之间又有很多的信息应答要求,如有差错则通讯中止。

2.2.2 正常通讯过程

经过通讯初始化后,正常通讯以10 400b/s的波特率开始建立,此时工控机可以发送命令字节流给仪表,来实现对仪表的控制及参数设置。每隔特定的时间间隔,仪表与工控机间仍须互送握手信号,否则通讯中止。

3 软件程序设计

本通讯方式属于零Modem串行异步通讯。在异步通讯中,字符格式和波特率是2个重要指标。本文中通讯过程既有波特率的变化,也有帧格式的变化,对通讯的响应时间也有严格要求。

在C++Builder可视化编程格式下不再支持直接对寄存器操作的函数,故首先用嵌入汇编的办法实现Inporb和Outporb函数。本通讯的数据流是以字节为发送单位的,故编写字节收发函数,为查询方式,如清单1所示:

清单1:

byte TForml∷bytReceiveByte(void)
{
byte bytTemp; //Dim bytTemp As Byte
int intTemp; //Dim intTemp As Integer
byte bytResult;
bytTemp=InportB(intLSR);//intLSR=0x3fd
intTemp=0;
blnBeyond WaitTime=False;
while((bytTemp0x1)!=0x1)
{
bytTemp=InportB(intLSR);
intTemp=intTemp+1;
S1eep(1);

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭