大数跨境

换个方式在CANoe中实现SOA仿真

换个方式在CANoe中实现SOA仿真 怿星科技
2020-04-10
3
导读:三步走战略,轻松实现SOA仿真

既然是换个方式,那我们先看下之前是怎么在CANoe中进行SOA仿真的。



在车载以太网和SOME/IP兴起之前,我们若想要在CANoe中仿真传统CAN /LIN总线,首先会在CANoe Simulation Setup中新建总线和仿真节点,随后依次添加Database、交互层dll文件、CAPL文件、设计Panel面板和交互的系统变量等,配置全部完成后,就可以在CAPL中开始访问各类对象实现目标功能了(参考《总线仿真,还可以这样玩!》)。放张图帮助大家理解。



现在,假设我们要用同样的方法去实现SOA仿真,是不是把数据库换成SOME/IP的ARXML(或者FIBEX)数据库并加载SOMEIP_IL.dll就可以了呢?答案是一定的。但是Hold的住吗?Hold不住,此种方式下,Consumer和Provider的概念如何体现?中间件的概念、松耦合的概念如何体现?复杂数据类型又如何实现?数据库修改又该如何操作?




在这种情况下,新的方式/方法必将诞生。


咱们首先从概念层面来看下“升级后”的需求变化。


图片来源:Vector


在这些概念变换Database >> Data Source、ECU/Node >> Participants、Frame/PDU/Signal >> Communication Object(CO) 、Interaction layer(IL) >> Binding中,前者是传统概念,后者是SOA中的新兴概念。这些新概念都在Communication Setup中进行了体现,包括Endpoint概念。



通过上图,我们能看出需求的变化。




ok,铺垫了这么久,终于要上干货了!


别慌!小编这里先要对两个名词着重介绍一下:

Communication Setup:熟悉CANoe的工程师都清楚,CANoe里面有Measurement Setup和Simulation Setup,这两个都是配置环境,Communication Setup和他们一样,同样也是一种配置环境,用来配置SOA仿真的各个部分。其实标题中所谓的“换”也就体现在这里,也就是Simulation Setup >> Communication Setup。从下图标注的位置可以进入到Communication Setup。


vCDL:全称叫Vector Communication Description Language。顾名思义,vCDL是Vector提供的一种对SOA通信进行描述的语言,通过vCDL可以编写后缀为.vCDL的Data Source来代替ARXML用在CANoe仿真中。


接下来,重点来咯!我们将通过三步曲来换个方式进行SOA仿真:Data Source导入/设计/修改 >> 仿真配置和程序设计 >> 仿真结果分析。





Data Source导入/设计/修改
“导入”就很简单了呀,当你有了Data Source(ARXML/vCDL),就可以直接从下图入口导入了,如图操作(注:下图是CANoe12.0 sp4的界面,与CANoe11.0的界面区别较大)



“设计”的话,我们通过vCDL来实现。


