当前位置: 首页 > news >正文

CANoe创建仿真工程

CANoe创建仿真工程

    • 写在前面
    • 仿真工程的创建
      • 创建工程
      • 添加CAN数据库
      • 添加系统变量
      • 创建面板
      • 创建网络节点
      • 为节点添加代码
      • 工程运行测试
      • 总结

写在前面

Canoe的安装不是特别方便,我是参加了松勤的培训课程,不仅需要安装软件还需要安装驱动,刚刚学习的小伙伴可以去某宝看下是否有资源。
在这里插入图片描述

仿真工程的创建

创建工程

  1. 在某盘下创建一个文件夹,命名为testpanel,在文件夹testpanel下面分别创建CANdb、Panels和Nodes
    在这里插入图片描述
  1. CANdb文件夹存储所有的CAN数据库文件,它包含了所有的CAN网络节点和信号定义。这个文件夹的意义是提供一个集中存储和管理所有CAN相关的信息的地方,便于查找和修改。
  2. Nodes文件夹存储了CAN网络节点的配置文件。这些配置文件描述了CAN网络中的所有节点,包括节点的名称、地址、通信参数等。这个文件夹的意义是用于管理和配置CAN网络节点,以便正确地进行通信。
  3. Panels文件夹存储了用户界面面板的定义文件。这些文件描述了CANoe工程中使用的面板,包括面板的布局、控件和功能等。这个文件夹的意义是用于定义和管理用户界面,以方便用户进行交互和监控CAN网络的状态。
  1. 打开CANoe,单击File->New,双击选择模板CAN 500KBaud 1ch,命名为testpanel.cfg,并保存到文件夹testpanel下
    在这里插入图片描述

CAN 500KBaud 1ch的含义
CAN表示控制器区域网络(Controller Area Network),是一种常用于车辆和工业应用中的通信协议。
500k Baud表示通信的速率为500,000位每秒,即通信传输速度为500千波特。
1ch表示仅使用一个通道进行通信,即只使用一个CAN通道进行数据传输

添加CAN数据库

  1. 添加CAN数据库
    1. 单 击 Tools 功 能 区 的 CANdb++ Editor 〔CAN 数 据 库 编 辑 器〕
    2. 在 CANdb++ Editor 界 面 中 单 击 File—>Create database 并 选 择 CANoe Template.dbc 作 为 模 板
    3. 保 存 名 字 为 testpanel.dbc 到 工 程 testpanel 下 面 的 文 件 夹 CANdb 中
      在这里插入图片描述
  2. 数据库中添加报文和信号
    2.1 在 Signals 下 面 创 建 一 个 信 号 Switch,信息如下:
    在这里插入图片描述

字段的含义:

  1. Length: 信号的位数长度,表示信号所占的二进制位数。
  2. Byte Order: 表示信号在字节流中的存储顺序。有两种选择:
  • Intel:低字节序(Little Endian),低位字节存储在低地址处。
  • Motorola:高字节序(Big Endian),高位字节存储在低地址处。
  1. Value Type: 表示信号的数据类型。有几种选择:
  • Signed:有符号整数。
  • Unsigned:无符号整数。
  • IEEE Float:单精度浮点数(32位)。
  • IEEE Double:双精度浮点数(64位)。
  1. Unit: 表示信号的单位,用于描述信号所代表的物理量的量纲。
  2. Init Value: 表示信号的初始值,默认值。
  3. Factor: 用于将原始的物理值转换为相应的信号值。可以是缩放因子、增益、系数等,用于线性转换。
  4. Offset: 用于将原始的物理值转换为相应的信号值。可以是偏移量。
  5. Minimum: 信号的最小物理值。
  6. Maximum: 信号的最大物理值。
  7. Value Table: >为信号定义值表,用于将数值映射为具体的含义,例如将某个特定值映射为状态或事件。

2.2 在 Messages 下 面 创 建 一 条 报 文 Msg1
在这里插入图片描述

