admin管理员组

文章数量:1589770

什么是IL

简单来讲,IL层主要是描述了信号及报文的行为方式,如发送方式,周期,而这些都定义在DBC中

DBC设置

跟IL层有关的DBC属性有GenMsgILSupport,GenMsgSendType,GenSigSendType,NodeLayerModules等,那么如何在DBC中使用这些属性呢?

1. 没有DBC:File-Create Database-Template:Vector_IL_Basic Template.dbc,这样新建好的DBC就会自动带有跟IL层相关的属性值

2. 已有DBC:File-Import Attribute Definitions,如果有带有IL层属性的DBC,可以直接导入;如果没有,可以选择Vector自带的模板:C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 14.0.83\CAN\MoreExamples\Modeling_Vector_IL\candb

完成之后,可以观察到Network Node,Message,Signal的属性里都有IL层相关的

Node,Message,Signal的关系为:

1. Signal与Message对应,一条message里有多个signal,一个signal只属于一条message

2. Message与Node对应,一个node里有多条message,一个message如果属于一个node的Tx message,则会同时属于另一个node的Rx message

3. 整个CAN网络分为多个Node,message是总线上传输的最小单位(不涉及物理层),signal的发送方式和message的发送方式会相互影响

CANoe设置

1. 新建网络节点(Network Node)

Simulation-Simulation Setup-右键-Insert Network Node

2. 选择新建的节点,右键-Configuration...

Common-Network node选择对应的DBC中存在的Network Node,如果DBC中不存在有关的节点,需先在DBC中创建

Common-Node specification选择对应的CAN文件,CAN文件自己编写,主要是存放一些跟IL层有关的CAPL函数

Components-Add-IL层dll文件,路径在:C:\Program Files\Vector CANoe 14\Exec32

3. 选择新建的节点,右键-Open IL Configuration...

下图圈出来的一些属性都是IL层比较常用的属性,跟DBC中的属性是对应的,当DBC中的属性发生变化时,下图中的属性会跟着变化,但下图中的属性变化时,DBC不会跟着变

4. 选择新建的节点,右键-Open Node Panel...

当Start Measurement之后,如果想要手动发送的报文经过IL层,可以在下图panel中操作

5. 选择新建的节点,右键-Edit...

编辑节点对应的CAN文件,即上面第2点中的CAN文件,IL层有很多capl函数,下面就两三个做简单说明,注意IL层的函数只会作用于经过IL层发送的报文,如果我们用其他方式如IG发送,是不受影响的

1)ILControlInit(): 阻止IL层自动启动,IL默认是打开的(当start measurement之后,支持IL层的报文会在DUT上电后自动发出),只能在on preStart中使用,使用后,报文不会在上电后发出,要想报文发出就要用到ILControlStart(),之后要想再停止发送报文要用到ILControlStop()

2)ILControlStart(): 将报文按照DBC中设置好的属性发送到总线上

   ILControlStop(): 停止报文发送到总线上

通常是满足某个条件(事件驱动)时,使用该函数,比如某个系统变量等于1时,ILControlStart();该系统变量等于0时,ILControlStop();或者按下某个按键,ILControlStart();按下另一个按键,ILControlStop()

还有很多其他的函数,小伙伴们可以自行查阅help文档

IL层相关属性设置

信号的发送方式(GenSigSendType):

GenSigSendType有下面几种情况

1. Cyclic:按照GenMsgCycleTime周期发送(假设GenMsgSendType=NoMsgSendType/not_used)

总线上signal是依赖message进行传输的,所以周期定义在message属性GenMsgCycleTime里

在CANoe Trace窗口观察,该报文确实是按照20ms周期发送:

2. OnWrite:设置信号就发送,无论信号值有没有变化(假设GenMsgSendType=NoMsgSendType/not_used)

默认总线上没有报文,信号值不变(无论是不是默认值),手动发送一次,报文就会在总线上出现一次

3. OnChange: 信号值发生变化才发送(假设GenMsgSendType=NoMsgSendType/not_used)

默认总线上没有报文,一开始当信号值等于默认值,手动发送多次,报文不会在总线出现;当信号值改变,报文只有在第一次信号值改变时在总线上出现一次,改变之后再改成默认值也可以出现

4. IfActive:当信号不等于GenSigInactiveValue时按照GenMsgCycleTimeFast周期发送(假设GenMsgSendType=NoMsgSendType/not_used)

下图GenSigInactiveValue=0,GenMsgCycleTimeFast=40,默认总线上没有报文,当信号值等于默认值时,手动发送多次,报文不会在总线出现;当信号值不等于默认值时,报文会以40ms周期发送,直到报文恢复默认值,报文停止发送

5. xxxWithRepetition:按照GenMsgCycleTimeFast发送GenMsgNrOfRepetition次

1)OnWriteWithRepetition:基本规则与OnWrite一致,发送次数为GenMsgNrOfRepetition

2)OnChangeWithRepetition:基本规则与OnChange一致,发送次数为GenMsgNrOfRepetition

3)IfActiveWithRepetition:基本规则与IfActive一致,当恢复成默认值时发送次数为GenMsgNrOfRepetition

6. NoSigSendType/not_used:不指定信号发送方式,取决于报文的发送方式

报文发送方式(GenMsgSendType):

1. Cyclic:按照GenMsgCycleTime周期发送(假设GenSigSendType=NoSigSendType/not_used)

2. IfActive:当报文某一个或多个信号值不等于GenSigInactiveValue时按照GenMsgCycleTimeFast周期发送,当所有信号值等于GenSigInactiveValue,停止发送(假设GenSigSendType=NoSigSendType/not_used)

3. NoMsgSendType/not_used:不指定报文发送方式,按照GenSigSendType发送

结合发送方式(Combined Send Type):

从上述可知,报文和信号的发送方式是相互影响的,下面我们结合来看几种情况:

1. Cyclic and OnChange: 报文按照GenMsgCycleTime周期发送,当信号值改变时,立刻发送一帧,下一帧与信号值未改变时的最后一帧间隔GenMsgCycleTime,之后仍按照GenMsgCycleTime周期发送

下图GenMsgCycleTime=20ms

2. Cyclic and OnChangeWithRepetition: 报文按照GenMsgCycleTime周期发送,当信号值改变时,立刻发送一帧,然后按照GenMsgCycleTimeFast发送GenMsgNrOfRepetition-1次,发完下一帧与上一帧间隔GenMsgCycleTime,之后仍按照GenMsgCycleTime周期发送

GenMsgCycleTime=2000ms, GenMsgCycleTimeFast=40ms, GenMsgNrOfRepetition=3

3. Cyclic and IfActive: 报文按照GenMsgCycleTime周期发送,当信号值不等于GenSigInactiveValue时,立刻发送一帧,之后按照GenMsgCycleTimeFast周期发送,当报文里所有信号值恢复成GenSigInactiveValue后,等待GenMsgCycleTime发送一帧,之后仍按照GenMsgCycleTime周期发送

下图GenMsgCycleTime=2000ms, GenMsgCycleTimeFast=40ms, GenSigInactiveValue=0

4. Cyclic and OnWrite, Cyclic and OnWriteWithRepetition, Cyclic and IfActiveWithRepetition:与上方列举的类似,区别在于信号发送方式

以上如有问题,请指出,谢谢~~

本文标签: 简单ILcanoelayerInteraction