CAN通信

目录

CAN总线特点

负载率计算 

CAN的分层结构 

CAN总线结构

Node 

Message 

Signal

信号可靠性

过滤码(Filter Code )和掩码(Mask Code):

CANalyst-II_CAN分析仪滤波设置

Motorola和Intel


CAN总线特点

CAN总线特点如下:

可以点对点、一点对多点(成组)及全局广播几种传送方式接收数据。

通信速率最高可达1MB/s(此时距离最长40m)。

通信介质可采用双绞线,同轴电缆和光导纤维,一般采用廉价的双绞线即可,无特殊要求。

负载率计算 

CAN的分层结构 

CAN总线结构

CAN-bus采用总线网络拓朴结构,在一个网络上至少需要有2个CAN-bus 节点存在。在总线的2个终端,各需要安装1个120Ω的终端电阻;如果节点数目大于2个,中间节点就不要求安装120Ω终端电阻。 

Node 

一条CANBus上面有多个节点(Node ),如下图的IOB和VCU

一个节点(Node) 可配置总线名(Network Name)和节点名( Node Name)

一个节点下可以有多条消息(message)如下图

Message 

一条消息可以配置以下信息:

Name:名字。

Type:CAN类型,CAN Standard标准帧-11位CAN ID;CAN Extended扩展帧-29位CAN ID。

ID:十六进制数,ID值越小,Message优先级越高。   

 标准帧ID最大7FFH,扩展帧ID最大1FFFFFFFH

DLC:数据长度。取值范围0~8,决定数据部分字节数。

Transmiter:发送节点。

Cycle Time:循环时间,ms 为单位。

TxMethod:报文发送方式,Cycle循环帧发送;Event帧发送;If active使能发送。

Signal

一条消息(message)下可以有多个信号(signal)如下图

 

一个信号可以配置以下信息:

Name:名字。

length[bit]:信号长度,单位bit。

Byte Order:字节序。     Motorola:大端模式     Intel:小端模式

Unit:信号单位。如信号是电压值,单位可    为V。

Value Type:数据类型。     

Signed:有符号数最高位是符号位,最高位为0代表正数最高位为1代表负数;     

Unsigned:无符号数最高位是数据位。

Init Value:初始值。 

Factor:限定物理值的精度,根据需求指定,非零的值,默认为1。

Offset:偏移量。

物理值Physical value :程序中用的值。

总线值Raw value :实际传输的值。

物理值和总线值关系:

物理值[Physical value]=总线值[Raw value]*因子[Factor]+偏移量[Offset]

Minimum:最小值。

Maximum:最大值。 

如我们计算温度的时候,用无符号型数据,但是温度有零下,怎么表示呢,我们用这个偏移量,比如Factor=0.5,Offset=-40就表示得这个数据乘以0.5,再减去40,这样就能表示零下40度的数据,精度是0.5度。一个字节最大能表示255,乘以0.5大概剩下127.5,然后减掉40,就得出,我们数据的范围是从(-40度到87.5度)。

报文发送方式

周期型:     Periodic;

事件型:     On event;

使能型:     If active;

周期事件型:     Periodic and On event;

周期使能型:     Periodic and If active

 

 

 

信号可靠性

CRC:循环冗余校验,数据发送时通过一些计算公式算出随数据发送,数据接收时采用相同的计算公式再次计算,若相同则数据接收正确,若不同,则说明接收到的数据是错误数据。

Checksum:     防止信号改变     例如: Checksum =(byte0+byte1+…+byte6)XOR 0xFF

AliveCount:     消息计数

Heartbeat信号:    防止报文丢失     避免应用程序误操作

过滤码(Filter Code )和掩码(Mask Code)

节点通过控制器中过滤码(Filter Code)和掩码(Mask Code),再检验总线上消息的标识符,来判断是否接收该消息(Message Filtering)。对于掩码,“1”表示该位与本节点相关,“0”表示该位与本节点不相关。

例1:仅接收消息标识符为00001567(十六进制)的帧,设置过滤码为00001567, 转换成二进制数

节点检测消息的标识符的所有位(29位),如果标识符为00001567接收,否则舍弃。

例2:接收消息标识符为00001567到 0000156F的帧,设置过滤码为00001560, 转换成二进制数 

节点检测消息的标识符的高25位,最低的4位则不care。如果标识符最高25位相同则接收,否则舍弃。

例3:接收消息标识符为00001560到 00001567的帧,设置过滤码为00001560, 转换成二进制数

节点检测消息的标识符的高26位,最低的3位则不care。如果标识符最高26位相同则接收,否则舍弃。 

例4:接收所有消息帧,设置过滤码为0,设置掩码为0,节点接收总线上所有消息。

CANalyst-II_CAN分析仪滤波设置

