CANoe仿真CAN总线过程一些小理解

更新时间:2023-05-09 21:12:33 阅读: 评论:0

CANoe仿真CAN总线过程⼀些⼩理解
说实话,内燃机这⾏估计这条路会越⾛越窄。早做两⼿准备,不失为防患于未然的上上策。
说不清什么时候开始,⾃⼰越来越喜欢码字写分享了。因为快乐吗------因为耐不住寂寞。
不过⼤学之后,就再没看过⽂学类的书籍。每次跑去图书馆,都是借了⼀堆专业性书籍,后来落得被图书馆的⽼师发现了,瞅了我两下,就⼀边给我加了两本书:《学⼀边说到:你这么爱看书,我推荐你基本书好了,你回去好好看看。
我没有惊讶,反倒是觉得有些兴奋:兴许我遇上了个好⽼师。虽然后⾯我发现,除了三⽑的书之外,其他的⽂学作品,我⼏乎是看不下去的。
关于CANoe这个软件简介:
CANoe是Vector公司开发的⼀款can总线开发、测试、分析、仿真软件。
该软件可以对can通信⽹络、LIN传输协议、蓝⽛、MOST、FlexRAy等进⾏建模、仿真、测试以及开发。
在汽车电⼦上,该软件运⽤算是⽐较⼴泛的。有兴趣的朋友可以去相关⽹站搜索相关职业了解⼀下。
本⽂主要运⽤CANoe进⾏建模和仿真can通信的过程。
本⽂接下来,需要⽤到CAPL语⾔进⾏编程,CAPL式canoe基于⾃⼰的开发环境配套的程序设计语⾔,类似于C语⾔。但是CAPL应该也是⾯向对象的。
不管怎样,我门推荐各位,有时间可以学学编程,C,C++,CSharp,JAVA,Python,这么多,总有⼀样适合你的。
正题:我这⾥只给我上⾯的例⼦⼀些配置信息,并对相关要点进⾏说明。软件学习,⽹上资料很多,各位有兴趣可以查来看看,两个钟就可
以熟悉完软件相关逻辑了。并且我也是靠⽹上的⼀些基础教程来熟悉软件界⾯的。下⾯的例⼦就是学习别⼈的教程仿做的。所以软件,我这
⾥不讲,只讲⼀些细节。⽔平有限,可能讲得不对,望见谅。
这是软件的界⾯:
candb++:这⾥主要对信号、报⽂、环境变量、节点等进⾏关联配置
看到上信号这⾥,length:指的是位长度,16位就是两字节。factor和offt是⽤来配置信号和数据关系的。我们知道,电阻式温度传感
器传过来的电压信号值经过模数转换后,这个数字量还不能代表我们的温度值,⽽是这个数字量和我们现实的温度成对应的关系(不精确的
说可以认为是线性。),factor和offt:y=ax+b,基于原理是⼀样的。
byte order是关于信号的解析⽅式不⼀样,intel和摩托罗拉,这个⼀时半会说不清。
value type:signed有符号(就是有正负),unsign(⽆符号,正数)。
message报⽂:我们知道,报⽂承载着信息,也就是信号。ID:在CAN总线部分说过,每个报⽂都有⼀个独⼀⽆⼆的ID、ID值越⼩,优先
级越⾼。DLC:can报⽂⾥讲过,在报⽂中,DLC由4位组成,代表着数据长度(字节)。最⾼发8字节,即1000;这个ENgine报⽂承载
着连个信号,16位的转速+8位的温度。如下图,他们在8字节的报⽂中占据了前3字节。
节点:我们知道,can总线规则是,有许多的节点通过can收发器发送报⽂到总线上,其他的节点根据需要进⾏选择接收can总线上的信息。
下⾯的的节点就是这个意思。那么节点的作⽤就是发送和接收报⽂。下⾯这个节点我们这赋予了他发送报⽂的任务。发送Engine报⽂。其
他节点同理。
剩下的是环境变量:这⾥我们先不说有什么⽤。这个环境变量是⽤来接收界⾯设计器传递过来的值的,因为界⾯设计器和candb++数据库是两个不同的模块(或者说是不同的类Class),他们之间需要传递信息就需要通过⼀些接⼝或者属性来传递。
我们先看界⾯设计器。我们设计了⼀个转速滑动块和⼀个温度滑动块和⼀个下拉选择框来模拟传感器和档位的发⽣的变化。我们知道,在candb++⾥⾯我们已经定义了转速、温度和档位三个信号。但是,我们如何将这些滑动框块的数值会即时的传递到传感器上呢?答案就是左下⾓的属性栏⾥⾯,我们将每个模块的数值都绑定并传递到了candb++的相应环境变量中,此时,candb++的环境变量evEngineSpeed 等就会随着你动滑动块⽽⾃动改变数值。
接下来,candb++数据库⾥⾯有了传感器(滑动块)的数值(在环境变量⾥⾯),有了信号,但是我
们还没有把环境变量和信号联系起来。相当于说,这个信号是假的,只有当我们把环境变量存储的值给了信号,这个信号有真正的意义。
怎么办?接下来就是要编程了。
点击那个黄⾊的铅笔,进⼊capl编辑器。
这⾥涉及到⾯向对象编程的⼀些知识,也就是类,也叫Class。
variable{}函数⾥⾯可以定义⼀些全局变量。mstimer、message应该是type、类型、或者结构?这⾥不容易解释。Engine 是⼀个抽象类,msg1则是⼀个Engine类的实例。
上⾯我们说到,界⾯设计器的滑动块和candb++的环境变量联系在⼀起了,但是candb++的环境变量和信号没有联系在⼀起。这⾥揭晓答案,最下⾯⼀个图⽚,写了这样⼀个事件(在环境变量值发⽣变化的时候触发该事件,也就是你动⼀下滑动块就会触发⼀下),触发事件就会执⾏:给实例msg1的属性EngineSpeed 赋值 为 环境变量evEngineSpeed的值(通过this,事件机制和this⽐较难理解,如果没有编程基础的话。我这⾥不详细解释)。
on envVar evEngineSpeed
{
//evEngineSpeed速度环境变量变化时,触发事件。
msg1.EngineSpeed = getvalue(this);
}
⾄此,信号已经有了可以随着滑动块变化⽽变化的值了,是⼀个真正的信号了,并且报⽂也承载好了信号,剩下的⼯作就是发送报⽂。
在哪⾥发送?在定时器⾥⾯,可以看到我们在全局变量⾥⾯定义了⼀个T50ms的定时器,并在on start(“编写的程序⼀启动就会执⾏该事件”)事件⾥⾯初始化为2ms触发⼀次;并在事件⾥⾯ouput(msg1):发送msg1报⽂,这个报⽂是Engine报⽂,承载了转速和温度两个信号。
最后上⼀个效果图。CANoe软件⾃带的demo是⾮常好的学习资料。
⾄此,完美收官,需要源程序的可以后台留⾔关键字(CANoe)。最后,希望能给⼤家带来⼀些灵感。

本文发布于:2023-05-09 21:12:33,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/567255.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:信号   环境变量   温度
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图