汽车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:Windows环境下汽车CAN总线监视器软件信息发送、接收与显示设置不同工作模式发送Message显示Message曲线显示Signal寄存器值的计算与设置ACRn、AMRn值的计算ACRn、AMRn的设置BTR0、BTR1值的计算BTR0、BTR1的设置XML文件的存储与修改设置添加Singal及Message信息为工程添加Signal并设置属性值为工程添加Message并设置相应属性设置Signal与Message的映射关系图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.0encoding=UTF-8?xs:schemaxmlns:xs==qualifiedattributeFormDefault=unqualifiedxs:elementname=ReceivedDataxs:annotationxs:documentationCommentdescribingyourrootelement/xs:documentation/xs:annotationxs:complexTypexs:sequencexs:elementname=ReceviedMessagemaxOccurs=unboundedminOccurs=0xs:complexTypexs:attributename=MessageNametype=xs:stringuse=required/xs:attributename=MessageIDtype=xs:positiveIntegeruse=required/xs:attributename=MessageTypedefault=Standarduse=optionalxs:simpleTypexs:restrictionbase=xs:stringxs:enumerationvalue=Standard/xs:enumerationvalue=Extended//xs:restriction/xs:simpleType/xs:attributexs:attributename=MessageDatause=optionalxs:simpleTypexs:restrictionbase=xs:hexBinaryxs:minLengthvalue=0/xs:maxLengthvalue=64//xs:restriction/xs:simpleType/xs:attributexs:attributename=ACRuse=requiredxs:simpleTypexs:restrictionbase=xs:hexBinaryxs:minLengthvalue=0/xs:maxLengthvalue=32//xs:restriction/xs:simpleType/xs:attributexs:attributename=AMRuse=requiredxs:simpleTypexs:restrictionbase=xs:hexBinaryxs:minLengthvalue=0/xs:maxLengthvalue=32//xs:restriction/xs:simpleType/xs:attributexs:attributename=BTR0use=requiredxs:simpleTypexs:restrictionbase=xs:hexBinaryxs:minLengthvalue=0/xs:maxLengthvalue=8//xs:restriction/xs:simpleType/xs:attributexs:attributename=BTR1use=requiredxs:simpleTypexs:restrictionbase=xs:hexBinaryxs:minLengthvalue=0/xs:maxLengthvalue=8//xs:restriction/xs:simpleType/xs:attributexs:attributename=TimeStamptype=xs:integeruse=optional/xs:attributename=Timetype=xs:timeuse=required/xs:attributename=Datetype=xs:dateuse=required//xs:complexType/xs:element/xs:sequence/xs:complexType/xs:element/xs:schema3.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毫秒)

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功