CANToolApp需求总结

在现代汽车控制技术中,一般会采用CAN总线对车内的多个电子控制元件(ECU)进行控制,调节汽车行驶中各种参数(温度、速度等),一般通过CANTool装置实现CAN数据的显示及控制。为了方便用户使用,现在要针对CANTool开发对应的CANToolApp(Windows版,移动平台版),使用户能够更加直观了解CAN总线传递到CANTool上的各种实时数据及其实际物理含义,并且方便用户对各种实际物理值进行实时的更改。

上图为整个系统中的数据传输实例,can总线收集、汇总各个ECU的实时数据,通过CANTool传递到以UART或蓝牙串口连接的上位机中的CANToolApp中,并在CANToolApp以可视化手段实时的显示这些数据,用户同样可以通过上位机中的CANToolApp设定各种物理量的实际数值,传递到CANTool,发送到CAN总线上,最终将信息传达到对应物理量的电子控制元件(ECU),更改该项物理值。

上位机与CANTool装置之间的信息传送方式使用ASCII码(字符串)格式+ \r(即0x0d)方式进行信息交换。

即,每一个\r,代表了上位机的一条命令的结束,可以接收到的命令进行解析

现在对各个装置间的数据传输内容、传输格式、传输方向以及对应功能做简要说明

CAN总线数据

dir

CANTool装置

dir

CANToollApp

功能说明

-

接收到“V\r”

 

返回CANTool装置的版本信息“SV2.5-HV2.0\r”

 

发送“V\r”

 

接收“SV2.5-HV2.0\r”

查询CANTooll版本信息

-

接收到“O1\r”

返回成功或失败信息。

发送“O1\r”

\r或\BEL

CANTool装置置位(open),该功能仅可以在CANTool开启电源后(未开机)或处于复位状态(close)后(对CANTool发送"C\r")使用

如果成功,CANTool返回“\r”,否则返回\BEL(0x07)

-

接收到“Sn\r”

返回成功或失败信息。

发送“Sn\r”

\r或\BEL

将CAN总线的通信速率调至Sn档

Sn对应的速率为:

S0 :10Kbit

S1 : 20Kbit

S2 : 50Kbit

S3 : 100Kbit

S4 : 125Kbit

S5 : 250Kbit

S6 : 500Kbit

S7 : 800Kbit

S8 : 1Mbit

该功能仅可以在CANTool开启电源后(未开机)或处于复位状态(close)后(对CANTool发送"C\r")使用

如果成功,CANTool返回“\r”,否则返回\BEL(0x07)

 

 

接收到“C\r”

返回成功或失败信息。

发送“C\r”

\r或\BEL

对CANTool进行复位(close)操作,该功能仅可以在CANTool处于置位状态(open)后使用。

如果成功,CANTool返回“\r”,否则返回\BEL(0x07)

ID(3位16进制数,范围0-2047)+DLC(1位,范围0-8,代表数据长度)+DATA(数据部分,长度0-8字节,由DLC的值决定)

在以下实例中0x代表16进制数据,为了方便阅读,data部分按照字节进行了拆分

实例1:

id:0x123

DLC;0x08,

Data:0x00,0x11,0x12,

0x13,0x14,0x15,

0x16,0x17

实例2:

id:0x3FF

DLC;0x04,

Data:0x00,0x11,0x12,

0x13

tiiiLDDDDDDDDDDODDDDD\r

CANTool对CAN总线标准帧进行预处理,在数据前加t,在数据末尾加‘\r’

 

 

 

 

实例1:组成字符串如下

“t12380011121314151617\r”

 

 

 

 

实例2:组成字符串如下

“t3FF400111213\r”

 

 

接收到CANTools装置的信息,将其解析为实际的CAN信号。解析过程中需要使用CAN信息及信号描述数据库

CAN总线发送CAN信号(标准帧),CANTool装置接收到CAN总线信息后会自动将信息发送给上位机。

 

ID(8位,范围0-536870911)

+DLC(1位,范围0-8,代表数据长度)+DATA(数据部分,长度0-8字节,由DLC的值决定)

在以下实例中0x代表16进制数据,为了方便阅读,data部分按照字节进行了拆分

实例:

id:0x123FABCD

DLC;0x08,

Data:0x00,0x11,0x12,

0x13,0x14,0x15,

0x16,0x17

TiiiiiiiiLDDDDDDDDDDODDDDD\r

CANTool对CAN总线扩展帧进行预处理,在数据前加T,在数据末尾加‘\r’

 

 

 

 

 

实例:组成字符串如下

“T123FABCD80011121314151617\r”

注:\r=0x0d

接收到CANTools装置的信息,将其解析为实际的CAN信号。解析过程中需要使用CAN信息及信号描述数据库

CAN总线发送CAN信号(扩展帧),CANTool装置接收到CAN总线信息后会自动将信息发送给上位机。

