CCP协议之DAQ模式下的数据通信
CCP协议之DAQ模式下的数据通信
CCP通信模式
CCP协议中MCD(主设备)与ECU(从设备)的通信可具体分为两种,一种polling模式,另外一种DAQ模式。
- polling模式:
通俗可以理解为一问一答模式,主设备先问,从设备回答,两者之间不断交互来实现主从设备的通信和数据交换,这种模式下,当主设备和从设备建立逻辑连接后,主设备与从设备的每一次通信都是从主设备发送一个命令请求开始的,请求从设备执行某项操作,或请求从设备的内部数据。从设备收到命令后,执行相应的操作,通过返回一帧消息,提供主设备请求的数据及命令执行情况代码,这种通信方式实现起来比较简单,占用ECU内存资源较少,但是效率很低。 - DAQ模式:
这个可以理解为一问多答模式,这种模式下,当主设备和从设备建立逻辑连接后,主设备首先发送一条DAQ请求,从设备收到命令后,按命令中的参数自行配置并组织上传数据,然后从设备可以脱离主设备的控制,按照一定周期向主设备自动上传数据。这种模式不需要主机通过命令逐步控制,所以工作效率比较高,实现比较复杂,如果需要上传的数据量比较大的时候,会占用大量的ECU的内存资源(RAM空间)。
DAQ数据通信
- 在我们平时使用中,更多的会用到DAQ模式,所以就来谈谈DAQ模式下的数据通信。关于DAQ需要知道下面这些点:
- DAQ通信的实现需要借助DAQ列表、OTD列表以及DAQ~DTO;
- 按照不同的周期,ECU内部需要实现多个DAQ列表;
- DAQ列表个数是由上传周期决定的(比如:有三个信号,他们的上传周期分别为10ms,20ms,100ms,那么就需要3个DAQ);
- 同一周期的数据变量归在一个DAQ列表里面;
- 一个DAQ列表可包含多个ODT列表;
- 每个ODT最大元素数目为7,每个元素都是单字节,所以一个ODT最多能存放7个字节;
- ODT列表个数取决于相同周期下上传数据个数和长度(比如:有两个四字节的变量,那么2*4 = 8,8>7,所以至少要两个ODT列表);
- ODT列表存放的要上传变量的数据信息,包括变量的存放地址、数据长度以及偏移量;
- ODT列表需要转换为DAQ~DTO的形式才能向主设备发送;
- 每个ODT都有唯一的绝对编号来对应一个DAQ~DTO;
- 每个ODT都有一个相对编号来对应一个在DAQ列表中的位置;
- 一个DAQ列表中,总的ODT不能超过254。
- 同一个DAQ列表的不同ODT享有同一个事件通道和预分频值;
- 不同DAQ理论上有不同的事件通道和预分频值,但是预分频值的作用是将数据的上传周期成倍扩大,所以当两个DAQ上传周期成整数倍关系时,可以共用一个事件通道。
- 下面就来举例理解这些上面这些概念
场景:假如我们要依次上传五个数据,如下:
数据变量名 | 字节数(byte) | 上传周期 |
---|---|---|
byte0 | 1 | 10ms |
word1 | 2 | 10ms |
long2 | 4 | 10ms |
long3 | 4 | 20ms |
long4 | 4 | 20ms |
- 根据数据上传周期确定DAQ的个数:10ms、20ms两个周期,所以DAQ一共有2个;
- 根据数据个数和长度确定ODT的个数:总长度 = 1+2+(3*4) = 15,15/7 = 2…1,所以最少要3个ODT;
- 根据上传周期确定DAQ事件通道和预分频值:因为10和20成倍数关系所以可以用一个事件频道,10ms预分频值为1,20ms预分频值为2.
- 启动DAQ模式后,数据采集的过程如下图:
- 当启动数据采集后,ECU就按照所规定的的周期自行上传DAQ~ DTO消息。DAQ~ DTO消息的数据场由8字节构成,第一个字节就是PID,标识了这帧消息所对应的ODT,而后7字节即对应该ODT七个元素规定地址上的一个字节的数据内容,从而就完成数据内容的上传。