3. 帧格式详解
-
MessageID (32bit)
类似CANID主要用于区分不同的服务和服务接口;Message ID对于整个系统来说是唯一的
用SOME/IP来远程控制汽车娱乐音响系统里的音乐播放器播放下一首歌时,音乐播放器就是用Service ID表示,而切换到下一曲的动作就是Method ID
-
ServiceID(16bit):服务ID
-
MethodID(16bit)
-
Bit15:0 Method; 1 Event或Notifier
-
-
-
Length(32bit)
表示Request ID至Payload的字节长度;8 + Payload的长度
-
RequestID(32bit)
用来响应特定的数据请求和发送,Rte_Cs_TransactionHandleType
-
ClientID(16bit)
用来区分特定的车载ECU的客户端,在整车系统中该值必须唯一
-
SessionID(16bit)
主要对于Request和Response类型的通信协议的多次调用,每调用一次,sessionID增加1,到0xFFFF归0
-
-
ProtocolVersion(8bit)
-
表明当前的SOMEIP协议版本信息,当前为0x01
-
-
InterfaceVesion(8bit)
-
表明服务接口主版本信息
-
-
MessageType(8bit)
表明具体的通信类型
-
ReturnCode(8bit)
主要用来指明通信中的相关错误的信息
-
Payload
-
由事件的数据元素或方法的参数组成,大小取决于所使用的传输层协议
-
将结构化的数据按照一定规则进行排序,将排完序的对象以一定形式封装到SOME/IP报文Payload中,发送给网络中。
-
接收端收到后,通过反序列化将SOME/IP Payload按一样的排序规则重新组合成结构化数据
-
CAN没有结构化数据这种概念,但为了实现一组功能相关信号打包在一起,从而引入信号组的概念,信号组就是人为的将CAN信号重组成结构体的一种做法。
-
SOME/IP自身有序列化和反序列化的机制,因此SOME/IP通信行为中是绝对不会存在信号组的,所以如果你在设计CP Arxml后出现信号组的属性,那么这个Arxml就不在是SOME/IP,而是类CAN的一种基于信号的以太网通信。
-
4. 序列化/反序列化
数据在AutoSAR的定义一般都是用PDU的形式存在的定义了一组大小可以配置的数据。典型的应用就是CAN通信,一般一个PDU代表了一帧报文,一般8个字节或者CANFD中64个字节。同样在以太网通信中数据从PDUR到COM层也是基于PDU来传输的。
在COM层的数据也是以单个的信号进行数据传输的,因此在序列化过程中要在数据到COM层之前将SomeIP传输的复杂的数据类型通过序列化的操作解析成单个的数据信号,并按照定义的位置和大小映射到具体的PDU中特定的位置,此时在PDU上就是一个个的紧密排列的信号,而在COM层中直接对具体的信号操作便会在PDU中更新特定位置特定长度的信号。
而接收的时候,PDU中的信号会在COM层更新到特定位置特定长度的对应的信号,然后在RTE层根据数据的反序列化操作经SomeIP传递的数据进行整合,在APP层实现对一个结构体、数据或者单独一个信号的操作,从而完成数据的传输。
-
定义
-
序列化是指将数据结构或对象按定义的规则转换成二进制串的过程。
-
反序列化是指将二进制串依据相同规则重新构建成数据结构或对象的过程。
-
-
目的
-
使数据按照固定格式进行编排成为字节序,实现数据在网络上的传输
-
-
实现
-
软件组件将数据从应用层传递到RTE层,在RTE层调用SOME/IP Transformer,执行可配置的数据序列化(Serialize)或反序列化(Deserialize)。
-
SOME/IP Serializer将结构体形式的数据序列化为线性结构的数据;SOME/IP Deserializer将线性结构数据再反序列化为结构体形式数据。
-
在服务端,数据经过SOME/IP Serializer序列化后,被传输到服务层的COM模块;
-
在客户端,数据从COM模块传递到SOME/IP Deserializer反序列化后再进入RTE层
-
-
注意
-
大小端问题:网络通信使用大端,Payload则是用户自主定义的内容,自行决定大小端
-
内存对齐与填充:4字节对齐方式进行数据传输,主要目的是提高传输效率
-
5. TCP连接注意点
-
客户端在SOME/IP通信前首先需要建立TCP连接
-
客户端负责在失败时重新建立TCP连接
-
当需要断开连接时,由客户端发起断开连接请求
-
当使用TCP连接的所有服务不再可用(停止或超时)时,客户端应关闭TCP连接
-
服务器在停止所有服务时不应停止TCP连接,给客户端足够的时间来处理控制数据以关闭TCP连接本身
-
如果客户端没有主动关闭TCP连接,而服务器关闭TCP连接,那么客户端会尝试重新建立连接