译者 | Jessie
公司出品 |叹道
知圈 |进“溜冰车身群”请加微yanzhi-6,附注车身
对今后智能电动汽车促进的电动汽车电子零件这一现代电动汽车专精的结构调整升级换代,其繁杂的结构设计经营理念早已从面向全国使用者转为面向全国合作开发人员。即,对电动汽车使用者来说只须要输出相关的服务项目市场需求方可。而同时实现该服务项目具体内容的工作则是合作开发人员如果考虑的问题。
对今后的智能电动汽车而言,其重要的ECU如果同时存在如前所述如前所述新式合作开发构架下的 AP Autosar 的 ECU 和如前所述现代电动汽车应用软件构架的 CP Autosar,通过导航调制解调器中的 SOME/IP 此类协定通讯同时实现AP Autosar 应用软件架构下的Signal2Service 、Publishe/Subscribe操作方式。因而,被第三代智能电动汽车应用领域所重点项目关注的面向全国服务项目的构架SOA (AP Autosar)一般来说也与 SOME/IP 经常存取到一起进行合作开发。
不过历史事实是,随着智能电动汽车对皮先卡和布吕马通讯要求的不断提高,其不论与否或者说须要同时实现面向全国服务项目构架通讯,事实上对不同ECU层之间的数据通讯常常早已不仅局限于CAN此类现代的通讯协定。因为不论从通讯速率(CAN 一般是 512kb/s,CAN FD 能到 1MB/s,而如前所述 SOME/IP 的调制解调器能到1000 Mbps)还是通讯损耗(CAN 是 8Byte,CAN FD 能到 64Byte,而 SOME/IP 能到 1500 Byte)上,CAN通讯都远逊于以太网ETH协定SomeIP。
对SomeIP而言,其通讯方式为Autosar中提及的CSUSB的基本概念,基本原理是在转交方有市场需求TNUMBERV12V4发短信,这样可以避免出现出现过多无谓的数据。SomeIP支持广为的开发工具机能:包括格式化、远距操作方式过程初始化(RPC)、输出输出、服务项目发现(SD)、发布/订户(Pub/Sub)、UDP消息单向。因而,对SomeiP在智能驾驶电动汽车中的合作开发一直都是近来智能驾驶电动汽车合作开发一个重点项目。
本文将以智能电动汽车中智驾域与座舱域通讯示例(含部分标识符说明)说明整个SomeIP合作开发方法。
SomeIP服务项目构架及合作开发流程
结合下图说明整个SomeIP的合作开发模型构架。整个SomeIP从底向上分为Native层、Framework层、应用层。其中,应用层主要包含SomeIP的应用程序及服务项目发现端口。Framework层主要涉及SomeIP服务项目封装,Native层则是包含HAL层主要是将主要的导航控制硬件放到HAL层中,而作为底层操作方式系统(如Linux驱动仅完成一些简单的数据交互)。其中从顶至下包括SomeIP管理模块、通讯矩阵模块、通用APIUSB、SomeIP协定栈。前两个模块主要依赖通用应用USB和SomeIP协定栈模块。这里须要说明的是SomeIP管理模块是一个守护进程,用于为上层APP提供服务项目,同时负责维护SomeIP协定栈连接,SomeIP支持客户端合作开发SomeIP 客户端程序,也支持服务项目端合作开发SomeIP服务项目端程序。同时,SomeIP的通讯矩阵模块同时实现SomeIP所有业务的通讯矩阵合作开发为Plugin形式被其管理模块所加载。SomeIP中的通讯矩阵组件是如前所述通用APIUSB结构设计合作开发的,使用了Core-runtime和Someip-runtime两个组件。而在底层SomeIP协定栈中,以堆栈API中依赖服务项目发现和配置模块。
那么对整个与SomeIP关联的服务项目合作开发流程而言,主要涉及如下几个重要的步骤:
1)市场需求结构设计阶段
该阶段须要市场需求经理提交须要使用SomeIP业务的市场需求,并输出至合作开发工程团队。一般来说情况,市场需求经理给出的SomeIP业务市场需求是一组客户级别的自然语言市场需求,工程团队在拆解操作方式过程中,须要将该客户级别的自然语言解析成合作开发团队能够识别的伪标识符模式市场需求。
2)市场需求合作开发阶段
合作开发工程团队按照市场需求填写SomeIP通讯矩阵文档,判断通讯矩阵与否规范,与否须要修改。合作开发主要如前所述SomeIP的USB进行。
由于Someip协定被第三代智能电动汽车各类ECU中大量使用来进行导航调制解调器的数据通讯。因而,在用someip协定进行通讯时,须要按照someip定义的协定格式进行数据收发和处理,此类协定通讯数据的数据结构类型千变万化,这将会涉及到须要将大量业务数据,并按照someip定义的协定格式进行格式化和反格式化的问题。
格式化:指将数据结构或对象依据事先定义好的规则转换成二进制串的操作方式过程;反格式化:指将二进制串依据相同规则重新构建成数据结构或对象的操作方式过程。对SomeIP而言,均须要将结构体各元素按照顺序格式化到缓冲区内,且格式化的操作方式过程一般来说是如前所述长度Length字段表示结构体中数据元素的字节长度。
对整个SomeIP合作开发而言包括Java端的标识符合作开发和初始化JNIUSBnative底层服务项目同时实现。
①服务项目端与客户端顶层应用服务项目同时实现标识符示例:
someip服务项目端示例、注册回调,启动服务项目端。客户端同时实现逻辑和服务项目端基本一致,只是在回调函数须要标记服务项目与否可用,只有可用的服务项目才能被客户端所订户访问。如果检测到服务项目可用时,只要客户端有业务市场需求,则在市场需求触发后封装请求数据,初始化request方法远距请求到服务项目端进行处理。
对SomeIP协定而言,一般来说须要确保其信息传输安全性,这一安全性保护一般来说须要使用TLS此类安全手段进行防护。如果希望使用TLS传输,则可以在启动服务项目器后初始化配置USB来对设置TLS相关参数进行设置。
②服务项目端与客户端底层服务项目封装同时实现标识符示例:
java是跨平台语言,自不过然会失去对底层的控制,于是想要初始化底层方法,就必须使用native方法间接初始化底层操作方式系统的方法(c,c++同时实现)。native是一个关键字,其修饰的方法只说明不同时实现。native方法须要加载到本地栈中。
本示例中,Java与底层标识符USBnative标识符同时实现须要依赖提前定义的函数库libsomeipnative.so。首先,定义回调函数类Class mCallBack,用以继承SomeIP的服务项目示例监听类SomeIpInstanceListener,在主函数中注册监听,启动服务项目端。并在子函数中同时实现对应方法。
3)市场需求同时实现验证
市场需求验证阶段主要为USB定义Topic和Protobuf文件,编写业务标识符,初始化SomeIP 应用USB同时实现业务机能。
topic用于存取客户端或者服务项目端的具体内容方法。上层应用只须要初始化topic,HAL层服务项目服务项目就可通过topic的Java Native Interface关键字找到对应的指针初始化native服务项目或客户端代理的相关USB。
Topic=Message_Type->Service_id->Instance_id->Method_id
protobuf 提供了C++、java、python语言的支持,采用了二进制字节的格式化方式。保证java和native间格式化的数据能够正确的反格式化。
SomeIP通讯矩阵的结构设计与同时实现
SomeIP通讯矩阵合作开发是整个SomeIP合作开发的核心重点项目,也是难点。整个工程算法结构涉及编译配置,定义服务项目/客户Base类、USB(包含共同属性USB和回调USB),数据类型定义,插件定义,SomeIP协定栈配置文件,日志记录文件,Proto文件等。整个通讯矩阵都要呕通过编译配置通过CommonAPI工具将field文件生成出口文件。
首先,通过SomeIP通讯矩阵中USB描述和部署等定义生成field文件。在应用层和SomeIP通讯矩阵模块进行数据交互中须要进行格式化和反格式化操作方式,因而,须要定义protobuf文件进行矩阵USB描述和数据类型定义。
然后,根据SomeIP通讯矩阵中的部署描述定义,生成topic文件。该文件作为惟一的,用于标识某个服务项目下的某一个示例USB,一般来说是被定义为整型数据uint64。
此外,还要根据SomeIP通讯矩阵中的部署描述定义,合作开发协定栈配置文件,用于对SomeIP的协定栈初始化加载。
如上内容完成后,就须要以一定的通用工具如CommonAPI将USB描述文件通用可读源码文件(一般是C/C++标识符文件)放到源码目录下。当然该目录要同样存放编译器或编译USB文件,以同时实现对标识符的编译。
最后,通过生成的USB文件做对应的服务项目及初始化合作开发,并对对应的服务项目在参考示例文件中进行示例化。
如上图所示为SomeIP通讯矩阵合作开发中的要素分析(以诊断调查问卷为切入点进行访问分析),其中包括在矩阵合作开发中须要的几种服务项目定义,数据类型类型定义,通讯行为定义等。其子项的设置充分考虑了关于对智能驾驶域及智能座舱域原始机能的结构设计关联项(如原子服务项目、通讯数据类型、服务项目发现与初始化等),从服务项目层向底层数据定义的拆解中生成标识符字段。通过服务项目发现、初始化生成的服务项目内容,逐渐形成SomeIp的通行行为标识符。这个操作方式过程类似Can通讯诊断的合作开发,对系统工程师而言,可以从顶层分析分解初始化已形成的标识符数据字段进行部分修改,同时实现在合作开发操作方式过程中嵌入更多有意义的服务项目内容,并扩充其诊断协定列表和通讯矩阵表。