屏蔽寄存器的某一位等于1时,表示忽略对该位对应ID位的滤波,如屏蔽寄存器值=FFFFFFFF,则可接收所有消息。 验收滤波器ACR,验收屏蔽器AMR都是32bits(4bytes)。对于需要验收滤波的ID值,ID的最高位(标准帧ID最高位为Bit10,扩展帧为Bit28)与ACR/AMR的最高位(Bit31)位对齐,即左对齐方式。

 例1:适配器接收ID为0x378到0x37F的标准帧。 0x378转换为二进制是001101111000左对齐即左移21, 0x37F转换为二进制是001101111111

Motorola和Intel

Motorola-大端模式:低字节放在高地址位

Intel-小端模式:低字节放在低地址位

先发送LSB举例。当数据小于1字节(8位)的时候,Intel和motorola对数据存放方式相同,如图

例如0x12(0~8bit)转换为二进制为 

因为小于8位,都是在一个字节内,字节内都是从低位排到高位,所以方式相同

 因此采用Intel模式和Motorola模式存放都为0x12

当数据大于1字节(8位)的时候,Intel和motorola对数据存放方式如图

例如0x123(8~32bit)转换为二进制为

例如0x123456789(32bit~64bit)转换为二进制为

例如0x123456789(32bit~64bit)转换为二进制为

  

### 回答1: canlog是指一种日志记录工具,通常用于记录汽车或其他设备的数据。canlog解析负数意味着该工具能够正确地处理和显示负数值。 在汽车或设备的数据记录中,有些参数可能具有负数值,例如速度、温度、油耗等。canlog通过解析底层CAN(Controller Area Network)数据,将这些负数值获取并正确显示出来,以便用户能够获取准确的数据信息。 canlog解析负数的过程一般会参考CAN通信协议的定义。在CAN通信中,数据是以二进制形式传输的,其中最高位(MSB)通常表示数值的符号。当解析负数时,canlog会读取最高位的数值,并根据协议规定的方式将其转换为负数。例如,对于8位数据,最高位为1表示负数,canlog会将其转换为负数的十进制表示方式。 可以举一个例子来说明canlog解析负数的过程。假设某车辆的油耗传感器数据是以CAN信号传输的,该数据使用8位表示,其中最高位(第8位)表示符号位。当最高位为1,其余7位为0011001时,canlog会将其解析为负数-25,以便用户能够正确地理解和使用这个数值。 总而言之,canlog解析负数是指该工具具备解析CAN数据中负数值的能力,通过对最高位进行解析和转换,确保用户能够正确地获取并分析负数数据。这样能够提高数据的准确性和可靠性,为用户提供更全面的数据分析功能。 ### 回答2: Canlog解析负数是指在Canlog数据解析过程中,对于负数数值的处理。Canlog是一种用于记录汽车CAN总线数据的文件格式,可以用于诊断汽车故障或者进行数据分析。 在Canlog文件中,负数是以补码形式表示的。补码是一种表示负数的方法,它通过对正数进行取反再加1的方式得到。当解析Canlog文件时,需要对负数进行特殊处理。 首先,我们需要知道负数的标志位,一般情况下,Canlog文件中指定了一个特定的字节位来表示该值是否为负数。如果该位为0,表示为正数;如果该位为1,表示为负数。 其次,对于负数的数值部分,需要进行补码转换。将负数的数值部分取反,然后加1,得到转换后的补码形式。 最后,根据负数的数据类型(如整数、浮点数等)和范围,将补码转换为真实的负数值。这个过程与正数的解析类似,只需知道原始补码的表示范围,并将其转换为对应的负数值。 总而言之,Canlog解析负数需要确定负数的标志位,对负数的数值部分进行补码转换,然后根据数据类型和范围将补码转换为真实的负数值。这个过程在Canlog解析中是很重要的,有助于正确地分析和解释负数数据。 ### 回答3: canlog解析负数是指在CAN(Controller Area Network)通信中对于负数数据的解析。CAN通信协议是一种用于控制系统中的实时通信的标准协议,常用于车辆系统和工业自动化等领域。 在CAN通信中,数据是以字节(byte)为单位进行传输的,每个字节都可以表示0到255的整数。对于负数的表示,CAN通信采用了一种称为二进制补码(Two's Complement)的表示方法。 在二进制补码表示中,正数的二进制表示与传统的二进制表示方法相同。而对于负数,先将其绝对值转换为二进制形式,然后对其进行按位取反,最后将结果加1。这样得到的结果即为该负数的二进制补码表示。 在CAN通信中,当一个负数需要进行传输时,首先将其转换为二进制补码表示形式,然后按照字节顺序依次传输各个字节。接收方在接收到数据后,需要对每个字节进行解析,还原成原始的负数表示。 解析负数的过程是将每个字节的二进制补码进行逆操作。即先将每个字节减1,然后按位取反,最后将结果取负。这样得到的结果即为原始的负数表示。 需要注意的是,在解析负数时,需要考虑数据长度,因为CAN通信协议规定了每个数据帧的字节数。如果负数的位数超过了规定的字节数,可能会导致解析错误或数据截断。 总之,CANLOG解析负数是通过转换为二进制补码表示来传输和解析负数数据的过程,可以保证负数的准确传输和还原。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值