区别于基于UDP的车内通信路由,基于SOME/IP协议的路由增加了服务发现(Service Discovery)和服务发布(Service Publish),那对于测试工程师来说,怎么实现CAN-SOME/IP路由的测试呢?
首先要了解基于SOME/IP协议的路由设计原则,如果功能实现在Ethernet节点,则Ethernet节点为server,网关为client,如果功能实现在CAN节点,则网关为server,Ethernet节点为client,由网关实现Ethernet节点与CAN节点之间的路由。包括两种路由方式:报文路由和信号路由。
那么,CAN报文和SOME/IP报文怎么实现对应呢,举个例子:
在以下示例中,通过SOME/IP header中的ServiceID和MethodID可以关联到指定的CAN报文。
其中:
A代表ServiceID
B代表BusID
C代表CAN MessageID
E用来区分Method,或Event/Notifier 消息
报文路由:CAN报文的payload映射为服务接口的payload。网关实现CAN和SOME/IP协议之间的报文路由,不改变数据内容和数据长度。
信号路由:服务接口中的参数映射为CAN报文中的信号。网关实现不同数据类型之间的转换。
报文路由不涉及信号内容解析,测试输入时可以不加载数据库文件也能完成测试,但是信号路由涉及SOME/IP接口参数的序列化和反序列化,需要加载数据库进行测试。
常见测试点
通信路由主要测试点包括:检查目标网段、报文类型、MessageID、payload length、payload是否正确,路由延迟时间等是否满足要求。
逆向测试的测试点主要有:payload length大于或小于预期,无效ID等
稳定性相关的测试点主要有:高负载,反复上下电,反复休眠等
以CAN-->SOME/IP 报文路由为例,已知某路由信息,测试Payload一致性。
路由信息
源网段(CAN) |
目标网段(SOME/IP) |
MessageID:0x100 DLC:8 |
ServiceID:0x0001 MessageType:Notification EventgroupID:0x0001 NotificationID:0x8100 |
测试步骤
Step1:检查网关是否Offer ServiceID 0x0001
Step2:Tester模拟客户端,订阅ServiceID为0x0001,EventgroupID为0x0001的事件组,检查网关是否回复对应的SubscribeACK
Step3:在源网段模拟发送CAN报文,ID为0x100,data为01 02 03 04 05 06 07 08,检查是否接收到对应的SOME/IP报文
Step4:检查接收的payload与发送的payload是否一致
测试环境
搭建的测试环境要能与DUT建立通信,能控制DUT上下电和唤醒。可以参考以下的测试拓扑来监控DUT的通信,同时仿真Tester节点,模拟CAN和Ethernet节点与DUT进行通信。该套测试系统由CANoe测试软件、VT板卡、VN 5650,VN 16XX,程控电源和DUT组成。
测试脚本
在上述测试步骤中,Tester需要模拟CAN节点和SOME/IP服务客户端,测试脚本的开发可基于CAPL语言和Vector提供的SomeIP_IL.dll文件,分为以下几个步骤来实现 。
❶ 在TCP/IP Stack中,给Tester设置IP/MAC地址
❷ 模拟发送CAN报文
❸调用SomeIpOpenLocalApplicationEndpoint函数,创建一个Endpoint
❹ 调用SomeIpCreateConsumedServiceInstance函数,指定ServiceID和InstanceID
❺ 调用SomeIpAddConsumedEventGroup函数,指定EventgroupID
❻ 调用SomeIpCreateFieldConsumer函数,指定NotificationID,以及当接收到此Notification报文时的回调
❼ 创建回调函数,当接收到Notification报文时,比对payload是否一致
回调函数触发后,数据解析方法示例:
测试结果
CANoe监控报文以及数据处理结果展示:
通过调用SomeIP_IL.dll文件,可以实现Tester与网关之间的服务发现过程,以及服务接口的接收和调用,进一步达到测试的目的。
SOME/IP-->CAN路由的测试原理与上面相似,调用dll文件中的函数,实现模拟服务端的行为,信号路由的测试通过导入SOME/IP和CAN数据库文件,可以实现自动化测试。
以上就是我们给大家分享的CAN-SOME/IP路由测试的相关内容了,任何疑问或是自动化测试需求,都可以随时联系我们噢,感谢大家的阅读~