一、AUROSAR NM概述
网络管理的主要任务是保证网络通信的安全可靠。网络管理可以实现初始化ECU资源,启动网络,检测、处理以及通知网络和节点的状态,协调网络点同步进入睡眠等功能。
AUTOSAR网络管理是一种基于多主的直接网络管理策略。在本策略中,每个网络节点都需基于其在网络中发送或接收到的直接网络管理报文来实现自身的状态转换,实施相应的网络行为。
AUTOSAR网络管理策略通过发送周期性的网络管理报文实现,该网络管理报文在CAN网络中通过广播形式发送。节点通过发送网络管理报文,表征自身需要网络保持唤醒状态。若有某个节点睡眠条件满足,将停止发送网络管理报文,等待向总线睡眠模式(Bus Sleep Mode)转换。若在转换过程中接收到其它节点发送的网络管理报文,该节点需推迟其向总线睡眠模式(Bus Sleep Mode)的转换;若持续一段特定的时间没有接收到网络管理报文,则节点将进入总线睡眠模式(Bus Sleep Mode)。
二、工具介绍
1.使用工具
软件:CANOE12.0
硬件:Vector VN5640
2.CANOE编辑介绍
2.1 Panel编辑
1.新建Panel
2.Panel设计:在新建Panel中添加控件
测试工程中主要用到两种控件:Check Box控件和Input/Output Box控件。
Check Box控件:功能主要用于显示或选择当前选项,可用于勾选需要执行的测试用例;
Input/Output Box控件:功能主要用于输入或显示文本,工程中用于输入一些变量值,如:时间、报文ID等信息,此控件也可用于观测某一软件变量的实时值。
3.系统变量与Panel关联
在CANOE中编辑号系统变量后,可在Panel中自动检索系统或环境变量。Symbol Filter处一般默认为Signal形式,此处选择Variable。
更改成Variable后,可在Symbol处添加所需关联的变量。
2.2 系统变量编辑
1.新建系统变量
2.编辑系统变量
Namespace:定义系统变量组名称;
Name:此系统变量名;
Data type:数据类型,根据自身所需改变;
Initial Value、Minimum、Maximum值可根据实际所需进行更改,也可不填写。
2.3 I/O配置
目前是通过VN5640工具来进行控制输出15电,所以此处需要使用VN5640的IO口进行控制。
在Hardware窗口下打开Vector I/O可进行I/O的编辑。
将配置更改为上图形式,通过DIN2或者DIN3来控制输出电源。
三、工程代码实现
1. Test Module选择
CANoe提供了三种不同的测试模块用于测试,此处选择CAPL Test Module来进行开发。
2. CAPL文件作用
TestcaseSelect.can文件:此文件用于与Panel中的各测试case进行关联,通过系统变量值得改变来控制测试脚本的执行。当Panel中某条测试case勾选时,系统变量值赋为1,在通过CAPL判断来执行此测试用例。
NM.cin文件:此文件用于编辑测试case以及一些通用的函数接口,通过include方式将文件添加至TestcaseSelect.can中来实现测试case步骤的调用。
CDDInfo.cin文件:此文件用于存放诊断请求信息相关的全局变量。
3. 基本函数使用
3.1 系统函数
1. SetTimer
参数:mstimer t:需要在variables全局变量中定义此参数。(mstimer以ms为单位,timer以s为单位。)
long duration:整型常量,可直接输入整数。
主要作用为设置定时器,通过此函数达到周期发送某一报文及周期监测数据。
2.CancelTimer
参数:mstimer t:需要在variables全局变量中定义此参数。
主要作用为关闭定时器,通过此函数实现关闭某一时间的行为。
3.ouput()函数
作用:用于发送报文。
3.2 事件型函数
1. on message*
作用:用于监测报文事件的发生。
2. on Errorframe
作用:用于监测错误帧事件的发生。
3.3 自定义功能函数
1. Testreset()函数
作用:用于将每个测试case中所用到的变量复位成初始值状态,一般放在每条测试case的最后执行。
2. Poweron()和Poweroff()函数
作用:用于控制KL15电输入输出,通过将系统变量中IO口DIN3值进行赋值的方式来改变KL15输入输出。
3. Func_DefaultSession_Req()函数
作用:用于发送诊断请求报文切换至默认会话,并对其响应内容进行判断。
Func_ProSession_Req()函数、Func_ExtSession_Req()函数、Func_DisableTxandRx_Req()函数、Func_EnableTxandRx_Req()函数作用分别用于进行切换至编程会话请求、扩展会话模式请求、禁止通信功能请求和开启通信功能请求。
4. Func_SendSecurityAccsess_Req(int SecurityLevel)函数
作用:用于发送安全访问请求Seed值并根据Seed值计算Key值。
5. Func_CheckSeed(long primitivesize,byte primitiveRaw[],int SeedArraySize)函数
作用:用于判断Seed值是否为0以及长度是否正确。
6. Fun_WaitForDiagResponse(diagRequest* req)函数
作用:用于判断诊断响应。
3.4 诊断功能函数
1. diagSetTarget()函数
参数:char ecuName[]:填写所调用的cdd文件名。
作用:通过添加此方式来获取cdd文件名,从而通过cdd来发送诊断命令。
2. diagSendRequest ()函数
作用:通过物理寻址方式请求诊断服务。
3. testReportWriteDiagObject()函数
参数:diagRequest req:诊断请求。
作用:用于将诊断请求命令输出至测试报告中。
4. testWaitForDiagResponse()函数
参数:diagRequest req:诊断请求;timeout:超时时间。
作用:用于在超时时间内等待诊断请求命令的响应。
5. GetLastResponseCode()函数
参数:diagRequest req:诊断请求。
作用:获取最近一次诊断响应的值。
6.DiagGetPrimitiveData()函数
参数:diagRequest req:诊断请求;byte* buffer:响应的数据内容;buffersize:响应内容大小。
作用:用于将获取的诊断响应信息存放至字节型的数组内,便于分析数据准确性。
3.5 等待报文事件及时间获取函数
1.testwaitfortimeout()函数
参数:dword atimeout:等待的时间(单位ms)
作用:用于测试步骤中等待一定时间的功能。
2. testWaitForMessage()函数
参数:aMessageId:指定的报文ID;dword atimeout:等待的时间(单位ms)
作用:用于在超时时间内等待指定的报文事件。
3.timenow()函数
作用:获取当前的时间。
3.6 测试流程函数
1. testCaseTitle()函数
作用:在测试报告中添加测试case的标题。
2. testCaseDescription()函数
作用:在测试报告中添加此测试case的描述或目的。
3.teststep()函数
作用:用于在测试报告中添加测试步骤说明。
4.teststeppass()函数
作用:在测试报告中输出测试成功的函数。
5.teststepfail()函数
作用:在测试报告中输出测试失败的函数。
3.7 测试case函数
1. TC_DataFieldtest_Remote()函数
作用:数据场内容:case1远程唤醒。
2. TC_DataFieldtest_Local()函数
作用:数据场内容:case2本地唤醒。
3. TC_SendingCycletest_Remote()函数
作用:发送周期:case1远程唤醒。
4. TC_SendingCycletest_Local()函数
作用:发送周期:case2本地唤醒。
5. TC_NMAddrtest()函数
作用:网络管理地址范围测试
6. TC_BSMmodetest()函数
作用:BSM状态测试。
7. TC_BSMtoRMSmodetest_Remote ()函数
作用:BSM-RMS:case1远程唤醒。
8. TC_BSMtoRMSmodetest_Local ()函数
作用:BSM-RMS:case2本地唤醒。
9. TC_RMStoNOSmodetest_Remote ()函数
作用:RMS-NOS:case1远程唤醒。
10. TC_RMStoNOSmodetest_Local ()函数
作用:RMS-NOS:case2本地唤醒。
11. TC_RMStoRSSmodetest_Remote ()函数
作用:RMS-RSS:case1远程唤醒。
12. TC_RMStoRSSmodetest_Local()函数
作用:RMS-RSS:case2本地唤醒。
13. TC_NOStoRSSmodetest()函数
作用:NOS-RSS测试。
14. TC_RSStoNOSmodetest ()函数
作用:RSS-NOS测试。
15. TC_NOStoRMSmodetest ()函数
作用:NOS-RMS测试
16. TC_RSStoRMSmodetest_Remote ()函数
作用:RSS-RMS:case1远程唤醒。
17. TC_RSStoRMSmodetest_Local ()函数
作用:RSS-RMS:case 2本地唤醒。
18. TC_RSStoPBMmodetest_Remote ()函数
作用:RSS-PBM:case1远程唤醒。
19. TC_RSStoPBMmodetest_Local()函数
作用:RSS-PBM:case2本地唤醒。
20. TC_PBMtoRMSmodetest_Local ()函数
作用:PBM-RMS:case1本地唤醒。
21. TC_PBMtoRMSmodetest_Remote ()函数
作用:PBM-RMS:case2远程唤醒。
22. TC_PBMtoBSMmodetest_Remote()函数
作用:PBM-BSM:case1远程唤醒。
23. TC_PBMtoBSMmodetest_Local ()函数
作用:PBM-BSM:case2本地测试。
24. TC_WakeupSourcetest ()函数
作用:唤醒源遍历测试。
25. TC_DisabledTxandRx_test ()函数
作用:28服务禁止通信测试
26. TC_DisabledTxandRx_EnableTxandRx_test ()函数
作用:28服务开启通信测试。
27. TC_DisabledTxandRx_Timeout_test ()函数
作用:禁止通信后诊断超时测试。
28. TC_DisabledTxandRx_DefSession_test ()函数
作用:禁止通信后切换至默认会话测试。
29. TC_ProSessionCommand_test ()函数
作用:编程模式测试。
30. TC_PBMtoBSM_Wakeup_abnormal_test ()函数
作用:PBM-BSM异常报文干扰测试。
31. TC_Unexpected_Frame_Wakeup_test()函数
作用:非预期帧唤醒测试。
四、工程使用说明
1. 打开CANoe后,需要将波特率调整至与被测ECU相同。
2.点击Start运行后,需要确认以下参数是否符合需求规范要求。
3.确认左侧输入变量无误后,可根据自身需求勾选右侧测试用例。
4.点击TestCaseSelect中的运行按钮即可开始进行测试。