添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Motec CAN协议

之前弄清楚了Dash Manager的初步使用方法,但想要使用除Motec ECU和一些特定型号的ECU以外的数据来源,需要对其CAN协议进行定制。

一般需要了解的CAN的格式是11位地址加8字节数据(扩展帧有29位地址)。对于ECU来说,一般一个数据占1-2字节,所以传送的多有数据自然不可能只有8个字节,这就需要进行多帧的传输。但多帧传输是需要协议的,而在Dash Manager中完全没有找到过关于多帧传输协议的信息。这方面国内中文资料极少,爬到谷歌上找到了Motec的论坛,上面有很多人有类似的疑问,但下面的回答不痛不痒,主要是针对ECU而不是CDL3的。后来是从一个博客中得到的启示,贴上地址

https://zhaodi.me/motec-can-bus-stream-decoding/

(感觉博主好强…)

这篇博客中讲的是M84的CAN协议。概括地说就是Motec的CAN协议以0x82,0x81,0x80为包头,每个数据包包含22帧,存放了各种数据。但对使用CDL的我来说,仍然存在两个重要的问题。一是将CAN分析仪接到从M800输出到CDL的CAN接口上试图分析数据时,我发现我得到的数据是这样的

不难发现,是18帧一个循环,而且里面也没有出现任何形似82,81,80的数据。第二是,CDL如何知道应该在哪一位放了什么数据,又如何知道接入的是什么ECU呢?如果它一直按照82,81,80,22帧的协议来读数据,岂不是只能和Motec产品交互

在之前看论坛时,看见有人说可以给Motec support发邮件,所以我就把这两个问题发过去试试。在发出邮件后的第4天,我收到了Motec的回复。

同时他给了我一张图片,看样子应该是他特地做的吧

可以说是相当赞了。从这张图里得到最重要的信息就是Offset这个参数。之前一直以为是将数据的值进行偏移,而图里说,这其实是 数据在CAN帧中位置的偏移量 。也就是Offset=2,说明数据起始在一帧里的第3个字节,Offset=6,说明数据起始在一帧里的第7字节。

Motec的这张png解决了我的第二个问题的前半部分。但如何进行自定义的多帧传输,以及我从M800中拿出的数据还是没有解决。因此我根据Dash Manager中的M800 Pattern的channel参数,结合Offset定义和CAN分析仪又进行了测试,发现之所以我的数据是18帧,是因为在M800的默认配置里,所有通道占的字节数加起来正好是144,也就是18*8。虽然看起来这个解释很圆满,但这又说明,这144个字节里并没有数据的包头字节,那CDL如何区别ECU的问题还是无法解决。 所以尽管我已经尝试了发送单帧数据,并能够控制CDL的显示,但还是不能将它用于实际。

Compound Message的使用

不过,在Motec的邮件里有两个链接,是Motec的网络seminar地址(油管上的,需要。。)。视频里讲了Motec CAN的Compound Message的意义。不同于Single Message是将所有数据放在多个帧里融合成一个整体,Compound Message是给帧定义了一个索引,存放在数据位的第一个或前两个字节。这样就相当于在CDL的CAN id下又加了一级id,有点像操作系统里的多级页表。

一个帧里能携带的数据减少了,但能方便地对同一个CAN id传递很多不同的数据。这在Dash Manager里配置起来也很简单

选择Compound之后,左侧定义数据位的某两个字节作为索引,右侧加入通道和Offset即可。 需要注意的是 右侧加入的第一个通道,他的Offset是0,也就是和索引位的默认Offset相同,在传输时,通道的数据位置定义会覆盖掉索引的定义,也就是我发送00 11 01 00 00 00 00 00,这个数据的前两位会被认为是Accel Pedal Pos而不是No1的ID。

Compound传输多帧很简单

有问题可以email Motec官方

可能CDL识别ECU的方法在Communication的参数 这个Async. Device里

