深入浅出学习CAN系列-创建CANoe工程
控制器区域网络(CAN总线)是实现通信的神经系统。
反过来,“节点”或“电子控制单元”(ecu)就像身体的各个部分,通过CAN总线相互连接。一个部件感知到的信息可以与另一个部件共享。
在汽车CAN总线系统中,ECU可以是发动机控制单元、安全气囊、音频系统等。一辆现代汽车可能有多达70个ECU,每个ECU都有需要与网络其他部分共享的信息。
CAN总线系统使每个ECU能够与所有其他ECU通信,而无需复杂的专用布线。
前言
本文主要借助CANoe工具,新建一个工程,来帮助大家理解CAN总线的相关知识。具体内容是关于节点、报文、信号是怎么创建的,下面可以看一下工程运行之后的报文显示结果及面板变量的操作。
首先可以看到CAN1口周期性地发送了报文EngineStatus,其中有两个信号,Velocity和IgnitionStatus。面板变量的初始状态如图所示。


随后,我们在面板将LockRq打开,也就是将车解锁。这时候,我们可以看到LockState按钮变灰了,意味着车辆状态是unlocked。同时可以看到CAN1口发送了报文LockingRq和LockingState。其中信号LockRequest值为1,意味着发出了解锁的请求,LockState值为1,意味着车是解锁状态。具体关于信号赋值的意义,可以查看下面关于value tables的创建。


随后,我们在面板将按钮Ignition Start打开,也就是将车辆启动,然后滑动Velocity的滑动条,使得车辆速度为61 。这时候报文检测到车辆已经启动,且车速大于15,就会将车辆自动上锁,所以LockState按钮又会变成绿色。同时我们可以看到报文EngineStatus中的两个信号Velocity和IgnitionStatus也随之更新。


随后,我们按一下Roll up按钮,也就是升起车窗,可以看到信号WindowPosition的值在递减,直到减为最小值0,同时绿色长方条也在形象地展示窗户在被升起的过程。Roll up按钮被按下的时候,信号WindowRequest的值为1,即发出升起窗户的请求。Roll up按钮松开后,信号WindowRequest的值为0,因为不是视频展示,所以看不到这个变化。



随后,我们按一下Roll down按钮,也就是降落车窗,可以看到信号WindowPosition的值在递增,直到增加为最大值15,同时绿色长方条也在形象地展示窗户在被降落的过程。Roll down按钮被按下的时候,信号WindowRequest的值为2,即发出降落窗户的请求。Roll down按钮松开后,信号WindowRequest的值为0,因为不是视频展示,所以看不到这个变化。


看了以上的结果展示,让我们来看一下工程创建的步骤吧。
01、创建数据库
在CANoe中,点击Tools,选择CANdb++ Editor,启动CAN数据库编辑器。选择File|Create Database,然后选择一个模板去新建数据库。这里可以选择模板EmptyTemplate.dbc。
02、创建ECU节点
在整体视图窗口左侧窗格的树状视图中选择“Network Nodes”,右键新建节点。

03、创建Messages报文
在Overview窗口左侧窗格的树视图中选择“Messages”,右键单击它,然后选择New。新建5个报文。

注意设置报文的DLC(Data LengthCode).选择Transmitters选项卡并单击[Add]。选择“Engine”,然后单击[OK]。


其余报文的设置:
LockingRq
DLC =“1”. transmitter:Console
LockingState
DLC =“1”.transmitter:Doors
WindowRq
DLC =“1”.transmitter:Console
WindowState
DLC =“1”.transmitter:Doors
04、创建信号signals
创建6个信号来表示我们刚刚创建的报文中的数据。
在Overview窗口左侧窗格的树形视图中选择“Signals”,右键单击,选择New。
设置信号如下:

05、创建value tables
可以为每个信号制作数值表,以象征性地表示不同的值状态。我们将为5个信号创建一个数值表。
1)选择View | Value Tables。
2)右键单击空白页面的任意位置,选择New,创建一个数值表。
3)设置数值表如下:
Name = VtSig_IgnitStatus
•在“Value Descriptions”标签页中,两次单击“Add”按钮。
•将“0x0”的description替换为“Engine Off”
•将“0x1”的description替换为“Engine On”

同理,其余数值表如下:




回到Overview窗口。
-
双击“Signals”下的“IgnitionStatus"”。在弹出的窗口中,在value tables的下拉框中选择“VtSig_IgnitStatus”。单击[OK]。
-
双击“Signals”下的“LockRequest”。在出现的窗口中,在value tables的下拉框中选择“VtSig_LockRequest”。单击[OK]。
-
双击“Signals”下的“LockState”。在出现的窗口中,在value tables的下拉框中选择“VtSig_LockState”。单击[OK]。
-
双击“Signals”下的“WindowPosition"”。在出现的窗口中,选择“VtSig_WindowPosition”,单击[OK]。
-
双击“Signals”下的“WindowRequest"”。在出现的窗口中,选择“VtSig_WindowRequest”,单击[OK]
06、关联数据库
在CANoe中选择“Simulation”标签页,然后单击Simulation Setup。
2)展开右侧窗格的树状列表,选择“Databases.”。右键单击它并选择Add。
3)选择刚刚创建的.dbc数据库文件进行关联。
07、创建节点
在窗口的左侧窗格中,右键单击蓝色/红色的平行线并选择插入Network Node.。命名为“Doors”、”Engine”、“Console”。

接下来,我们将使用CAPL编程语言来定义ECU—Engine。CAPL程序通常使用CAPL浏览器开发。可以从“Tools”区域访问CAPL Browser
1)在CANoe的Simulation Setup中,点击“Engine”网络节点左下角的铅笔图标。
2)弹出的对话框会要求给文件进行命名,这边命名为engine.can。
具体的代码这边不展示了,且听下回分解。
关于这个工程,还有很多内容需要介绍,
包括代码是怎么写的,面板是怎么制作的,
由于篇幅有限,就等下篇推文再分享。
喜欢这篇内容的读者,请点赞、在看、关注哦
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