字段的含义

  1. Type(类型):Type字段定义了CAN消息的类型。它有两个选项:
  • CAN Standard(标准CAN)表示使用11位的标准CAN标识符。标准CAN协议允许2^11=2048种不同的消息标识符。
  • CAN Extended(扩展CAN)表示使用29位的扩展CAN标识符。扩展CAN协议允许2^29=536,870,912种不同的消息标识符。
  1. ID(标识符):ID字段定义了CAN消息的唯一标识符。对于标准CAN,则为11位;对于扩展CAN,则为29位。CAN消息的ID用于区分不同的消息。
  2. DLC(数据长度码):DLC字段定义了CAN消息的数据长度(以字节为单位)。它指定了CAN消息中有效数据的长度。DLC的取值范围为0到8,表示消息的有效数据可以是0到8个字节

2.3 将信号拖拽到message下面
在这里插入图片描述
2.4. 添加数据库到工程中
进 入 Simulation Setup 窗 口 , 单 击 Networks->CAN Networks->CAN->Databases , 右 键 add, 将 testpanel.dbc 文 件
加 入 仿 真 工 程
在这里插入图片描述

添加系统变量

在Canoe中,系统变量的作用是用于表示和控制系统的状态,以及在仿真过程中进行配置和操作。系统变量通常是预定义的,可以通过设置和修改来改变系统的行为。以下是系统变量的一些常见作用:

  1. 时间控制:系统变量可以用于表示仿真时间的流逝速度和步长,以及控制仿真的开始和停止时间。
  2. 状态监测:系统变量可以用于监测和记录系统的各种状态和变量的值,如传感器输出、控制信号、系统内部状态等。
  3. 系统配置:系统变量可以用于配置系统的参数和设定,如模型、控制策略、仿真环境等。
  4. 事件触发:系统变量可以用于触发和控制系统中的事件,如传感器读取、控制器更新、动作执行等。
  5. 条件判断:系统变量可以用于进行条件判断和逻辑控制,以实现不同的仿真场景和行为。
  1. 单 击 Environment—>system Variables(系 统 变 量) 鼠 标 右 键 new ,设置两个系统变量如下:
    在这里插入图片描述

在这里插入图片描述

