1仪表软、硬件版本的检测、仪表里程清零及仪表调校等一系列.pdfVIP

1仪表软、硬件版本的检测、仪表里程清零及仪表调校等一系列.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
“新捷达”型汽车组合仪表的串行通讯的实现 中国自动化网 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 bytTempAs Byte int intTemp; //Dim intTempAs 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表示接收移位寄存器已收到一个完整的数据,并送到接收缓冲器中 if(intTempintWaitTime) {Error();} } if(!blnBeyondWaitTime) bytResult=InportB(intDRR);//intDRR=0x3f8 return bytResult; } VOldTForml∷subSendByte(byte bytSend) { byte bytTemp; bytTemp=InportB(intLSR); //检查发送缓冲器是否为空,1为空 while((bytTemp0x20)!=0x20) bytTemp=InportB(intLSR); OutportB(0x3F8,bytSend); //发送缓冲器为空 bytTemp=InportB(intLS

文档评论(0)

docindoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档