CANdb++数据库操作

CANdb++数据库操作

    • 创建工程结构文件夹
    • 新建数据库&总线描述
    • 节点设置
      • 节点创建
      • 配置Message属性
      • 信号设置
      • 节点收发信号
    • 环境变量配置
    • 一致性检验
    • 数据库工程XVehicle.dbc导入工程文件
    • 总结

创建工程结构文件夹

在文件夹X-Vehicle-1下,建立工程目录文件夹CANdb,Nodes,Panels:
在这里插入图片描述

新建数据库&总线描述

基于CAN模板新建数据库Tools-CANdb++ Editor——File——CreateDatabase——根据功能选总线模板(这里选了Vector IL Basic Template.dbc)——创建数据库工程XVehicle.dbc】
在这里插入图片描述
基于模板新建完成后,CANdb++Editor的导航区会显示网络中所有对象之间的关系,包含Networks、(ECUs、Network nodes)、(Environment variables、Messages和Signals)。
在这里插入图片描述
总线描述——Networks(配置总线名称,类型)。
在这里插入图片描述

节点设置

节点创建

  1. 创建Network Nodes节点,设置节点属性

在ECUs(电子控制单元)项下,列出了当前网络中所含的电控单元,它们之间通过网络节点(Network Nodes)实现信息的交互。通常情况下,ECU与网络节点是一一对应 的。当ECU作为网关时,一个ECU可以包含多个网络节点。在CAN数据库中,双击某 个ECU可以查看该ECU所对应的网络节点以及环境变量等信息。
需要提醒的是,在CAN数据库中并不能直接创建ECU,CANdb++会在创建网络节点——Network Nodes的同时,创建一个名称相同的ECU。
因此我们通过创建Network Nodes来创建控制面板节点,系统则自动创建panel对应的仿真节点。
Network Nodes(网络节点)是ECUs的通信接口,各ECU通过Network Nodes实现 总线上信息的发送和接收,每个Network Nodes包含对应的名称和地址。

在导航区右击Network Nodes在快捷菜单中选择新建一个名为Engine的网络节点, 并且将节点的地址设为0x1,如图所示。
在这里插入图片描述

用同样的方法,再创建一个名称为Door的节点(地址为Ox2)和一个名称为Display 的节点(地址为0x3)。
在这里插入图片描述
创建完成后,可以看到系统自动生成对应的ECU节点,分别在NetWorks和ECUs中都有展示。
在这里插入图片描述

配置Message属性

X-Vehicle-1工程中,有两种报文:DoorState,EngineState。分别创建报文并设置对应属性:

报文——Message——CAN上传播的数据Messages(报文)是总线上节点相互通信的数据。
数据库中,每个报文应包含下列属性 (本实例中所用报文均为CAN规范文档中所定义的CAN2.0A标准CAN)。 可以按下面4中分类理解记忆:
【报文结构】:Name(报文名称) CAN ID(CAN标识符) DLC(Data Length Code,数据长度) Type(传输类型) Cycle Time(周期)
【包含的内容】:Signals(信号)
【收发节点】Transmitters(发送节点) Receivers(接收节点)
【其他】: Layout(布局) Attributes(通用属性) Comment(说明)

DoorState
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
EngineState
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

信号设置

Signal(信号)是总线通信的最小单元,数据库中一个信号由下列属性组成。
【信号格式】:Name(信号名称) Length[Bits](信号长度) Byte Order(字节顺序)Value Type(数据类型) Unit(物理单位)
【值设置】Init.Value(初始值) Factor(加权)Maximum(最大值) Minimum(最小值)
【值含义说明】Value Table(数值表)
【关联哪条报文】Messages(报文)
【收发节点】Receivers(接收节点)
【其他】Attributes(通用属性) ·Value Descriptions(数值描述) ·Comment(说明)