创建面板

  1. 创建开关面板
    ( 1 ) 单 击 ToolsPanel Designer( 面 板 设 计 器 〕
    ( 2 ) 新 建 一 个 panel, 命 名 为 SWITCH, 并 保 存 在 文 件 夹 panels 下
    ( 3 ) Panel Designer
    Toolbox—switch/Indicator
    ( 4 ) Properties 〔 属 性 〕 中 设 置 相 关 参 数
    在这里插入图片描述

  2. 创建指示灯面板
    ( 1 ) 单 击 ToolsPanel Designer( 面 板 设 计 器 〕
    ( 2 ) 新 建 一 个 panel, 命 名 为 LIGHT, 并 保 存 在 文 件 夹 panels 下
    ( 3 ) Panel Designer
    Toolbox—yLED C ontrol
    ( 4 ) Properties 〔 属 性 〕 中 设 置 相 关 参 数
    在这里插入图片描述

创建网络节点

  1. 在Can线上右击,创建两个网络节点
    在这里插入图片描述
    在这里插入图片描述
  2. 为两个网络节点指定CAN文件,并更改Title
    在这里插入图片描述

为节点添加代码

  1. 为Switch节点添加代码如下:
on sysvar MyNameSpace::svSwitch
{message Msg1 msg;msg.sSwitch = @this;output(msg);write("%d is switch",@this);
}

含义为:

  1. 当系统变量MyNameSpace::svSwitch发生变化时,执行以下代码块。
  2. 声明一个名为Msg1的消息变量,它的数据类型为message。这个消息变量用于存储发送给其他模块的消息。
  3. 将MyNameSpace::svSwitch的值赋给msg的成员变量sSwitch,也就是创建的信号。
  4. 将消息msg发送出去。
  5. 使用write函数打印消息"%d is switch",其中%d将被替换为@this的值。输出结果为"@this is >switch",其中@this表示MyNameSpace::svSwitch的当前值。

在这里插入图片描述
2. 为light节点添加代码

on message Msg1
{@MyNameSpace::svLight = this.sSwitch;write("svLight is %d ",@MyNameSpace::svLight);
}

含义为:

  • 定义一个on message事件,表示在收到名为Msg1的消息时执行下面的代码。
  • @MyNameSpace::svLight = this.sSwitch;this.sSwitch的值赋给全局变量@MyNameSpace::svLight
  • write("svLight is %d ",@MyNameSpace::svLight);@MyNameSpace::svLight的值打印出来,使用%d占位符表示整数类型的变量。实际打印的内容是 "svLight is "后面跟着@MyNameSpace::svLight的值。

在这里插入图片描述
3. 编辑compile编译写好的代码
在这里插入图片描述
可以看出来整体逻辑为,DB创建message和信号,在这里面板控制的是系统变量,信号接收系统变量,并通过节点传给另外一个节点。

工程运行测试

  1. Home中Simulated Bus选择Simulated模式
    在这里插入图片描述
  2. 点击start进行测试
    在这里插入图片描述
  3. 调出Light和switch面板
    在这里插入图片描述
  4. 仿真测试
    灯亮的状态
    在这里插入图片描述
    灯灭的状态
    在这里插入图片描述
  5. 使用trace查看信息
    在这里插入图片描述

总结

在Canoe当中主要包含数据,网络节点和面板。其中面板用于展示,节点用于逻辑控制,数据包含数据库中的数据和系统中设置的环境变量,适合放在candb中的数据是车辆的通信网络数据,包括CAN、LIN、FlexRay等总线数据。这些数据通常是车辆的传感器数据、控制信号数据等实时产生的数据,可以在Canoe中进行处理、分析和仿真。
而适合放在变量中的数据是Canoe的开发脚本中使用的变量数据,例如用于控制仿真过程的参数、模型中的状态变量、测试用例中的输入和期望输出等。这些数据通常是预先定义的、静态的数据,在仿真过程中根据需要进行读取和修改。

相关文章:

CANoe创建仿真工程

CANoe创建仿真工程 写在前面仿真工程的创建创建工程添加CAN数据库添加系统变量创建面板创建网络节点为节点添加代码工程运行测试总结 写在前面 Canoe的安装不是特别方便,我是参加了松勤的培训课程,不仅需要安装软件还需要安装驱动,刚刚学习的…...

Scanner 输入回车跳不出循环的解决方法

题目要求: 输入一行内容包含字符串和数字,将字符串与数字分别提取。 解决方法: 可以使用两个Scanner对象,一个用来键入数据,另外一个用来对数据进行操作,以此来解决输入“回车”跳不出while循环的问题。 i…...

docker 启动 mysql 通过防火墙设置端口无法访问解决方案

1、问题描述:通过 docker compose 启动mysql服务,然而在防火墙添加了3306端口后却无法访问,但是关闭防火墙后又可以访问mysql数据库。 解决方案: 重启 docker 后解决:systemctl restart docker 如果没有解决问题则执…...

智能制造优化,RFID生产线管理系统解决方案

一、背景介绍 随着全球经济的发展,传统制造业面临着越来越高的成本和低利润的挑战,为了提升企业的整体利润率,优化管理流程成为必要的手段之一,在传统的制造企业中,生产线通常采用单件流生产模式,但这种模…...

【Mybatis】基于Mybatis插件+注解,实现敏感数据自动加解密

一、介绍 业务场景中经常会遇到诸如用户手机号,身份证号,银行卡号,邮箱,地址,密码等等信息,属于敏感信息,需要保存在数据库中。而很多公司会会要求对数据库中的此类数据进行加密存储。 敏感数据…...

【特纳斯电子】基于物联网的指纹密码锁系统设计-实物设计

资料下载链接:基于物联网的指纹密码锁系统设计-实物设计 - 电子校园网 编号: T3732205M-SW 设计简介: 本设计是基于单片机的指纹密码锁,主要实现以下功能: 1、可通过密码解锁 2、可通过云平台解锁 3、可通过指纹解…...

【牛客面试必刷TOP101】Day9.BM37 二叉搜索树的最近公共祖先和BM42 用两个栈实现队列

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:牛客面试必刷TOP101 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!&…...

10.12 校招 实习 内推 面经

绿*泡*泡: neituijunsir 交流裙 ,内推/实习/校招汇总表格 1、校招 | 2024届秋招,美团哪些校招岗位最缺人?(内推) 校招 | 2024届秋招,美团哪些校招岗位最缺人?(内推&…...

redis 生成流水工具类

使用redis存储流水号,代码如下: import cn.hutool.core.date.DateUtil; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component;Component public class RedisSerialUtil {private RedisTemplate…...

BGP服务器租用腾讯云和阿里云价格对比

BGP云服务器像阿里云和腾讯云均是BGP多线网络,速度更快延迟更低,阿里云BGP服务器2核2G3M带宽优惠价格108元一年起,腾讯云BGP服务器2核2G3M带宽95元一年起,阿腾云atengyun.com分享更多云服务器配置如2核4G、4核8G、8核16G等配置价格…...

PyTorch 深度学习之多分类问题Softmax Classifier(八)

1. Revision: Diabetes dataset 2. Design 10 outputs using Sigmoid? 2.1 Output a Distribution of prediction with Softmax 2.2 Softmax Layer Example, 2.3 Loss Function-Cross Entropy Cross Entropy in Numpy Cross Entropy in PyTorch 注意交叉熵损失,最…...

抖音直播招聘小程序可以增加职位展示,提升转化率,增加曝光度

抖音直播招聘报白是指进入抖音的白名单,允许在直播间或小视频中发布招聘或找工作等关键词。否则会断播、不推流、限流。抖音已成为短视频流量最大的平台,但招聘企业数量较少。抖音招聘的优势在于职位以视频、直播方式展示,留存联系方式更加精…...

论文阅读之《Learn to see in the dark》

Learning to See in the Dark-CVPR2018 Chen ChenUIUC(伊利诺伊大学厄巴纳-香槟分校) Qifeng Chen, Jia Xu, Vladlen Koltun Intel Labs(英特尔研究院) 文章链接:https://arxiv.org/pdf/1805.01934.pdfhttps://arxiv.org/pdf/1805.01934.p…...

Docker 生成自定义镜像并使用Docker Compose部署

Docker 生成自定义镜像并使用Docker Compose部署 Docker Compose 是一个用于定义和运行多个 Docker 容器的工具,可以轻松管理复杂的应用程序。本文将介绍如何在 Docker Compose 中使用自定义 Docker 镜像,并提供了生成自定义 Docker 镜像的步骤。 步骤…...

设计模式~调停者(中介者)模式(Mediator)-21

调停者(中介者)模式(Mediator) (1)优点 (2)缺点 (3)使用场景 (4)注意事项: (5)应用实例: 代码 调停者&a…...

计算机毕业设计选什么题目好?springboot 医院门诊在线预约挂号系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…...

linux中使用ps查看进程的所有线程

在 Linux 系统中&#xff0c;可以使用 ps 命令和 ps H 命令结合来查看进程的线程信息。ps 命令用于显示系统中当前运行的进程信息&#xff0c;而 ps H 命令则可以显示进程中的所有线程。 使用以下命令可以查看指定进程的所有线程信息&#xff1a; ps H -T <PID>将 替换…...

本、硕、博区别真的辣么大吗?

61&#xff1a; 发际线已经说明了一切…… Super Mario&#xff1a; 小学&#xff0c;老师告诉学生&#xff1a;“森林里有只老虎&#xff0c;已经被我关在笼子里&#xff0c;我会带你去那个地方&#xff0c;然后给你一把猎枪&#xff0c;告诉你猎枪怎么用&#xff0c;并开枪…...

[Spring] SpringMVC 简介(一)

目录 一、SpringMVC 简介 1、什么是 MVC 2、什么是 SpringMVC 3、SpringMVC 实现原理 4、SpringMVC 的特点 二、简单案例 1、引入依赖 2、在 web.xml 中配置前端控制器 DispatcherServlet 3、创建 SpringMVC 的配置文件 4、创建请求控制器 5、测试页面 6、访问不到 …...

机器学习基础之《回归与聚类算法(2)—欠拟合与过拟合》

一、背景 1、上一篇说正规方程的时候&#xff0c;实际情况中使用很少&#xff0c;主要原因它不能解决过拟合。 2、训练集上表现的好&#xff0c;测试集上表现不好—过拟合 二、欠拟合和过拟合 1、欠拟合 训练集&#xff1a;有3个训练集&#xff0c;告诉机器都是天鹅 机器学…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...