CANTool区分标准帧和扩展帧可以根据ID部分的最高位,如果为0,则为标准帧,为1为扩展帧。

ID: iiiiiiii

DLC:L

Data:DD DD … DD

 

 

 

 

 

 实例:

ID:1234567F

DLC:8

DATA: 11 22 33 44 55 66 77 88

 

 

 

 

 

 

 

 

 

 

CANTool装置将接收到的发送CAN扩展帧以一定频率发送到CAN总线。

 

 

 

 

 

 

 实例:接收到

“T1234567F81122334455667788\r”

 

返回”\r” 或”\BEL”

 

 

 

 

 

 

 ←

 

 

 

TiiiiiiiiLDD…DDmmmm\r”。此字串是由用户在GUI界面上输入的CAN信号的内容合成而来,需要参照CAN信息及信号描述数据库。

ID(8位,范围0-536870911)+DLC(1位,范围0-8,代表数据长度)+DATA(数据部分,长度0-8字节,由DLC的值决定)+CYCLE(发送的频率,范围0-65535,代表周期发送的毫秒数,为0时代表只发送一次)

 

实例:单次发送

“T1234567F811223344556677880000\r”

 

 

“\r”或”\BEL”

 

CANToolAPP向CANTool装置向CAN总线单次/周期性发送CAN扩展帧

该功能需要在置位状态(open)下完成

如果成功,CANTool返回“\r”,否则返回\BEL(0x07)

ID: iii

DLC:L

Data:DD DD … DD

 

 

 

实例:

ID:12F

DLC:4

DATA:11 22 33 F4

 

 

 

 

 

 

 

CANTool装置将接收到的发送CAN标准帧以一定频率发送到CAN总线。

 

 

 

 

  实例:

接收到需要发送的CAN数据

 

返回”\r” 或”\BEL”

 

然后,CANTool将以

周期mmmm= 0x0110= 272ms.发送此CAN数据

 

 

 

 

 

 

 ←

 

 

 →

 

 

 

 

“tiiiLDD…DDmmmm\r”。此字串是由用户在GUI界面上输入的CAN信号的内容合成而来,需要参照CAN信息及信号描述数据库。

ID(3位16进制数,范围0-2047)+DLC(1位,范围0-8,代表数据长度)+DATA(数据部分,长度0-8字节,由DLC的值决定)

 

实例:以定周期发送 “t12F4112233F40110\r”

 

 

“\r”或”\BEL”

 

CANToolAPP向CANTool装置向CAN总线单次/周期性发送CAN标准帧

该功能需要在置位状态(open)下完成

如果成功,CANTool返回“\r”,否则返回\BEL(0x07)

关于CAN信息,CAN信息有标准帧和扩展帧两种,格式为ID+长度+数据,一个CAN信息来自一个ECU,但是可能包含多个CAN信号。

CAN信息数据库内容如下

字段名

类型

样例

说明

BO_

 

char[32]

BO_

BO_,在实体数据库中CAN信息描述与CAN信号描述混合储存,BO_代表CAN信息,SG_代表CAN信号

id

uint32

2148606241

根据id最高位(第31位)区分该信息为CAN标准帧或CAN扩展帧,最高位位0,代表标准帧,最高位为1,代表扩展帧

100

Message Name

char[32]

EngMsg1

字符串,最长32字节,CAN信息名称

分隔符

char[1]

:

固定为 “:”

DLC

unsigned char

8

范围:0—8, 表示此CAN信息的DATA的长度

Node Name

char[32]

BODY_ECU

字符串,最长32字节,代表发送此信息的Node名。也是ECU名

CAN信息样式:BO_ id Message_Name : DLC Node_Name\n

注:每个字段间间隔符除注明外,均使用空格作为分隔符,上述样例在数据库中保存的格式为。BO_开始于新的一行第0列,信息的末尾为”\n”即DOS换行符”0x0d 0x0a”。

实例:BO_ 2148606241 Ext1: 8 Node_Body

CAN信号数据库内容如下

字段名

类型

样例

说明

SG_

 

char[32]

SG_

SG_,在实体数据库中CAN信息描述与CAN信号描述混合储存,BO_代表CAN信息,SG_代表CAN信号

Signal Name

char[32]

EngMsg1

字符串,最长32字节,代表该信号的名称

分隔符

char[1]

:

固定为 “:”

起始位| bit长度@bit格式

unsigned char[10]

16|12@0+

16表示起始位编号

12 表示此CAN信息的DATA的长度为12bit

0+表示数据按Motorola的bit顺序排列,即大端序

 

16|12@1+

16表示起始位编号

12 表示此CAN信息的DATA的长度为12bit

0+表示数据按Intel的bit顺序排列,即小端序

 

(A,B)

Double

(0.1, -10)

A:分辨率,物理值最小单位精度,B:物理值的偏移量offset。

Phy=A*x+B, x为CAN信号的数值,phy为CAN信号对应的物理值

[C|D]

double

[-41|368.5]