X-Vehicle中有4个信号:引擎速度(EngineSpeed)、引擎状态(OnOff)、左车门开关状态(Door_L)和右车门开关状态(Door_R)。
在这里插入图片描述
创建EngineSpeed为例

  1. 创建信号Enginespeed(引擎速度〕,Length为15b,ByteOrder为Intel,Unit为r.p.m,ValueType为Signed,Maximum为5500,其它设置使用默认值
    在这里插入图片描述

在 Message 选 项 卡 中 单 击 Add 按 钮 将 该 信 号 关 联 到 报 文 Enginestate 中
在这里插入图片描述

将 Enginespeed 信 号 的 Startbit 〔 开 始 位 〕 设 置 为 0
在这里插入图片描述
2. 创建信号OnOff(引擎状态〕,Length为1b,ByteOrder为Intel,ValueType为Unsigned,Maximum为1,Startbit为15,Message为Enginestate’,其它设置使用默认值
3. 创建信号Door一L(左车门开关状态〕,Length为1b,ByteOrder为Intel,ValueType为Unsigned,Maximum为1,Startbit为0,Message为Doorstate’其它设置使用默认值
4. 创建信号DoorR〔右车门开关状态〕,Length为1b,ByteOrder为Intel,ValueType为Unsigned,Maximum为1,Startbit为2,Message为Doorstate’其它设置使用默认值

Signal 属性解释:

  1. Factor和Offset定义了raw value与physical value之间的关系。
    raw value是CAN报文发到 总线上的十六进制数据,
    physical value是信号所代表的物理量的值,例如,车速、转速、 温度等。
    Init.Value、Minimum和Maximum均为physical value。
    raw value 与physical value 之 间的 关系为:
    physical value=([raw value]×[Factor])+[Offset]。
  2. Byte Order
    数据库中信号Byte Order(字节顺序)分为Motorola和Intel两种数据格式(也称为大 端模式和小端模式),两种格式介绍如下:
    2.1. Motorola字节顺序也被称为大端模式,它将最高有效字节存储在内存的最低有效地址处,而最低有效字节存储在内存的最高有效地址处。这意味着在存储多字节数据时,最高有效字节先存储,然后是次高有效字节,以此类推,最低有效字节最后存储。
    2.2. Intel字节顺序也被称为小端模式,它将最低有效字节存储在内存的最低有效地址处,而最高有效字节存储在内存的最高有效地址处。这意味着在存储多字节数据时,最低有效字节先存储,然后是次低有效字节,以此类推,最高有效字节最后存储。
    大端模式和小端模式的区别在于字节的存储顺序。在同一个多字节数据类型中,大端模式和小端模式的字节顺序是相反的。例如,整数值0x12345678在大端模式下的存储顺序是0x12 0x34 0x56 0x78,而在小端模式下的存储顺序是0x78 0x56 0x34 0x12。
    不同的计算机架构可能使用不同的字节顺序。大多数计算机和操作系统(例如x86架构和Windows操作系统)使用小端模式,而一些嵌入式系统和网络协议(例如ARM架构和IP协议)使用大端模式。
    在处理跨平台数据交换时,字节顺序变得非常重要。可以使用字节序转换函数将字节顺序从一种格式转换为另一种格式,以确保数据在不同平台之间正确解释。

节点收发信号

设置网络节点的发送信号和接收信号

  1. 网络节点DisplayMappedRxSig
    〔接收信号〕:Door_L,Door_R,EngineSpeed,OnOffMappedTxSig
    〔发送信号〕:无
    在NetworkNodes右击Display,EditNode,在弹出的对话框中选择MappedRxSig,单击Add按钮,将Door_L,DoorR,EngineSpeed,OnOff添加进去
    在这里插入图片描述
  2. 网络节点Door
    MappedRxSig〔接收信号〕:EngineSpeed,OnOff
    MappedTxSig〔发送信号〕:DoorL,DoorR
  3. 网络节点Engine
    MappedRxSig〔接收信号〕:无
    MappedTxSig〔发送信号〕:EngineSpeed,OnOff

环境变量配置

ValueTable(数值表)用来文字化地指定信号或环境变量的值所代表的含义,例如,前面创建的信号OnOff,0代表Off状态,1代表On状态。
signal和Environment Variables都有这个属性。
环境变量Environment Variables
Environment Variable(环境变量)是ECU、面板和CAPL程序相连接的媒介。
例如,在CAPL程序中,通过改变或监控某一环境变量的值可以触发特定的动作,同样,环境变量的值也可以与面板上控制控件或显示控件相关联。
与系统变量相比,环境变量仅在CANdb++中定义。本实例使用的DBC模板,会自动创建两个环境变量EnvKlemmel5和EnvKlemme30,不需要可以直接删除。

环境变量配置
X-Vehicle中有1个环境变量EnvDoorState。按下图配置
在这里插入图片描述
环境变量的ValueTabe配置
Value Table数值表是用来文字化地指定信号值所代表的含义,如信号On0ff,0代表Off状态,1代表On状态

  1. 创建VtSig-Eng-Status数值表
    name:VtSig_Eng_Status
    ValueDescription:
    Ox0:Off
    0x1:On
    关联信号:On0ff

在CANdb++工具栏上,单击valueTables,右键->New
在这里插入图片描述
编辑VtSig-Eng-Status value表
在这里插入图片描述
双击编辑信号,关联value table
在这里插入图片描述
2. 创建VtSig-Door-Status数值表
name:VtSig_DoorStatus
ValueDescription:
Ox0:Close
Oxl:Open
关联信号:Door_L,Door_R
3. 创建VtEnv_Door_Status数值表
name:VtenvDoorStatus
ValueDescription:
Ox0: BothDoorClose
Oxl:LeftDoorOpen
0x2:RightDoorOpen
Ox3:BothDoorOpen
关联信号:EnvDoorState

一致性检验

如果通过一致性检验,没有告警或报错,那么就完成了数据库的设计。
在这里插入图片描述

数据库工程XVehicle.dbc导入工程文件

CAN数据库创建完成后,就可以将其导入已经创建的项目文件中。下面将该XVehicle数据库导入前面已创建的项目中。在Simulation Setup的系统视图中,右击Database 选择Import Wizard命令,在弹出的 对话框中选择XVehicle数据库,并将节点Display、Door和Engine添加到Assigned nodes 中,如图8.24所示。
在这里插入图片描述
在这里插入图片描述
发现三个仿真节点加入进来了
在这里插入图片描述

总结

在CANdb设计中,message是CAN网络中信息的基本单元,它包含了一个或多个信号。每个信号代表了一个特定的数据值,例如温度、速度等。节点可以通过接收和发送message来进行通信。

在这个过程中,信号的具体值是通过环境变量来确定的。环境变量是一组参数,可以影响信号的值。例如,可能有一个环境变量来表示温度,当发送一个带有温度信号的message时,可以根据环境变量的值来确定信号的具体温度值。

因此,节点根据环境变量来发送和接收带有信号的message,以实现适应不同环境的通信需求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/158104.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 如何获取url的名称

一、使用os模块 os模块是Python内置的一个操作系统接口模块,提供了许多与操作系统相关的函数和变量。其中,os.path模块用于处理路径相关的操作,包括文件名、目录名等。 os.path.basename()函数可以用来获取路径中的文件名部分 imp…

每日一题 136. 只出现一次的数字(简单,位运算)

异或运算性质,两个相等的数作异或运算得零,任何数与零作异或运算保持不变 所以整个数组的异或和就是答案 class Solution:def singleNumber(self, nums: List[int]) -> int:ans 0for i in nums:ans ^ ireturn ans一行代码,reduce作累积操…

数据结构--》连接世界的无限可能—— 图

图作为数据结构中的一种重要概念,扮演着连接世界的纽带。与树和二叉树相比,图更加灵活和多样化,它能够描述各种实际问题中的复杂关系,如社交网络中的人际联系、城市交通中的路线规划以及电子网络中的通信路径等。 无论你是初学者还…

英语学习工具推荐

无论您是初学者还是想要巩固英语能力的学习者,我们都为您提供了一个高效而便捷的英语学习工具。 英语复读机,您可以随时输入您想要复读的英语单词、句子或者文章。我们的复读机会循环播放您输入的内容,帮助您加深记忆、提高听力和口语表达能力…

网络安全—小白学习笔记

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高; 二、则是发展相对成熟入…

【数据结构】:二叉树与堆排序的实现

1.树概念及结构(了解) 1.1树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的有一个特殊的结点&#…

数据结构之队列

目录 队列的定义与结构 队列的实现 队列的结构 初始化空队列 销毁队列 队尾入队列 队头出队列 获取队列头部元素 获取队列尾部元素 判断队列是否为空 获取队列长度 栈与队列经典试题 队列实现栈 栈实现队列 队列的定义与结构 队列是一种先进先出(First…

Netty源码编译

Netty源码编译 想了解Netty源码,最好先从 netty-example 开始,多跑几个 example,了解Netty的实际应用。 编译 netty-example 会出现很多乱七八糟的问题,根本原因是因为缺少 io.netty.util.collection 包。 解决方法 1.先 instal…

指针(2)

1.数组名的理解 一般数组名就是数组首元素的地址 但是有2个例外:1.sizeof(数组名) 这里面数组名表示的是整个数组,计算整个数组的大小,单位为字节。 …

简单易用,效果卓越的电子期刊制作网站

在日常工作和生活中,我们常常需要制作各种文档和资料,比如电子期刊、宣传册、产品手册等。但有时候,我们会因为排版、设计、编辑等问题而感到烦恼。这时候,一个简单易用、效果卓越的电子期刊制作网站就成为了我们的得力助手&#…

相似性搜索:第 1 部分- kNN 和倒置文件索引

图片来源:维亚切斯拉夫叶菲莫夫 一、说明 SImilarity 搜索是一个问题,给定一个查询的目标是在所有数据库文档中找到与其最相似的文档。 在数据科学中,相似性搜索经常出现在NLP领域,搜索引擎或推荐系统中,其中需要检索最…

目标文件格式

目标文件里有什么 目标文件格式 目标文件就是源代码编译后但未进行链接的中间文件(linux下的.o)。 ELF文件:从广义上看,目标文件与可执行文件的格式其实几乎是一样的,可以将目标文件与可执行文件看成是一种类型的文…

忘记开机密码啦!我教你用ventoy找回密码

文章目录 一、前言二、实战过程三、动态演示四、原理解析五、总结 一、前言 当你有一天突然忘记了开机密码怎么办?又要上电脑店花个几十块让人弄?在上一章《你该自己学学安装操作系统了,小白一学就会(ventoy装系统超详细&#xff…

Unity设计模式——建造者模式

Product类——产品类&#xff0c;由多个部件组成。 class Product {IList<string> parts new List<string>();//添加产品部件public void Add(string part){parts.Add(part);}public void Show(){foreach (string part in parts){Debug.Log("产品:"pa…

python+深度学习+opencv实现植物识别算法系统 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的植物识别算法研究与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;4分 &#x1f9ff; 更多…

Android+Appium自动化测试环境搭建及实操

1、Appium简介1.1 Appium概念1.2 Appium工作原理 2、Appium Server环境搭建2.1 Java JDK2.1.1 下载JDK2.1.2 运行exe安装JDK&#xff0c;设置安装路径2.1.3 设置环境变量2.1.4 验证安装结果 2.2 Android SDK2.2.1 下载安装Android SDK安装包2.2.2 下载platform-tools&#xff0…

Linux下将驱动编译进内核

在开发的过程中&#xff0c;一般都是将驱动编译成模块&#xff0c;然后将其发送到开发板加载驱动进行功能验证&#xff0c;驱动的功能验证没有问题后就可以将其编译进内核了。本文将介绍如何把上一篇文章Linux下设备树、pinctrl和gpio子系统、LED灯驱动实验中的LED驱动编译到内…

【LeetCode】9. 回文数

1 问题 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 例如&#xff0c;121 是回文&…

【计算机网络】IP协议详解

文章目录 一、引入 二、简单认识IP协议 2、1 IP协议基本概念 2、2 IP协议报文格式 2、3 分片与组装 2、3、1 MTU 与 MSS 2、4 网段划分 2、4、1 简单理解路由 2、4、2 IP地址 2、4、3 IP地址的划分 2、4、4 CIDR&#xff08;无类别域间路由&#xff09; 2、4、5 特殊的IP地址 …

Redis微服务架构

Redis微服务架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c;缓存层和存储层都不会命中&#xff0c;通常出于容错的考虑&#xff0c;如果从存储层查不到数据则不写入缓层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询&#xff0c;失去…