《匠人手记》推荐网上购书渠道:
EDN网(ednchina)购书入口   >>>
互动出版网(china-pub)购书入口   >>>
当当网(dangdang)购书入口   >>>
淘宝网(taobao)购书入口   >>>
更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历

百宝专栏

  • 首页 相册 标签
  • 电脑应用(65)
  • 供需信息(22)
  • 写书近况(82)
  • 匠人文集(115)
  • 硬件技术(171)
  • 匠人公告(86)
  • 与非门专栏(545)
  • 匠人笔记(115)
  • 团队撰写(96)
  • 汽车电子(52)
  • 编程技巧(465)
  • 程序宝典(476)
  • 网络酷文(472)
  • 开发工具(19)
  • 资料宝藏(274)
  • 项目管理(11)
  • 藏经宝阁(42)
  • 趣味设计(5)
  • 社区热贴(2)
  • 比尔盖茨熊专栏(0) 
  • 百宝信息

    载入中...

    百宝流量

    (2006-07-01开始)



    匠人手记

    “新捷达”型汽车组合仪表的串行通讯的实现
    程序匠人 发表于 2006-4-26 23:09:00  阅读全文 | 回复(1) | 引用通告 | 编辑

    “新捷达”型汽车组合仪表的串行通讯的实现
    中国自动化网

    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((bytTemp&0x1)!=0x1)
    {
    bytTemp=InportB(intLSR);
    intTemp=intTemp+1;
    S1eep(1);
    //检查接收的数据是否准备好,为1表示接收移位寄存器已收到一个完整的数据,并送到接收缓冲器中
    if(intTemp>intWaitTime)
    {Error();}
    }
    if(!blnBeyondWaitTime)
    bytResult=InportB(intDRR);//intDRR=0x3f8
    return bytResult;
    }
    VOld TForml∷subSendByte(byte bytSend)
    {
    byte bytTemp;
    bytTemp=InportB(intLSR);
    //检查发送缓冲器是否为空,1为空
    while((bytTemp&0x20)!=0x20)
    bytTemp=InportB(intLSR);
    OutportB(0x3F8,bytSend); //发送缓冲器为空
    bytTemp=InportB(intLSR);
    //检查发送移位寄存器是否为空,即发送缓冲器的数据是否送完
    while((bytTemp&0x40)!=0x40)
    bytTemp=InportB(intLSR);
    bytTemp=InportB(intLSR);
    //检查接收的数据是否准备好,为1表示接收移位寄存器已收到一个完整的数据,并送到接收缓冲器中
    while((bytTemp & 0x1)!=0x1)
    bytTemp=InportB(intLSR);
    bytTemp=InportB(intDRR);
    //清空接收缓冲区中的发送数据
    }

    在此基础上建立本通讯初始化的主函数,如清单2所示:

    清单2:

    void TForml∷InitRS232(void)
    {
    String strTemp;//Dim strTemp As String
    byte bytTemp; //Dim bytTemp As Byte
    int intTemp; //Dim intTemp As Integer
    int i; //Dim I As Integer
    //Stepl:
    OutportB (intLCR,0x80);
    //输出控制字,下面输出波特串
    OutportB(intLSB,0x0); //低位
    OutportB(intMSB,0x5A); //高位
    OutportB(intLCR,0xA);
    //5 bit,l起始位,1奇偶位和1停止位
    OutportB(intIER,0); //抑制中断
    strTemp="";
    subSendByte (0x * *) //发送建立通讯密码
    //Step2:
    OutportB(intLCR,0x80);
    //输出控制字,下面输出波特率
    OutportB(intLSB,0xB);
    OutportB(intMSB,0x0);
    OutportB(intLCR,0x3);//10400,8,N
    strTemp=strTemp+""+IntToHex(bytReceiveByte(),2);
    //Step3:
    Receive the Low byte Of Key Word
    strTemp=strTemp+""+IntToHex(bytReceiveByte(),2);
    //Step4:
    Receive the High byte Of Key Word
    bytTemp=bytReceiveByte();
    strTemp=strTemp+""+IntToHex(bytTemp,2);
    //Step5:

    下面PC送高位字节的取反

    if(! blnBeyondWaitTime)
    subSendByte(byte(~bytTemp)); //byte
    else
    {Error();}
    //Step 6 Receive the block data
    if (! blnReceiveIDBlock(16)) //接收第1个ID块,为16B
    {Error();}
    if (! blnReceiveIDBlock(16)) //接收第2个ID块,为16B
    {Error();}
    if (! blnReceiveIDBlock(15)) //接收第3个ID块,为15B
    {Error();}
    if (! blnReceiveIDBlock(9)) //接收第4个ID块,为9B
    {Error();}
    //Cluster)> >PC
    subReceiveTheFifthBlock();
    String ResOfFT=strTestDataStream(strEnableFT);
    //仪表Epprom可读写命令
    if(ResOfFT==EmptyStr)
    {Error();}
    blnInitRS232=True;

    4 结 语

    本文采用C++Builder软件平台成功开发了仪表特殊串行口通讯程序,该系统在西门子VDO(芜湖)公司生产线投入使用一年多,与采用快速通讯方式相比通讯传输性能稳定,并具有了方便美观的用户界面,为实现仪表检测设备奠定了基础,具有重要的应用价值。

    看《匠人手记》,与匠人同行!北航出版,正在热卖!

    回复:“新捷达”型汽车组合仪表的串行通讯的实现
    an(游客)发表评论于2006-9-13 11:37:00  个人主页 | 引用 | 返回 | 删除 | 回复

    an(游客)

    有没有成型的软件和方案请联系afj0328@126.com

    看《匠人手记》,与匠人同行!北航出版,正在热卖!

    发表评论:
    载入中...

    芯片专题

    器件专题

    软件专题

    硬件专题

    综合专题

    项目专题

    原创专题

    器件检测
    LCD LED
    按键 触摸键
    E2PROM
    电池 电机
    电阻 电容 电感

    指令系统
    软件算法
    编程规范
    滤波算法
    串行通讯

    PCB设计
    I2C PWM
    红外遥控
    充电技术
    中断 ADC 

    匠人手记
    匠人夜话
    网络心路
    一周热点串烧
    从零开始玩PIC
    DIY旋转时钟

    广告5号位 [投放]


    学习板、开发板、编程器、下载器、仿真器(查看详情……)

    站内搜索


    站外搜索


    百度  google
    mp3  歌词 
    图片  FLASH 
    知道  文档
    新闻  词典 
    地图  mp3 
    软件  天网 
    雅虎  爱问 
    搜狗  讯雷 
    网讯  华军 
    天空 

    21IC器件搜索
    百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     
     

    新鲜货色

    匠人手记

    近期动态

    载入中...

      《匠人手记》购书全攻略 
     书友近况:淘书手记答疑与讨论:什么是散转程序 
     《匠人手记》新书艳照
     EDN《匠人手记》签名售书优惠活动开始报名啦!
     欢迎加入《匠人手记》EDN书友会
     欢迎加入《匠人手记》书友会Q群
     《匠人手记》终稿目录
     《匠人手记》封面,请大家先睹为快
     上周六收到了北航寄来的《匠人手记》清样,让大家先睹为快

    匠人原创

    粉丝评论

    往日酷贴

    载入中...

    载入中...



     网络酷文:博客,改变的不仅仅是图书 
     网络酷文:C语言宏定义技巧C语言 条件编译详解

      21IC上海2008-04聚会报名进行中。。。 
     两分钟让你明白什么是ERP![转]
      神奇的Duff's Device 算法
      实用一线通讯电路及软件设计方法
      程序员的“七年之痒”
      史上最短但最精彩的武侠小说
      网络无厘头文学《缺钙水浒》(爆笑)

     你的博客还能持续多久(转贴)
     电动车无刷电机控制器软件设计要点(作者:谢渊斌)

    大千八卦

    友情连接

    新浪新闻:
    新浪财经:
    AK58新闻:
    新浪股票:
    新浪股票:
    证券之星:

     [更多酷站连接]

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [柔月阁]

    [八楼的呼吸]

    [hotpower 的水潭]

    [xwj的文君阁]

    [所长的BLOG]

    [阿摆手记]

    [电子伙伴]

    [unaided的笔记]

    [小飞的笔记]

    [单片机开发联盟]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [数字电视之家]

    [SMARTCODE电子书斋]

    [软件开发之窗]

    [Armoric]

    [我爱研发网]

    [infernal的笔记]

    [雄鹰的空中加油站]

    [SunK]

    [逍遥电子]

    [ningpanda的博客]

    [C-Design]

    [一网见天下]

    [海边淘沙]

    [嵌入式365]

    [水牛的仓库]

    [股剩是怎样炼成的]

    [PIC论坛]

    [ICC AVR开发网]

    [中国高校自动化网]

     

     

     

    MCU博客-中国电子工程师博客网 

    大学生电子网 

     

     

     

     

     

    !!! 《匠人的百宝箱》 !!!