CANoe使用教程
Posted 嵌入式悦翔园
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CANoe使用教程相关的知识,希望对你有一定的参考价值。
CANoe使用教程
前言
CANoe
是德国Vector
公司为汽车总线的开发而设计的一款总线开发环境,全称叫CAN open environment
。同Vspy
一样,CANoe
集合了网络监控、数据获取/记录、节点仿真、诊断、自动测试等功能;其丰富的功能和配置选项使其也是常见于汽车电子行业。接下来针对CANoe
的常用操作进行介绍,具体分为以下几点:
CANoe
工程的新建;- 通过
Trace
工具查看交互的报文内容; - 通过
Logging
保存日志文件; - 创建
IG
发送报文; - 通过
Graphics
界面抓取信号波形; - 加载
cdd
文件; - 过滤报文
ID
的接收; - 其他;
新建工程
打开CANoe
软件,在工具栏的File
中点击New
,双击选择创建的模板 ,再保存创建的cfg
工程文件。如下:
总线拓扑结构图
系统变量
系统变量是一种特殊的变量,用来描述某种特殊状态或者记录测量数据。一般有系统定义和用户定义两种,他们的作用于都是在各自的命令空间内。功能上两者没有区别,都相当于全局变量,方便软件数据交互;优先使用系统变量。
一、系统变量的创建
1、首先点击Environment
下的System Variable
2、在弹出窗口点击New System Variable
3、在弹出页面创建系统变量需要的参数
注意:
Namespace
:定义了系统变量组的名称。如果需要在大的系统变量组里新建次级的系统变量组,则需要使用到Name1::Name2
格式。Name
:系统变量的具体名称,后续的使用会直接引用该名称。Data type
:选择需要的类型,下拉菜单中支持的所有类型均在截图中可以看到。Location
:该系统变量组存放的路径、名称和格式。我所在的项目中使用到了XML/vsysvar
两种格式。Values
:初始值、最小值、最大值、单位、值表。
4、定义好命名空间和变量名选择 32 bit signed类型,点击ok即可
5、通过copy完成其他变量的创建
6、通过双击可以对复制的变量进行编辑
二、系统变量的使用
在系统变量被定义好了之后,相当于我们定义了一个全局变量。具体如何来使用,我们可以通过CAPL内自带的函数来完成使用。
1、创建一个新的Network Node
依次点击Simulation
–> simulation setup
–>找到simulation setup
窗体–>右键Network Node
选择Insert Network Node
2、创建一个test.can
文件用于写代码
这样我们就可以直接在test.can
编写我们的代码了。
创建DBC文件
1、依次点击tools
--> CANdb++ Editor
2、在弹出窗口点击File
–>Create Database...
3、在弹出窗口选择如图CANTemplate.dbc
,点击OK
4、给文件起个名字,并将文件存储在想要存储的位置
5、点击MyMsg,右键选择New
6、配置Name
和ID
7、在Signals
下面创建一个信号BusSwitch
,信号设置如下图所示,单击ok
保存。
8、将BusSwitch
拖动到MyMsg
下面,这样BusSwitch
就变成报文MyMsg
的一条信号
9、至此数据库就建立完毕了,直接保存退出
10、将我们的数据库导入进来,右键Databases
点击add
CANoe配置
CANoe硬件的配置主要是波特率和协议的选择。具体操作主要在Hardware
中的Network Hardware
中。
如果还想要从硬件层直接过滤掉非目标帧的报文,可在设置中增加过滤器。可以从DBC
中选择,也可以直接手动填入。
Mask
表示CAN
控制器中过滤器的掩码,在这里不做过多的阐述。如想深入了解,请自行查询Vectore Hardware
手册。
如果工程已经创建的CAN 网络数量不满足当下的使用需求,可以自行添加。具体的添加路径在下图。添加的数量不能超过CANoe自身最大的通道数。
添加过滤器
在方框上右键选择 Insert Event Filter
->CAN
配置后如下:
配置过滤器
1、双击CFB
2、添加要滤出ID Pass filter
(显示的ID
),可以通过ID
或数据库进行选择。
注意右侧的对应的通道
参考文章
使用 Python 在 CANoe 中运行测试模块
【中文标题】使用 Python 在 CANoe 中运行测试模块【英文标题】:Running Test Modules in CANoe Using Python 【发布时间】:2020-09-12 00:56:25 【问题描述】:我开发了一个基于 Python 的 CANOE 自动化代码,其中我启动 CANOE,打开配置并加载测试规范并运行它。
现在我想等到测试模块执行完成来记录判决。但不确定如何去做。任何帮助将不胜感激。
"""Execute XML Test Cases without a pass verdict"""
from time import sleep
import win32com.client as win32
import configparser
import time
from pandas.core.computation.expressions import set_test_mode
import pythoncom
testComplete = False
class TestModuleEvents(object):
def OnReportGenerated(self,Success, SourceFullName, GeneratedFullName):
print("Report Generated")
testComplete = True
def OnStop(self, value):
print("Test Module Stopped")
testComplete = True
def OnStart(self):
print("Test Module Started")
testComplete = True
class TestConfigurationEvents(object):
def OnStart(self):
print("Measurement Started")
testComplete = False
def OnStop(self):
print("Measurement Stopped")
testComplete = True
config = configparser.RawConfigParser()
config.read('usecase02_configuration.properties')
configurationPath = config.get('TESTCONFIGURATION', 'configurationpath')
testspec = config.get('TESTCONFIGURATION', 'testspecification')
CANoe = win32.DispatchEx("CANoe.Application")
CANoe.Open(configurationPath)
testSetup = CANoe.Configuration.TestSetup
testSetup.TestEnvironments.Add(testspec)
test_env = testSetup.TestEnvironments.Item('Test Environment')
test_env = win32.CastTo(test_env, "ITestEnvironment2")
print(report.FullName)
# Get the XML TestModule (type <TSTestModule>) in the test setup
test_module = test_env.TestModules.Item('Tester')
CANoe.Measurement.Start()
sleep(5) # Sleep because measurement start is not instantaneous
win32.WithEvents(test_module, TestModuleEvents)
test_module.Start()
# sleep(60)
while test_module.Verdict==0:
time.sleep(1)
# test_module.Stop()
print(test_module.Verdict)
【问题讨论】:
您的问题到底是什么?您已经有了启动测试模块的代码以及等待测试模块完成的代码。那么你的问题到底是什么? 感谢您查看代码。如果您查看 while 循环while test_module.Verdict==0: time.sleep(1)
我假设默认情况下的判定为 0,通过或失败将变为 1 或 2。但它并没有在 while 中等待,因为默认情况下判定为 1。然后我尝试更改 while 如下所示while not testComplete: time.sleep(1)
希望当 testmodule 运行完成时,它会在 TestModuleEvents 中调用 onStop 并设置 testCompleted=true。但这也没有发生。在调用 onStop 和终止 while 时需要支持。
【参考方案1】:
你已经准备好了所有的部分。我认为唯一的问题是对全局变量在 python 中的工作方式的误解。
您在 python 文件的全局范围内声明 testComplete
。在TestModuleEvents.OnStop
内部,您声明了另一个名为testComplete
的变量。此实例与全局范围内的变量完全无关。
将您的 OnStop
-handler(以及其他人)更改为如下内容:
def OnStop(self, value):
global testComplete
print("Test Module Stopped")
testComplete = True
这会将全局变量导入到您的作用域中,并将其设置为True
,而不是创建一个新变量。
完成之后,将你的 while 循环更改为:
while not testComplete:
time.sleep(1)
【讨论】:
以上是关于CANoe使用教程的主要内容,如果未能解决你的问题,请参考以下文章