汽车CAN总线监视器windows应用软件研发概要设计.docx

上传人:b****6 文档编号:8562690 上传时间:2023-01-31 格式:DOCX 页数:10 大小:463.44KB
下载 相关 举报
汽车CAN总线监视器windows应用软件研发概要设计.docx_第1页
第1页 / 共10页
汽车CAN总线监视器windows应用软件研发概要设计.docx_第2页
第2页 / 共10页
汽车CAN总线监视器windows应用软件研发概要设计.docx_第3页
第3页 / 共10页
汽车CAN总线监视器windows应用软件研发概要设计.docx_第4页
第4页 / 共10页
汽车CAN总线监视器windows应用软件研发概要设计.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

汽车CAN总线监视器windows应用软件研发概要设计.docx

《汽车CAN总线监视器windows应用软件研发概要设计.docx》由会员分享,可在线阅读,更多相关《汽车CAN总线监视器windows应用软件研发概要设计.docx(10页珍藏版)》请在冰豆网上搜索。

汽车CAN总线监视器windows应用软件研发概要设计.docx

汽车CAN总线监视器windows应用软件研发概要设计

软件概要设计

3.1 引言

3.1.1 编写目的

本章对系统的设计做一个初步总结,介绍系统的主要流程和主要设计概念。

3.1.2 项目背景

(1)项目委托单位:

天津大学软件学院

开发单位:

天津大学软件学院06级本科生。

主管部门:

天津大学软件学院。

(2)该软件系统的说明:

本次工程为天津大学2006级毕设题目。

为了模拟车载ECU间的CAN数据通信,本研究课题使用开发完成的硬件与个人编写的PC软件,完成CAN数据信息的采集、发送及显示。

目的在于模拟ECU之间的通信,了解软硬件通信的接口,完成Windows下C#程序的开发,学会XML文档的使用。

3.2 任务概述

3.2.1 目标

本研究课题使用Windows应用软件编程环境,相应的已经完成嵌入式开发的CAN数据控制器,以及RS232通信协议来完成PC对CAN数据的信息的解析与控制。

理解CAN监视器的特殊寄存器设定值计算和CAN信息解析及图形图线的绘制,运用所学的XML和.NETWindows编程等相关知识,在VisualStudioC#2008环境下实现C#编程,深刻理解软件开发的各个过程,灵活运用统一建模语言及相关工具进行软件的分析与设计。

3.3 总体设计

3.3.1 处理流程

本系统最主要的功能为发送信息和接收信息,状态设置等活动图如图3-1:

图3-1  活动图

3.3.2 功能分配

图3-3显示了该系统的功能模块划分:

图3-3  系统功能模块图

3.4 接口设计

3.4.1 外部接口

用户界面采用VB进行编程,用户界面如图3-4:

图3-4  系统界面截图

图3-5中setting里面可以设定要使用的端口号,如果端口未连接设备则会报错,setting里面还可以设定COM速率(本实验由于使用USB所以不用设)和CAN总线的波特率。

设定完毕后点击SetSpeed&Open打开CAN总线,Close用来关闭CAN总线,GetVersion用来获得版本信息,TimestampONTimestampOFF用来控制时间戳的打开和关闭,send是用来方便的发送一个便准测试数据帧,如果想执行其他指令可以再下面的框中输入点击AdvancedSend发送(如果发送信息为空则会报错),返回信息输出在Result中,点击Clear可以清空返回内容。

详细的执行情况可以参见第四章的测试报告。

图3-5  系统界面操作截图

3.4.2 内部接口

PC机的USB口连接FT245,正常工作模式下SJA1000通过CAN总线驱动器链接到CAN总线收发端口,自检测模式下ATmega128链接到JTAGICE。

FT245,ATmega128和SJA1000的内部接口如图3-6和图3-7:

3.5 数据结构设计

3.5.1 数据结构与程序的关系

程序中最主要的数据帧数据结构设计如下:

structTX_EFF{

unsignedlongid;

unsignedlongtimestamp;

unsignedcharflags;

unsignedcharlen;

unsignedshortdata[8];

};

其中id用于存放数据帧的ID,包括11位ID的标准数据帧和29位ID的扩展数据帧,故数据类型使用unsignedlong(32位),timestamp用于记录接收到数据的时间,时间由时钟中断提供,精确到1毫秒,本程序中记录0-60秒,超过60秒则归0,flags中的8为数据第八位(最高位)用于存放数据类型,0代表标准数据帧,1代表扩展数据帧;第七位用于存放是否是请求数据帧,不是为0,是为1。

Len存放数据长度,数据长度为0-8,data数组用于存放数据,每一个数据大小为8位(一个字节),最多存放8个数据。

3.6 运行设计

3.6.1 运行模块的组合及运行控制

主函数循环检测指令标志位是否为1,为1则进入到程序中,首先检测指令的正确性,错误直接返回一个字符CR,正确则进行相应操作。

当有信息从FT245传送来时自动进入INT1中断,接收整条指令(以CR为结尾),本着中断中尽量少进行操作的原则,把指令存放在变量中,然后置指令标志位为1,等待主循环的检测。

如果是操作指令则进行相应的操作,如果是发送信息指令则把信息存放在发送队列中,并改变指针位置。

