XCP协议中关于同步数据传输的理解和应用

您所在的位置:网站首页 odt课程全称 XCP协议中关于同步数据传输的理解和应用

XCP协议中关于同步数据传输的理解和应用

2023-12-29 13:21| 来源: 网络整理| 查看: 265

根据数据传输的方向不同,XCP协议中,同步数据传输可以分为如下两种类型:

DAQ: ECU(slave)向上位机(master)发送数据,实现数据采集

STIM: 上位机(master)向ECU(slave)发送数据,实现数据的刷新

本文重要描述对同步数据采集DAQ方式的理解和应用。

一个完整的DAQ数据采集流程有两个步骤:

1.上位机发送要获取的数据地址和长度等信息给ECU做采集前的初始化

2.ECU在做完初始化后,周期性的把数据发送出来

        实现周期性的数据获取,需要有一个数据结构来维护发送数据的地址和长度,这个数据结构在XCP中成为ODT(Object Description Table),该结构中的每一个条目代表一个数据所处的地址和它的长度,XCP中称之为ODT Entry。

 

        从实施的角度来讲,ODT代表的就是操作数据时使用的数据结构,而从通讯角度讲ODT就是每一帧数据,因此不同的传输层ODT的参数也不尽相同,通过CAN来举例,ODT从通讯角度代表着一帧CAN报文,而ODT Entry代表一个数据即CAN报文中字节的内容,因此,对于CAN来说,一个ODT里边最多能容纳7个ODT Entry(每个Entry代表的数据为一个字节,剩余一个字节位于首字节是PID)。

        应用中希望一个周期内采集非常多的数据(超过一帧),那么就需要把多个ODT组合起来,这种组合在XCP中称为DAQ List。从通讯的角度看,它对应了很多帧的报文,每个报文的第一个字节存放着PID用于识别不同帧所对应的ODT编号,不能放数据。         有了DAQ/ODT以后,要被上传的数据就可以通过他们来索引并获得,获得这些数据以后就需要一定的周期或事件来触发上传,这些周期任务和事件在XCP中被称为Event。

 

         有3个不同周期的任务,可以为5ms/10ms/100ms,他们分别能触发DAQ0/DAQ1/DAQ2进行数据上传,每个DAQ中都有若干个ODT,它们相互独立,编号都是从0开始,每个ODT中的ODT Entry也相互独立,编号从0开始。         上位机对ECU XCP进行DAQ初始化其实就是把想要采集的数据的地址和长度按照设定好的周期填充到每个DAQ/ODT中的ODT entry里边,初始化完毕后,XCP协议就可以在Event(5ms/10ms/100ms)中定期的利用这些信息将地址上指定长度的数据发送出来。

        DAQlist 分为静态的(static),动态的(dynamic)。

        静态DAQ lists:DAQlist和ODT表在ECU中是被永久固定的,他们在ECU代码中被设定,在A2L中。被描述基本上DAQlist的个数和event的个数相同。例如下图,DAQlist0 配置10ms的event,有最大俩个ODTs,最大的ODT列表数2   

 

动态DAQ lists: DAQlist和ODT表在ECU中不是被永久固定的,是在ECU中可以动态分配的内存空间。 两者的区别如下:

 

 

Master通过如下四个命令进行动态DAQ list的ECU内存空间配置 FREE_DAQ    :清空动态DAQ配置     ALLOC_DAQ    :配置DAQ list     ALLOC_ODT    :给一个DAQlist配置ODTs         ALLOC_ODT_ENTRY        :给ODT配置ODT列表         以上四个命令,对应静态DAQ 只需要一个命令就可,也就是清空DAQlist                                       CLEAR_DAQ_LIST        :    清空静态DAQ 的list                

静态和动态DAQ配置序列如下:

 

动态DAQ数据传输过程实现: 具体分为三个阶段,分别为获取通信模式,设置内存空间和接收传来的地址和数据。 程序回复给Master相关DAQ的工作模式和初始化后的相关信息,包括标定系统内可用的DAQ通道数和允许发送的最大包数。 在slave接收到FREE_DAQ这个命令后,程序要对主从节点的会话状态重新进行设置。 Master会传入本次数据观测的DAQlist数据,ODT数量和每个ODT的列表数。 程序需要根据传入的顺序将他们存入相应的结构体中,并且在程序中进行动态申请所需的内存并在传输空间后释放这些内存。 然后Master发送SET_DAQ_PTR和WRITE_DAQ命令来传入要观测数据的地址和长度。 在获取这些信息后,程序会在周期性任务中(event)向传输网络发送这些数据对应的地址和长度。 以上,DAQ实现了对应于应用程序中所观测变量的动态采集,这种观测方式只需要对slave提供一次数据相关的信息就可以采集该变量在程序中的变化。

同步数据传送时用到的命令及时序

以上,是个人理解,仅供参考,后续会推出XCP协议DAQ方式以RESUME形式的应用。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3