里面有M8,M4,GPS,和一些看起来很像品牌的选项,很有可能就是选择CAN协议的。但在Default配置下这项是不能选择的。

CAN是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信 协议 。由德国博世公司在1986 年率先提出。此后,CAN 通过ISO11898 及ISO11519 进行了标准化。CAN 协议 经过ISO标准化后有两个标准:ISO11898标准和ISO11519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准,而ISO11519-2是针对通信速率为125Kbps以下的低速通信标准。 CAN 总线 自定义 协议 使用说明用C语言实现自己的 协议 进入 EV5000 安装目录下builddriver 目录(如图1),这个目录里面的fbserver.c 文件即 协议 程序,用户不需要了解CAN 口的细节编程,只需要按照该框架,用C 语言来编写自己的 协议 即可。不可随意更改该文件中的函数名及头文件引用。图1CAN 自定义 协议 程序的流程图主程序流程框架初始化 ... 在这篇介绍中,我们介绍了J1939 协议 的基本知识,其中包括PGN和SPN。因为这是一篇偏向应用的简介,所有您还将会学习到如何通过DBC文件解码J1939数据、如何记录J1939、典型的应用案例和实用技巧。下面,来了解下这份简单易懂的J1939介绍吧~什么是J1939?简而言之,SAE J1939其实是一套标准,重型车辆ECU间就是按照这套标准在CAN总线上进行通信的。当今大多数车辆都通过CAN(C... 已经实现的LED的闪烁来表达系统的运行状态。如果电机运行故障,则会相应的闪烁LED来指示故障信息。 对于一个控制系统,应该有检测反馈,控制决策,动力执行。电机驱动是动力执行单元,受控于上层控制器。在常规的电机驱动控制中,有模拟量控制、232/485类的串口控制、CAN通讯控制、网络控制。现在采用can通讯的接口方式来控制。 CAN通讯,在调试...   CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信 协议 。在北美和西欧,CAN 总线 协议 已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以 CAN 为底层 协议 专为大型货车和重工机械车辆设计的 J1939 协议 。 1.2 通讯方式   回顾前面学到的 RS23. 目录1. CAN 协议 的基本概念2. CAN 协议 及标准规格2.1 ISO 标准化的 CAN 协议 2.2 ISO11898 和 ISO11519-2 的不同点2.2.1 物理层的不同2.2.2 驱动IC的不同2.3 CAN 和标准规格 1. CAN 协议 的基本概念 CAN 协议 如下表“ISO/OSI基本参照模型”所示,涵盖了 ISO 规定的 OSI基本参照模型中的传输层、数据链路层及物理层。 CAN 协议 中关于 ISO/OSI 基本参照模型中的传输层、数据链路层及物理层,具体的定义如下图所示。 数据链路层分 智能CAN/串口 协议 转换器LCNET Pro RS-232/485提供一路RS-485、一路RS-232和一路CAN通道,实现CAN与串口RS-485或RS-232之间的双向数据智能转换。每个通道独立隔离,每路通道采用金升阳电源模块和信号隔离芯片实现2500VDC电气隔离,电源输入防反设计,支持DC6.5~36V输入;具有优秀的EMC性能,可靠性测试项目:ESD接触放电8KV、浪涌±1KV、脉冲群... 随着CAN-bus相关芯片价格的下降,内置CAN控制器MCU的增多,CAN-bus当前已经进入了众多早期由于成本问题无法使用的领域,成为极具生命力的现场总线,今天我们就来探讨如何构建专属自己的CAN-bus应用层 协议 。 在CAN-bus网络上,CAN报文以广播的形式发送,CAN报文不包含地址信息,是否处理接收到的CAN报文由接收点的软件确定。CAN-bu... 上次分享的《分享一个很酷的上位机软件》中,有如下 协议 :有位读者朋友问数据为什么要按这样的格式来发。其实这是个 自定义 协议 ,这是上位机开发者定义的一个数据交互 协议 。我们下位机往伏特加上位机发...