[Ethernet in CANoe]2--如何在CANoe中去仿真CP版本的SOME/IP通信
上篇文章(Ethernet in CANoe]1--SOME/IP arxml文件格式的区别)介绍了SOME/IP的两种类型的数据格式,根据作者目前的项目经验,目前在CANoe V18之前的版本,CP版本的arxml是最方便实现SOME/IP以太网仿真的。作者目前只有CANoe V17的license,所以本片文章是在CANoe 17上基于CP版本的arxml去做仿真模拟。
目录
1.创建带Ethernet的CANoe工程:
1.1 License需求:
1.2 增加以太网通道:
1.3 添加SOME/IP的arxml文件:
1.4 添加Eth的DLL文件:
2. 开启SOMEIP的通信仿真:
2.1 检查SOMEIP报文:
2.2 CAPL更新:
1.创建带Ethernet的CANoe工程:
1.1 License需求:
首先在工作的电脑上需要安装CANoe 17 SP5,然后需要CANoe pro 17和CANoe Option/Ethernet 17的license,如下图所示:

当然低于17版本的license也是可以实现SOME/IP仿真通信的,差别不大。
1.2 增加以太网通道:
本文是在已有的CANoe工程中去添加一路以太网通道,主要步骤如下所示:
在工具栏的"Hardware"中去选择"Channel Usage",然后在弹出的CANoe Options的窗口的"General"选项中去选择点击"Eth"的下拉框,选在一路Eth,然后点击"OK" 。

这样一路Eth就添加成功了,可以在simulation的界面看到新加的Ethernet的Networks,右击"Ethernet Networks",选择"Add...",然后添加"Ethernet1":

1.3 添加SOME/IP的arxml文件:
点击"Ethernet1"下方的"Databases",然后右击,选择"Import Wizard",然后选择对应的CP类型的arxml文件,点击"Open",最后在Avaliable nodes中将所有自动生成的节点转到右侧的Assigned nodes:

最后点击"Next"自动在Etherner通道生成arxml中包含的三个节点:

这个时候,带SOMEIP通信的CANoe工程就差最后一步了。
1.4 添加Eth的DLL文件:
CANoe自带了一些以太网相关的DLL文件,这些文件可以支持标准数据库的以太网的正常底层通信,对于SOMEIP的通信,需要添加如下的相关DLL(在CANoe的安装目录下去找到):“C:\Program Files\Vector CANoe 17\Exec32\CANoeILNL_AUTOSAR_Eth.dll” 和“C:\ProgramData\Vector\AddOn Packages\Vector AddOn\vModules\AsrPDUIL.vmodule”。
操作步骤如下:
在以太网通道上右击,然后选择"Assign Module to all Network Nodes";

然后在上述路径去选择添加CANoeILNL_AUTOSAR_Eth.dll和AsrPDUIL.vmodule,最后点击OK即可。

2. 开启SOMEIP的通信仿真:
2.1 检查SOMEIP报文:
上述Ethernet的CANoe工程设置完成后,记得先保存一下。 然后启动CANoe工程,在Trace窗口监控一下SOMEIP通信,来验证通信是否正常。可以看到SOMEIP报文如下图所示:

但是可以看到Trace窗口Source IP为172.16.3.61都是紫色的报文,点开一看都是offer service这种,真正的someip报文信号等有效信息都没有看过,这该如何操作呢?
2.2 CAPL更新:
在上述SOMEIP通信异常的情况下,我们需要在CAPL中去写点简单的代码来实现SOMEIP的正常通信,具体如下:
on start
{dword pev;dword pev1;dword pev2;dword pev3;pev = SomeIpGetProvidedObjectHandle( "Ethernet1::sif_774::ParkingFcnSettingSts" );SomeIPSetProperty(pev, "CycleTimeMs",100); pev1 = SomeIpGetProvidedObjectHandle( "Ethernet1::sif_776::AomCommandSts" );SomeIPSetProperty(pev1, "CycleTimeMs",50);pev2 = SomeIpGetProvidedObjectHandle( "Ethernet1::sif_775::DrivingFcnSettingSts" );SomeIPSetProperty(pev2, "CycleTimeMs",200); pev3 = SomeIpGetProvidedObjectHandle( "Ethernet1::sif_777::SDmapSDLaneInfoSts" );SomeIPSetProperty(pev3, "CycleTimeMs",50);
}
编译后重新启动CANoe,然后再去Trace窗口去检查SOMEIP的通信:

具体的SOMEIP报文的结构表示的是啥意思呢,以及为什么要在CAPL中去更新这段代码,我们下篇文章在介绍,敬请期待!!!
(PS,对SOMEIP不甚了解的朋友可以参考我之前的记录笔记Ethernet 系列(12)-- 基础学习::SOME/IP)先行了解一下。