写vCDL需要文本文档编辑器,推荐使用Notepad++,并按照下图导入vCDL的自定义语言格式(https://zdrv.com.cn/3JaVIb)。



篇幅原因,小编无法详细讲解vCDL的语法,大家可以浏览下Help文档中对vCDL的语法描述,和小编一起研究。Help路径在此:



下面小编简单介绍下vCDL内容结构,给大家抛砖引玉。Vector也提供了Demo给大家,CANoe 11.0之后版本的用户在自带Demo工程SOA文件夹下可以找到。


如上图,vCDL文件中主要有三个命名空间,分别为Participants、Services和DataTypes。

在Participants下面这样去定义,表明几个participant和其关联的service。


在Services下面这样去定义,表明服务的服务接口和binding关系,服务由谁提供由谁消费。



然后在DataTypes下面这样去定义一系列datatype。比如服务接口:



比如一些编解码方式,[attribute]里面定义的是一些属性。



看到这里是否有疑问?为什么没有服务IP和ID的信息呀?这个其实也是可以设计的,大家可以在Help文档中vCDL语法介绍的SOME/IP Binding目录下找到编写规则,如下图。



图片来源:Vector


目前来说,建议大家暂时先做纯抽象层的SOA仿真,如下图是纯抽象层仿真的示意图,不带以太网应用层以下的协议内容。后期小编再给大家分享带以太网应用层以下参数的仿真方法。


图片来源:Vector

对于DataSource的“修改”工作,包括vCDL和ARXML,这里分享个强大的工具,叫Communication Object Editor,大家可以在这里修改各类通信对象。



但是要注意的是,Communication Object Editor不会将vCDL或者ARXML的源文件改掉,而是通过在工程中附加***.vCODM的描述文件来实现的修改,这些文件可以在_COData_***文件夹中可以找到。所以只能是工程中修改工程中使用哦。





仿真配置和程序设计

在讲这一步之前,先要给大家看下在Communication Setup中通过C#仿真的基本框架。



我们使用C#将仿真程序写在Application Model中,其他的交互经由dll文件实现访问。那么现在可以思考一个问题。我们是不是可以像IT行业一样在Visual Studio中去写仿真程序,使用C#通过调用dll就可以完成应用程序的设计了?Yes,确实是这样做的,我们在Visual Studio中将仿真程序写好,编译通过,然后将cs文件加载到Communication Setup中就可以了。这个时候,程序员只关心程序的实现,而无需关心数据具体从哪里来到哪里去,只关心程序需要提供什么服务,消费什么服务,然后通过dll中的接口进行调用即可。


那么怎么做呢?大家可以先参考小编总结的一个设计流程(如下图),先完成基本的仿真配置,再进行程序的设计。



注意上图中空的C#文件不是随便新建就可以,那么从哪里来?小编建议使用Vector的Demo工程(如下图),通过ApplicationModels.sln去部署C#程序。将其编译通过后添加进去,按右边的拖拽操作之后,系统变量和Data Source就自动在工程文件夹中转化为dll了,在Visual Studio工程中引用它们就可以了。


这个工程有调用CANoe PostCompiler来对C#文件进行编译校验。


打开这个解决方案(如下图),会看到引用结构中有各类dll,包括CANoe的内核、系统变量、DataSource等。



在这里,小编要灵魂发问一下:如果我要用protobuf编解码方法或者json来序列化和反序列化一个服务的payload,该怎么做呢?


——其实直接加protobuf或者json的C#的源文件或者dll就可以啦。



那么下面就分享C#编程SOA的一些方法,供大家参考:



然后再分享一个CANoe.Net编程的Demo,可以用来做按键控制和打印调试。

E.g,检测一个Key事件,并调用Write函数打印信息到CANoe Write窗口

    [OnKey('g’)]

    public void get_field_1(char ch)

    {            

        Output.WriteLine(“get field_1 value”);   //Write函数,

    }


更多.Net编程的方法参考Help,Help在此:





仿真结果分析
下面解读下小编做的一个Demo:通过vCDL写的一个.vCDL的Data Source,里面定义了participant和service,service包含了Method、Event和Field。然后通过C#调用了vCDL中的服务进行SOA仿真。

首先我们看一下Method的调用,图中用Panel面板做执行输入,输入了一个目的地信息(home),这个信息经由ADAS通过Method发给CAMF,CAMF通过判断home的位置和当前车辆的位置,然后给出一个判断,通过Method返回告知ADAS下一个路口该往右转还是往左转。



同样的,我们还可以做Event和Field的验证。比如下图通过Panel更改Event的值,然后触发通知给Cosumer。



Field的验证通过Setter远程更改Provider的Field1的值,然后通过Getter去查询这个值是否被更改。



好啦,今天的分享就到这里啦,主要是纯抽象层的一些数据验证和通信交互SOA仿真,后续会给大家分享完整的带以太网全协议层参数的通信交互仿真(例如下图)。



ps:最后给大家预告一下,Vector即将发布CANoe 13.0,相信会给我们带来更大的惊喜,尤其SOA仿真方向,所谓工欲善其事,必先利其器,这种新的SOA仿真方式一定会极大的降低大家进行SOA仿真的复杂度,提升工作效率。



我们下次再见咯~



相关精彩推荐:

总线仿真,还可以这样玩!

给CANoe编程上点套路 – CAPLdll

在CANoe中开极品飞车是什么感觉?

当Python遇到CANoe

CANoe与Matlab/Simulink联合仿真

浅谈Visual Sequences在自动化仿真中的运用

汽车上为什么非要用SOA?



【声明】内容源于网络
0
0
怿星科技
让智能汽车研发更高效!
内容 428
粉丝 0
怿星科技 让智能汽车研发更高效!
总阅读694
粉丝0
内容428