• CANdb++数据库操作


    创建工程结构文件夹

    在文件夹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,以实现适应不同环境的通信需求

  • 相关阅读:
    Qt 之QDockwidget 自定义窗口标题栏
    centos 7 安装tomcat开启apr并应用于springboot
    C语言——简易版扫雷
    由注意力机制中scaled sqrt(dk)操作联想到期望与方差的本质推导
    【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 生成哈夫曼树(100分) - 三语言AC题解(Python/Java/Cpp)
    [2024年]-flink面试真题(三)
    监听页面滚动位置定位底部按钮(包含页面初始化定位不对鼠标滑动生效的解决方案)
    【高并发】ScheduledThreadPoolExecutor与Timer的区别和简单示例
    三数之和[中等]
    Docker简介
  • 原文地址:https://blog.csdn.net/m0_48468018/article/details/133470052