物理值的范围:Min=C到MAX=D

物理单位

Char[32]

“℃”

带有双引号的字符串,可以为空:””,

Node Name

char[255]

BODY_ECU

接收该信号的节点Node名列表(也是ECU名)字符串,最长32字节。如果多个ECU接收此信号,则用逗号将多了节点名隔开,例如:BCM,PEPS,ICM,CDU

CAN信号样式:SG_ Signal_Name : 起始位| bit长度@bit格式(1+\0+)(A,B) [C|D] 物理单位 Node_Name\n

注:每个字段间间隔符除注明外,均使用空格作为分隔符,上述样例在数据库中保存的格式为。SG_开始于新的一行第1列,信息的末尾为”\n”即DOS换行符”0x0d 0x0a”。

实例:SG_ sig1bittable : 8|1@1+ (1,0) [0|1] "" AC_ECU

SG_ Sig_moto1 : 7|12@0+ (0.1,-41) [-41|368.5] "DegC"  Node_Body

SG_ CDU_NMWakeupOrignin : 23|8@0+ (1,0) [0|255] "ms"  BCM,PEPS,ICM,CDU

 

 在实际开发中,分别有小组模拟实现CANTool和实现CANToolApp的Windows和Android版本

根据问题描述文档,我们可以大致确定这两个软件分别的功能需求

CANToolApp

1、获取CANToolApp中所有可用的COM口列表,让用户选择映射有CANTool的COM,与CANTool连接,并进行初始设置,通过CANToolApp可以改变CANTool的运行状态(open,close),CAN传输速率,并将这些配置信息保存

2、能够以数值方式、仪表盘、实时曲线图等多种不同的方式显示CAN信号中的物理值及其实时变化

3、可以保存接收到的所有CAN信息,可以加载本地的CAN信息和CAN信号数据库,并以树状结构显示在GUI界面中,可以显示一条CAN信息的物理结构及信号分布情况

4、可以实现本地的CAN信息和CAN信号数据库/JSON或XML的相互转化

5、可以根据用户输入的物理量数值组装CAN信息,可以发送CAN信息,可以设置CAN信息的发送频率

6、可以将将所有CAN信息实时数据、CAN设定信息等 通过WEB API方式更新到远程数据库

7、......

 

CANTool

1、实时监听CAN总线和CANToolApp

2、根据CANToolApp的命令,做出对应的回应,如返回版本信息,置位(open)、复位(close)、设置传输速率

3、接收CAN总线的CAN信息,识别其为标准帧或扩展帧,做出对应的处理后发送给CANToolApp

4、接收CANToolApp的CAN信号和频率信息,能够按照指定的频率发送CAN信号到CAN总线

 

 

目前对需求中存在疑问的地方:

1、CANTool如何区分CAN标准帧和扩展帧?

CANTool装置不需要单独的识别CAN标准帧和扩展帧,CANToolApp接收和发送给CANTool装置的CAN信息中,以大写T开始的CAN信息是CAN扩展帧信息,以小写t开始的CAN信息是CAN标准帧信息。

2、小端序、大端序的详细样例?文档中给的样例比较难以理解

我们以Intel的字节、位的排列表为例

Intel的排序方式小端序,即起始位置存放数据最低位(LSB),即顺序读入的最右一位数据,数据位的排列顺序为:从起始位置开始,以低编号到高编号的顺序访问字节,同一个字节中从低位到高位存放数据,以16|12为例,12位数据的存放位置依次为16、17、18、19、20、21、22、23、24、25、26、27,16为LSB,27为MSB

Motorola的排序方式为大端序,即起始位置存放数据最高位(MSB),即顺序读入的最左一位数据,数据位的排列顺序为:从起始位置开始,以低编号到高编号的顺序访问字节,同一个字节中从高位到低位存放数据,以23|12为例,12位数据的存放位置依次为23、22、21、20、19、18、17、16、31、30、29、28,23为MSB,28为LSB

3、如何实现CANTool装置与CANToolApp的实时交互(输入输出重定向、进程间通信)?

需要实现实时通信,可是使用Arduino的硬件配合串口/蓝牙来实现虚拟的CANTool装置,需要编写Arduino的C/C++语言程序,此方式可以适用于Android/Windows开发。或使用纯软件的com0com0虚拟串口方式来模拟,此方法只适用于Windows APP开发。

有关com0com0虚拟串口的方式将在下一篇博客里面做一个详细的介绍。

4、CANTool模拟装置如何模拟监听的CAN总线发送CAN信息(预定义文档、随机函数)?

可以通过自己定义的数据模拟CAN总线的信息。但需要能够满足测试CAN信号的不同类型、排列方式及bit信息长度的Little Endian/Big Endian的需要

5、CANToolApp是否需要实现Web API?

不需要实现

 

posted @ 2017-09-19 15:06  tju_sofeware_team  阅读(1529)  评论(0编辑  收藏  举报