当SJA1000接收到信息时自动进入INT0中断,INT0中判断中断类型,如果是接收中断则接收数据存放在接收循环队列中,并改变指针位置。

TIMER0_COMP中断则是每500微秒自动进行的中断,如果检测到严重错误则会发出警报,如果发现发送队列和接收队列不为空则进行相应的发送和接收操作。

3.6.2运行时间

接收一个数据帧的时间要求在100微秒以内,发送数据帧的时间不做硬性的要求。

关于运行时间的分析测试请见第四章。

3.6.3Schemal文件

xmlversion="1.0"encoding="UTF-8"?

>

schemaxmlns:

xs="http:

//www.w3.org/2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified">

elementname="ReceivedData">

annotation>

documentation>Commentdescribingyourrootelement

documentation>

annotation>

complexType>

sequence>

elementname="ReceviedMessage"maxOccurs="unbounded"minOccurs="0">

complexType>

attributename="MessageName"type="xs:

string"use="required"/>

attributename="MessageID"type="xs:

positiveInteger"use="required"/>

attributename="MessageType"default="Standard"use="optional">

simpleType>

restrictionbase="xs:

string">

enumerationvalue="Standard"/>

enumerationvalue="Extended"/>

restriction>

simpleType>

attribute>

attributename="MessageData"use="optional">

simpleType>

restrictionbase="xs:

hexBinary">

minLengthvalue="0"/>

maxLengthvalue="64"/>

restriction>

simpleType>

attribute>

attributename="ACR"use="required">

simpleType>

restrictionbase="xs:

hexBinary">

minLengthvalue="0"/>

maxLengthvalue="32"/>

restriction>

simpleType>

attribute>

attributename="AMR"use="required">

simpleType>

restrictionbase="xs:

hexBinary">

minLengthvalue="0"/>

maxLengthvalue="32"/>

restriction>

simpleType>

attribute>

attributename="BTR0"use="required">

simpleType>

restrictionbase="xs:

hexBinary">

minLengthvalue="0"/>

maxLengthvalue="8"/>

restriction>

simpleType>

attribute>

attributename="BTR1"use="required">

simpleType>

restrictionbase="xs:

hexBinary">

minLengthvalue="0"/>

maxLengthvalue="8"/>

restriction>

simpleType>

attribute>

attributename="TimeStamp"type="xs:

integer"use="optional"/>

attributename="Time"type="xs:

time"use="required"/>

attributename="Date"type="xs:

date"use="required"/>

complexType>

element>

sequence>

complexType>

element>

schema>

3.7 出错处理设计

3.7.1 出错输出信息

每条指令返回两个字符,第一个字符代表指令正确与否,第二个字符代表指令是否执行成功,字符CR(回车)代表指令正确和执行成功,07(BELL)代表错误或执行失败(如果指令错误只会返回一个07,不会返回第二个字符)当发生严重错误时(错误的划分见3.7.2),发送信号灯和接收信号灯常亮。

3.7.2 出错处理对策

一般性的错误:

指令输入错误,指令输入间隔时间过长,在CAN总线打开的情况下设定了波特率,在CAN总线打开的情况下设定了验收代码寄存器和验收屏蔽寄存器,在CAN总线打开的情况下打开CAN总线。

在CAN总线关闭的情况下发送数据,在CAN总线关闭的情况下关闭CAN总线,在队列满的情况下接收了数据,在队列空的情况下发送了数据。

在没有设定波特率的情况下打开了CAN总线等。

这些错误只在结构体中加以记录,当接收到PC机发送来的返回寄存器状态时指令时返回状态给PC机,使用初始化指令可以清空这些状态。

严重的错误:

EI(错误报警中断),DOI(数据溢出中断),EPI(错误消极中断),ALI(仲裁丢失中断),BEI(总线错误中断),当上述标志位被置位时,通过时钟中断检测到并停止一切的发送接收工作,发送信号灯和接收信号灯常亮,等待处理。

查看错误类型可以通过执行返回寄存器状态指令,清除错误可以使用初始化指令。

3.8 安全保密设计

由于本课题研究的是嵌入式系统的开发,所以最重要的就是实时性,应该避免所有让系统瘫痪或者死等的情况。

(1)在INT0,和INT1中断中都尽量减少了操作,大多运用标志位,然后在别的函数中进行检测。

(2)接收队列中的处理,由于写回PC机比较费时间所以单独的设置了一个结构体用于存放一个数据帧,当写回数据时,先把数据写到单独的结构体中(此时指针位置改变可以存放下一条数据)然后对结构体中的数据进行移位等操作,并写回到PC机。

(3)设置了时钟中断检测发送和接收队列,这样当同时接收到或者是要发送多个数据时能够一次发送。

为了防止CAN总线未打开发送数据死等的情况,在CAN总线未打开时要发送的数据会被丢掉并返回一个错误信号。

(4)由于接收命令都需要以CR为结尾,当一条指令不以CR为结尾时便会出现死等的情况。

所以程序做了类似于看门狗的设计,每接收到指令中的一个字符时就更新变量中的时间,当两个字符的输入时间大于100毫秒时,便返回错误警报并且丢弃该指令。

(由于指令都是成条输入,所以一般不会大于100毫秒)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1