使用CANOE进行CAN总线的DBC文件制作
DBC文件解析CAN信息
以图形显示(Graphic window)为例,如图示,加入.dbc文件中包含的 数据帧或信号。
如图,选择一帧信号的全部或是某些,点击Apply。
点击Apply,即可以图形的形式观测相关的信号变化情况。
谢谢!
在“Device”中选择“New from路径下的.dbc文件,导入。此时上图红色框位置由灰色变为蓝 色,说明成功导入。
点击上述变为蓝色的按钮,弹出.dbc文件中包含的信息,如下图所示。
Message下为各帧信息,Signals子目录下为所有的信号。
各信号需要在Signals下面定义好。如需增加, 可以在空白处点击鼠标右键,New,新建信号, 根据通讯协议定义好信号的名称,长度,偏移 量,缩放因子等参数。
双击Message下某一帧,弹出如图示对话框,可以在definition中定义 数据帧名称,类型,ID,长度等,在Signals下可以为数据帧添加所需 包含的且已经在Signals下定义好的信号。
在Layout下可以为某一 帧信息中各信号的存储 位置,存储方式进行自 定义。
要观测信号,可在主界面右键,在Display windows中选择显示的方式, 如图形,数显等。
DBC文件解析CAN数据包 ----基于CANAPE
打开CANape,新建一个 工程,如右图所示。
如图示过程,建立新的project(例如 名称为demo),存储路径自行定义。点 击“完成”后,弹出的提示信息点击 “确定”或“ok”跳过,进入CANape 主界面。
上图为CANape主界面。可以把已有的dbc文件最后放到工程的路径下。
CAN通讯进阶-基于Python使用dbc文件解析CAN数据(dbc文件的创建、使用方法)
CAN通讯进阶-基于Python使⽤dbc⽂件解析CAN数据(dbc⽂件的创建、使⽤⽅法)CAN通讯进阶-基于Python使⽤DBC⽂件解析CAN数据配置环境使⽤环境:python3.6平台:Windows10IDE:PyCharm1.环境配置1.1安装CAN通讯需要的包pip install canlib1.2 安装kvaser_drivers以及Kvaser CanKing下载下来之后的⽂件是这样的,三个⽂件依次双击安装就⾏了安装完后,在开始栏可以查看到已经安装好了2.使⽤DBC⽂件解析CAN帧2.1DBC⽂件DBC是Database Can的缩写,其代表的是CAN的数据库⽂件,在这个⽂件中把CAN通讯的信息定义的⾮常完整清楚,在Windows下其存在的格式便是dbc,如图所⽰:有了DBC⽂件便可以对接收到的CAN帧进⾏解析,分析⼀系列CAN帧代表的真实物理含义。
正因为如此,每⼀个DBC⽂件都对应着⼀种CAN帧的规则,使⽤CAN作为通讯⼿段的设备(如汽车中发动机、车灯、车载空调等等)都有对应的DBC⽂件。
2.2本博客布局本博客将从DBC⽂件的创建、使⽤DBC⽂件发送指定格式的CAN数据、使⽤DBC⽂件解析接收到的CAN数据来展开。
3.DBC⽂件的创建3.1创建DBC⽂件代码# author:Hurricane# date: 2021/4/16# File : CAN_Create_Database.py# E-mail:hurri_cane@import argparsefrom collections import namedtuplefrom canlib import kvadblibMessage = namedtuple('Message','name id dlc signals')Signal = namedtuple('Signal','name size scaling limits unit')EnumSignal = namedtuple('EnumSignal','name size scaling limits unit enums')_messages =[Message(name='EngineData',id=100,dlc=8,signals=[Signal(name='PetrolLevel',size=(24,8),scaling=(1,0),limits=(0,255),unit="l",),Signal(name='EngPower',size=(48,16),scaling=(0.01,0),limits=(0,150),unit="kW",),Signal(name='EngForce',size=(32,16),scaling=(1,0),limits=(0,0),unit="N",),EnumSignal(name='IdleRunning',size=(23,1),unit="",enums={'Running':0,'Idle':1},),Signal(name='EngTemp',size=(16,7),scaling=(2,-50),limits=(-50,150),unit="degC",),Signal(name='EngSpeed',size=(0,16),scaling=(1,0),limits=(0,8000),unit="rpm",),]),Message(name='GearBoxInfo',id=1020,dlc=1,signals=[Signal(name='EcoMode',size=(6,2),scaling=(1,0),limits=(0,1),unit="",),EnumSignal(name='ShiftRequest',size=(3,1),scaling=(1,0),limits=(0,0),unit="",enums={'Shift_Request_On':1,'Shift_Request_Off':0}, ),EnumSignal(name='Gear',size=(0,3),scaling=(1,0),limits=(0,5),unit="",enums={'Idle':0,'Gear_1':1,'Gear_2':2,'Gear_3':3,'Gear_4':4,'Gear_5':5,},),]),]def create_database(name, filename):db = kvadblib.Dbc(name=name)for _msg in _messages:message = db.new_message(name=_,)for _sig in _msg.signals:if isinstance(_sig, EnumSignal):_type = kvadblib.SignalType.ENUM_UNSIGNED_enums = _sig.enumselse:_type = kvadblib.SignalType.UNSIGNED_enums ={}message.new_signal(name=_,type=_type,byte_order=kvadblib.SignalByteOrder.INTEL,mode=kvadblib.SignalMultiplexMode.MUX_INDEPENDENT,size=kvadblib.ValueSize(*_sig.size),scaling=kvadblib.ValueScaling(*_sig.scaling),limits=kvadblib.ValueLimits(*_sig.limits),unit=_sig.unit,enums=_enums,)db.write_file(filename)db.close()if __name__ =='__main__':parser = argparse.ArgumentParser(description="Create a database from scratch.")parser.add_argument('--filename', default=r'..\engine_example.dbc',help=("The filename to save the database to."))parser.add_argument('-n','--name', default='Engine example',help=("The name of the database (not the filename, the internal name."))args = parser.parse_args()create_database(, args.filename)3.2使⽤⽅法代码中if __name__ == '__main__':下:parser.add_argument('--filename', default=r'..\engine_example.dbc',help=("The filename to save the database to."))指定的filename为创建的DBC⽂件的路径以及⽂件名,本代码中便是将DBC⽂件存在代码所在⽬录的上层⽬录中,以engine_example.dbc⽂件名保存代码中_messages列表便是定义CAN帧解析的规则,可以定义:CAN帧的idCAN帧的数据长度CAN帧的解析single规则等等…创建⽅式如下:4.DBC⽂件发送指定格式的CAN数据4.1DBC⽂件发送指定格式的CAN数据代码# author:Hurricane# date: 2021/4/12# File : CAN_Random_Send.py# E-mail:hurri_cane@import argparseimport timeimport randomfrom canlib import canlib, kvadblibbitrates ={'1M': canlib.canBITRATE_1M,'500K': canlib.canBITRATE_500K,'250K': canlib.canBITRATE_250K,'125K': canlib.canBITRATE_125K,'100K': canlib.canBITRATE_100K,'62K': canlib.canBITRATE_62K,'50K': canlib.canBITRATE_50K,'83K': canlib.canBITRATE_83K,'10K': canlib.canBITRATE_10K,}# 随机在dbc结构中抽取⼀个结构def set_random_framebox_signal(db, framebox, signals):sig = random.choice(signals)value = get_random_value(db, sig)framebox.signal().phys = value# 随机在抽取到的结构帧的数值范围中产⽣⼀个值def get_random_value(db, sig):limits = sig.limitsvalue = random.uniform(limits.min, limits.max)# round value depending on type...if(sig.type is kvadblib.SignalType.UNSIGNED orsig.type is kvadblib.SignalType.SIGNED):# ...remove decimals if the signal was of type unsignedvalue =int(round(value))else:# ...otherwise, round to get only one decimalvalue =round(value,1)return valuedef ping_loop(channel_number, db_name, num_messages, quantity, interval, bitrate, seed=0): db = kvadblib.Dbc(filename=db_name)ch = canlib.openChannel(channel_number, canlib.canOPEN_ACCEPT_VIRTUAL)ch.setBusOutputControl(canlib.canDRIVER_NORMAL)ch.setBusParams(bitrate)ch.busOn()random.seed(seed)if num_messages ==-1:# used_messages为dbc⽂件定义的所有帧结构used_messages =list(db)else:used_messages = random.sample(list(db), num_messages)print()print("Randomly selecting signals from the following messages:")print(used_messages)print("Seed used was "+repr(seed))print()while True:# Create an empty framebox each time, ignoring previously set signal# values.framebox = kvadblib.FrameBox(db)# Add all messages to the framebox, as we may use send any signal from# any of them.for msg in db:framebox.add_message()# Make a list of all signals (which framebox has found in all messages# we gave it), so that set_random_framebox_signal() can pick a random# one.signals =[bsig.signal for bsig in framebox.signals()]# Set some random signals to random valuesfor i in range(quantity):set_random_framebox_signal(db, framebox, signals)# Send all messages/framesfor frame in framebox.frames():print('Sending frame', frame)ch.writeWait(frame, timeout=5000)time.sleep(interval)if __name__ =='__main__':description="Send random CAN message based on a database.")parser.add_argument('channel',type=int, default=0, nargs='?',help=("The channel to send messages on."))parser.add_argument('--bitrate','-b', default='500k',help=("Bitrate, one of "+', '.join(bitrates.keys())))parser.add_argument('--db', default="../Mobileye.dbc",help=("The database file to base messages on."))parser.add_argument('-Q','--quantity',type=int, default=5,help=("The number of signals to send each tick."))parser.add_argument('-I','--interval',type=float, default=0.2,help=("The time, in seconds, between ticks."))parser.add_argument('-n','--num-messages',type=int, default=-1,help=("The number of message from the database to use, or -1 to use all."))parser.add_argument('-s','--seed', nargs='?', default='0',help=("The seed used for choosing messages. If possible, will be converted to an int. If no argument is given, a random seed will be used."))args = parser.parse_args()if args.seed is None:seed =Noneelse:try:seed =int(args.seed)except ValueError:seed = args.seedping_loop(channel_number=args.channel,db_name=args.db,num_messages=args.num_messages,quantity=args.quantity,interval=args.interval,bitrate=bitrates[args.bitrate.upper()],seed=args.seed,)4.2使⽤⽅法这份代码的功能为:以DBC⽂件规定的数据格式,随机发送⼀些数据帧出去代码中if __name__ == '__main__':下:parser.add_argument('--db', default="../Mobileye.dbc",help=("The database file to base messages on."))指定的filename为读取的DBC⽂件的路径,本代码中读取的DBC⽂件存在代码所在⽬录的上层⽬录中,以Mobileye.dbc⽂件名存在PS:这⾥⾯的DBC⽂件也可以改为3.1创建DBC⽂件代码中⽣成的engine_example.dbc⽂件此处附上两个DBC⽂件的云盘链接运⾏4.1代码:可以看到Kvaser Can King接收到各式各样的数据,但是其中的具含义我们并不清楚,这边涉及到第5节,使⽤DBC⽂件解析接收到的CAN 帧。
CANoe使用方法
CANoe是Vector公司的针对汽车电子行业的总线分析工具,现在我用CANoe7.6版本进行介绍,其他版本功能基本差不多。
硬件我使用的是CAN case XL.1,CANoe软件的安装很简单,先装驱动,再装软件。
安装完成,插上USB,连接硬件,这样在控制面板中,Vector Hardware 进行查看通过查看信息可知,CANcaseXL中的两个piggy,一个是251(高速CAN),一个是7269(LIN),另外常用的还有1054(低速CAN,或称容错CAN),因为CANcaseXL中只能支持两路通讯,这样piggy可以自由组合2,硬件连接正常,打开CANoe软件File->New Configuration 可以选择新建工程的模版,我们这里选择CAN_500kBaud.tcn,这样新建了波特率为500K CAN工程,可以File->Save Configuration,进行保存3,接下来就要使用CAN db++ Editor工具对总线网络节点,消息,信号,进行定义了。
点击工具栏的这个图标,或开始菜单中找这个工具启动启动后,File->Create Database,选择CANTemplate.dbc,选择目录及文件名,进行保存右键Network nodes->New ,进行网络节点的定义,这里只需要填写Name即可,例如:Node_A然后添加Node_B,完成后如下图,这样在Network nodes目录下面添加出来两个节点节点添加完成后,下一步添加CAN消息,右键Messages->New,这是需要定义名称,ID,DLC 等信息,如下:然后在Transmitters页面,点击Add按钮,添加Node_A为发送节点,意思就是说,此消息是从Node_A节点发送出来的其实还有一种方法就是,此时暂时不定义发送节点,然后直接以拖曳的方式拖曳到发送节点上,功能上是一样的有了消息,消息里携带的东西自然是信号咯,那么我们开始创建一个信号右键Signals->New,填写如下信息信号当然要放到消息中咯,切换到Messages页面,Add 我们刚刚建立的Message_A,当然和上面一样,采用拖曳的方式从Signal到Message中建立关联也是可以的。
dbc文件使用
DBC文件是一种用于描述Controller Area Network (CAN) 通信网络上消息的格式。
它是由Vector公司开发的,并被广泛使用在汽车和其他嵌入式系统中。
DBC 文件包含了关于消息和信号的元数据信息,例如消息的ID、信号的名称、数据类型、偏移量等等。
使用DBC文件可以方便地对CAN网络进行诊断和开发。
以下是使用DBC文件的一些常见方式:
1.使用Vector CANoe等CAN总线分析仪进行读取和解析DBC文件。
这些
工具通常会提供对DBC文件的解析和查看功能,帮助用户理解网络上的
消息结构和内容。
2.在嵌入式系统中使用专门的CAN协议栈来读取和解析DBC文件。
嵌入式
系统通常会使用CAN协议栈来处理CAN总线上的数据,而DBC文件可
以提供关于消息和信号的元数据信息,帮助系统正确地解析和处理数据。
3.在开发过程中,可以使用DBC文件来生成测试用例和验证网络通信的正
确性。
例如,可以将DBC文件导入到仿真环境中,生成虚拟的CAN消
息,以便于进行测试和验证。
总之,DBC文件是一种非常重要的工具,可以帮助用户理解和处理CAN通信网络的数据。
CANas分析软件,DBC文件解析,CAN报文分析,仿CANoe曲线显示
CANas分析软件,DBC⽂件解析,CAN报⽂分析,仿CANoe曲线显⽰2021.12.01:UDS增加CANFD,充电桩BMS模拟参考了CANoe写了下⾯的软件,主要⽤途是对报⽂的回放及曲线的分析。
1、CAN连接,⽀持周⽴功CAN、CANFD及PCAN2、DBC解析与⽣成⽂件打开DBC,可以打开已有的DBC⽂件,内容会在主界⾯上显⽰。
优先显⽰中⽂注释和实际值。
如果⽤本软件的编辑DBC功能,把协议类型改为:发送帧,就可以在主界⾯进⾏DBC的发送模式。
DBC编辑界⾯:简单直观好⽤。
点击空⽩⾏可增加⼀⾏新的内容,可以输⼊中⽂,在数据区增加新⾏时,LSB值会根据上⼀⾏的位长度计算出⾃⼰的值。
更改数据类型为枚举类型,可以在右侧直观的输⼊相应的值,值会在新建⾏时⾃动加1.Bit矩阵可以显⽰当前信号所在的位置。
点击空⽩⾏可以增加新的⾏3、历史报⽂解析,⽀持asc、csv、blf、trc等格式如果你⽤的历史报⽂不是标准格式⽆法导⼊,可以把报⽂另存为CSV格式,其中CSV的格式如下:对历史数据进⾏播放:只显⽰当前DBC的报⽂点击开始可以对历史报⽂进⾏回放,主界⾯显⽰当前报⽂的实时值。
4、曲线⽣成,仿CANOE的曲线显⽰⿏标中键可以对⿏标所在的区域进⾏放⼤与缩⼩。
对整形与枚举区分显⽰不同的曲线,与CANoe⼀致实时显⽰:显⽰连接到CAN后的时间报⽂。
播放记录:播放当前记录曲线,在播放前要在:报⽂分析->导⼊数据,进⾏历史数据的导⼊⼯作。
Y轴适应:Y轴显⽰当前数据的数值最⼤值。
X轴适应:X轴显⽰全部时间数据X轴竖线:显⽰两条竖线间的时间t1、t2、和△t局部放⼤:放⼤按住⿏标后,拖选的区域5、⽀持J1939报⽂的解析,可以解析充电桩国标报⽂6、UDS故障诊断可以更改配置后,进⾏保存,也可导⼊已存的配置的导⼊。
⽀持安全算法DLL的导⼊。
7、UDS烧写功能可以⾃定义烧定的流程。
⽀持Hex、Bin、S19⽂件的烧写。
CANdb++的使用教程
CANdb++的使⽤教程1. CANdb++软件安装安装完成后会提⽰缺少Cdbstat.dll⽂件,需要将Cdbstat.dll放⼊对应的⽂件夹下。
32位系统,需要复制Cdbstat.dll⽂件,复制到C:\Windows\System3264位系统,需要复制Cdbstat.dll⽂件,复制到C:\Windows\SysWOW642.新建dbc⽂件打开CANdb++,新建dbc⽂件这三个是建⽴CAN的dbc⽂件,通常我们会使⽤到CANoe,我们就使⽤CANoe的模板。
这些模板的区别主要在于属性上不同,可以在help ⽂档上查询template.选择模块后,给dbc⽂件命名并选择存储路径。
然后软件界⾯如下,选中左侧的signals,⿏标右击,选择NEW修改前:修改后:注:“Name” 表⽰该信号的名称“Length[Bit]:” 表⽰该信号的长度,以Bit度量;“Byte Order:” 表⽰数据格式,有“Motorola(⼤端模式)”,“Intel(⼩端模式)”可选,根据实际情况选择;“Value Type:” 表⽰数据是有/⽆符号类型(若偏移量为0,需要表⽰负数,则该项选择Signed; 若偏移量为负数,需要表⽰负数,则该项选择Unsigned。
);“Factor:” 表⽰分辨率; “Offset:” 表⽰偏移量;“Minimum:”和“Maximum”表⽰该信号实际范围;⽐如,截图中最⼤值是30 即信号值3000*0.01(Factor) = 30,即信号的最⼤值是3000.“Init.Value:” 表⽰该信号的初始值;“Unit:”表⽰单位。
解析数据时:实际的信号物理值 = 分辨率 * CAN信号值 + 偏移量还可以对信号添加备注,选中左侧的message,⿏标右击,选择NEW然后弹出如下对话框,修改后,注:“Name:” 表⽰新增ID的名称;“ID:” ⽤⼗六进制表⽰,如果是标准帧,范围:0~0x7FF;“DLC:” 表⽰新增message的实际的长度,最⼤为8.添加该message的signals定义该message的发送节点设置signal在该message中的位置(前⾯也可以通过offset定义),蓝⾊的signal可以通过⿏标拖动修改前:修改后(周期性发送,周期为1s):双击信号值添加接受该信号的节点对信号中的值增加描述信息。
debugcan 多帧dbc制作方法
制作多帧DBC文件的方法包括以下步骤:
导入原始DBC文件:使用CANoe或CANdb++等工具打开原始DBC文件,并确认DBC文件中已经包含了需要的信号和报文。
创建新的Frame:在DBC文件中创建一个新的Frame,用于存储多帧数据。
配置多帧参数:在新建的Frame中配置多帧参数,包括多帧数据的起始帧、数据帧数量、数据帧顺序等。
添加信号到多帧数据:将需要拆分成多帧发送的信号添加到新建的Frame中。
配置信号参数:为添加到多帧数据中的信号配置参数,包括信号的起始位、长度、缩放因子、偏移量、单位等。
生成多帧DBC文件:在完成以上配置后,保存并生成多帧DBC文件。
注意事项:
在制作多帧DBC文件时,需要确保CAN网络中的其他节点也支持多帧传输协议,并且能够正确解析和处理多帧数据。
多帧数据的传输效率会受到一定影响,因此需要根据实际情况评估是否需要使用多帧传输方式。
在使用多帧DBC文件进行调试时,需要使用支持多帧传输的调试工具,例如CANoe或CANalyzer等。
使用CANOE进行CAN总线的DBC文件制作
使用CANOE进行CAN总线的DBC文件制作A DBC file is a standardized database format used to define and represent CAN messages and signals within a network. This file contains information about the message identifiers, signal descriptions, and signal values. It is essential for the successful implementation and testing of a CAN-based system.To create a DBC file using CANOE, follow the steps below:3. Select the network configuration: In the project setup wizard, choose the type of network you will be working with (e.g., CAN, LIN, FlexRay, etc.). Select the appropriate network configuration and baud rate. Click on "Next."4. Define the ECU nodes: In this step, you need to define the ECU nodes participating in the network. Enter the node names and assign unique Node IDs or addresses to each node. Click on "Finish."5. Create a new DBC file: In the project explorer window, right-click on the project root and select "New > CAN > DBC." Choose a name for your DBC file and click on "Finish."8. Define message and signal values: If your application requires predefined signal values, you can define them in the DBC file. This allows you to associate specific values with signals, making it easier to interpret and analyze the data during testing and analysis.9. Import or export DBC files: CANOE allows you to import or export DBC files in various formats, such as .dbc, .arxml, .xls, etc. This feature enables collaboration with other tools or systems that support different file formats.11. Apply the DBC file to the CAN network: Finally, apply the generated DBC file to the CAN network in CANOE. This step ensures that the defined messages and signals are correctly transmitted and received by the participating ECUs.。
dbc文件 制作方法(一)
dbc文件制作方法(一)DBC文件制作方法什么是DBC文件?DBC文件(Diagnostic Data C(CAN)file)是用于描述数据通信结构的文件格式,常用于汽车诊断系统中。
它定义了CAN通信网络上的节点、消息、信号以及其属性等信息。
DBC文件制作方法下面列举了几种常见的DBC文件制作方法:方法一:使用专用工具制作1.查找并选择一款专用的DBC文件编辑工具,例如[VectorCANoe](2.打开工具后,创建一个新的DBC文件项目3.在项目中,创建所需的节点、消息和信号等4.设定节点的属性,如名称、地址等5.按需设定消息的属性,如ID、周期等6.定义信号的属性,如名称、长度、物理值等7.保存文件,生成最终的DBC文件方法二:使用文本编辑器制作1.使用文本编辑器(如Notepad++、Sublime Text等)打开空白文本文件2.在文件中按照[DBC文件格式](3.保存文件,并将文件后缀改为”.dbc”表示为DBC文件方法三:基于现有DBC文件修改1.找到一个已有的DBC文件作为基础模板2.使用文本编辑器打开该文件3.根据需求修改节点、消息和信号等信息4.保存文件,并生成最终的修改后DBC文件总结制作DBC文件可以通过使用专用工具、文本编辑器或基于现有文件进行修改等方法来完成。
根据实际情况选择合适的方法,熟悉DBC 文件格式规则可以更好地制作出符合要求的DBC文件。
方法一:使用专用工具制作1.首先,选择一款专门用于编辑DBC文件的工具,例如 VectorCANoe。
这种工具提供了直观的用户界面,便于创建和编辑DBC文件。
2.打开Vector CANoe并创建一个新的DBC文件项目。
可以通过点击菜单栏中的“File -> New -> DBC File”来创建一个新的项目。
3.在项目中,创建所需的节点、消息和信号等。
可以使用工具提供的选项和按钮进行创建。
例如,可以选择“Node”选项并点击“Add”按钮以创建一个节点。
基于CANoe的CAN总线设计基础与简例
基于CANoe的CAN总线设计基础与简例CANoe概述CANoe是德国Vecto:公司开发的一套通用的CAN总线系统的开发、测试和分析工具。
CANoe的主要组成部分和各自功能为:●CANdb++编辑器:用CANdb++编辑器可以创建或编辑数据库文件(*.dbc)。
数据库文件中包括了CANoe所用到的信号的信息,这当中包括了报文和信号的网络节点和符号名称,以及环境变量等信息。
●CAPL浏览器:利用CAPL浏览器可以创建用于测量和模拟面板的CAPL程序。
因为数据库的应用,在编程时可以使用直观的报文和信号的名称,而不必使用二进制代码的报文头和数据。
●CANoe主程序:用于测量和模拟CAN系统。
通过File/Database菜单,可以在主程序中关联一个或多个数据库。
●面板编辑器:通过面板编辑器可以创建面板。
面板的作用是作为用户和在CANoe里的模拟面板里被模拟的网络节点的I/O接口。
除了标准按钮和开关,在面板编辑器中也可使用位图作为显示和控制器件。
可以使用任意的位图编辑软件创建合适的位图,然后用十面板编辑器。
任何显示和控制兀件都要和数据库中的环境变量关联好,这样CAPL程序可以在CANoe主程序中读写显示和控制兀件。
使用CANoe进行开发的三个阶段使用CANoe的开发过程可以分为3个阶段:第一个阶段是利用数字仿真进行网络需求分析和设计阶段。
该阶段首先要定义网络里的通讯需求,包括:需要几个节点;在网络中要发送多少个报文;数据从哪个节点传输到哪个节点;每个报文的具体组成;有哪些外部的输入输出。
然后,利用网络数据库工具CANdb++建立起CAN通讯数据库。
接下来,建立网络拓扑结构,选择总线的波特率,定义节点的网络行为,使用CANoe建立各个网络节点的模型,并通过仿真来预估在设定波特率情况下的总线负载和延迟。
通过第一个阶段的仿真可以检验各个节点功能的完善性和网络的合理性,也可以监控网络负载和延迟。
第一阶段如图3-3所示。
dbc文件标准
dbc文件标准
DBC文件是一种CAN总线诊断文件格式,用于定义CAN总线通信协议。
DBC文件通常由CAN总线诊断工具厂商或开发人员编写,可以通过CAN
总线诊断工具进行导入和导出。
DBC文件包含以下主要部分:
1. Version:定义DBC文件格式版本。
2. Nodes:定义CAN总线上的节点数量和名称。
3. Messages:定义CAN总线上的消息,包括消息ID、名称、长度和周期等信息。
4. Signals:定义CAN消息中每个信号的名称、长度、位置、单位、因子、范围等信息。
5. Environment variables:定义环境变量,可以用于定义常量或变量值。
6. Value tables:定义信号值与实际物理值之间的映射表。
7. Comments:可以添加注释,用于描述CAN总线的相关信息。
DBC文件通常用于描述信号名称、物理值、信号长度、发送周期、计算公式、单位等信息,常用于CAN总线网络中的电子控制单元(ECU)通信中。
DBC的介绍及制作
数据场
◦ 为0~8个字节 ◦ 先发送MSB
参数组编号 PGN 是一个 24 位的值,用来识 别 CAN 数据帧的数据域属于哪个参数组. PF>=0xF0,则PGN=PF*256+PS; PF<0xF0,则PGN=PF*256;
DBC文件可用来描述单 一CAN总线的通讯。
DBC文件可有效用于监
测和解析网络,甚至模 拟CAN节点(当没有实际 物理节点时)。
推荐使用的DBC编辑工 具为Vector的 CANDB++。
菜单
快捷方式 窗体视图
当信号长度不超过1个字节(8位), Intel 与 Motorola 两种格式的完全 一样
Intel :当信号长度超过1个字节,该信号的高位将放在高字节的高位, 信号的低位将放在低字节的高位。
• Motorola:当信号长度超过1个字节,该信号的高位将放在低字节的高 位,信号的低位将放在高字节的高位。
信号放大系数
信号描述的所需位数 信号的格式Intel/Motorola
信号的类型
信号的数值表选择
帧ID的标准格式和扩 展格式选择
数据场的字节数
帧ID的16进制数
按照过滤规则,选择对 应的信号导入
CAN和DBC介绍 DBC的制作
控制器局部网络: Controller Area Network
CAN总线可用于控制器之间的信息交互.
CANH升高,CANL下 降,此时表示逻辑”0”,
CANH,CANL均 2.5V时,此时表示逻
辑”1”,
CAN报文ID ◦ 标准格式,11位 ◦ 扩展格式,29位
信号布局可在
该视图,直接 拖拽调整
枚举的数值和 描述
【灵冰肌】CANoe学习笔记-CANdb
编辑dbc文件的时候,各内容的创建CANdb++ Data ModelControl Units (ECUs: Electronic Control Units) (3)Info (4)Environment Variables (5)Network Nodes (7)Info (7)Messages (9)Info (10)Signals and Message Signals (10)Network:一个网络中往往有很多个控制单元ECU,ECU之间通过网络节点(NN)连接,并且在同一个CAN总线上交换信息。
NetworkIn a network there are usually multiple control units (ECUs) that are connected to one another by their network nodes (NN) and exchange information over the same CAN bus.控制单元(电子控制单元ECUs):控制单元在网络中的角色是分配处理单元,并通过网络节点与别的控制单元之间的信息交换。
控制单元可能包含多样的sub-function(功能节点)。
环境变量在CANdb++的数据模型中被分配到控制单元。
多个网络节点可以被分配到一个控制单元,这会使能网关的建模。
当控制节点在处理过程中时候,其名字以及备注不能修改,因为CANdb数据库不支持控制单元作为一个独立的目标。
当一个数据库打开,一个控制单元就会被每一个节点install(安装,设置)。
“还没理解明白install是怎么回事”注:任何一个网络节点被定义的时候,CANdb就会自动定义一个同名的ECU,以及在在新的网络节点和ECU之间install a link。
当创建了一个网络节点,会为一个DBC数据库的一个网络建立一个link。
由于一个DBC数据库总是会包含既存的网络的数据,所以新的网络不能被installControl Units (ECUs: Electronic Control Units)Control units are the distributed processing units in the network.Information is exchanged with other control units via network nodes,which represent the control unit's interface to the CAN bus.Control units can also contain multiple sub-functions (functional nodes).Environment variables are assigned to the control unit in the CANdb++ data model.Several network nodes can be assigned to a control unit, which enables the modeling of gateways.The name and comment of a control unit cannot be changed while processing, because a CANdb database doesn't support control units as independent objects.When a database is opened a control unit is installed for every node.Info∙Whenever a network node is defined, CANdb automatically defines a ECU with the same name, and a link is installed between the new network node and theECU.∙When a network node is designed (installed), this establishes a link to the one network of a DBC database.Since a DBC database always contains the data of exactly one network, a new network cannot be installedEnvironment VariablesInput and output variables of network nodes, such as switch position, sensor signals and actuator signals.In the CANdb++ data model environment variables are assigned to the control unit.Environment variables are defined by the following system parameters:∙Symbolic name of the environment variable∙Value type (data type) of the environment variableInteger – Signed 32 Bit IntegerString – ASCII StringFloat – 64 Bit FloatData – Byte field of a specified length (the length is set in the Length attribute).∙Access rightsDefines the rights that Electronic Control Units (ECU's) have when they accessenvironment variables.Unrestricted: All ECU's have read and write access.The assigned ECU's can read the environment variable.Read:(The environment variable represents a sensor.)The assigned ECU's can write to the environment variable.Write:(The environment variable represents an actuator.)Read/Write:The assigned ECU's can read from and write to environment variables.∙UnitUnit of the physical quantity of the environment variable.∙Initial Value (only available for environment variables of value type Integer or Float) Initial value of the environment variables at the start of a simulation or measurement.Remark:When you enter '0' for both Minimum and Maximum, the Initial Value can be any value(according to the chosen Value Type).∙Minimum and Maximum (only available for environment variables of value type Integer or Float)Minimum and Maximum of a valid physical value.Note:When you enter '0' for both Minimum and Maximum, the Initial Value can be any value(according to the chosen Value Type).∙Length (only available for environment variables of value type Data)Length of the data field in byte.∙CommentThe following parameters may be assigned optionally to an environment variable:∙Value tables for environment variable values∙Concrete values for user-defined attributes网络节点是控制单元和网络的接口,控制单元输出信息以及接收信息通过CAN总线。
使用candb++制作dbc文件笔记
使用candb++制作dbc文件笔记
今天又来分享一篇工具使用的文章,candb++的工具,也是Vector的,用来制作、编辑或者是查看dbc文件,今天主要来分享dbc文件的创建。
1.打开candb++软件,单击菜单File,单击CreateDatabase,选择第一个模板点击OK,命名dbc文件进入文件编辑。
2.右键单击Message,选择New,在Message的Definition界面中根据整车通讯协议定义对Message进行编辑;主要包括Message_Name,CAN报文类型,ID和DLC。
3.新建完message之后,需要新建signal了。
右键单击Signal,选择New,在Signal的Definition界面中根据整车通讯协议定义对Signal进行编辑,包括名称、长度、字符类型等属性。
4.完成message和signal之后,就需要将signal映射到message 了。
单击Message,选择Add,选择对应的Message并单击OK,将Signal关联至对应ID的Message,还需要设置signal的startbit,接收节点和发送节点。
使用CANOE进行CAN总线的DBC文件资料制作
使用CANOE进行CAN总线的DBC文件资料制作CAN总线是一种广泛应用于汽车和工业自动化等领域的实时通信协议。
为了让不同的硬件和软件模块能够正确地解析和发送CAN消息,需要使用一个DBC文件来描述CAN总线上的消息和信号。
1.打开CANOE软件,并创建一个新的工作环境。
在菜单栏中选择“文件”->“新建”->“环境”。
2.在新建的工作环境中,选择“数据库”->“新建”,然后选择DBC文件类型。
5.设置信号的物理值范围。
在信号的属性中,点击“发送方向”右侧的下拉菜单,在弹出的对话框中点击“物理值范围”,然后设置信号的最小值和最大值。
6.添加信号的值表。
在信号的属性中,点击“值范围”右侧的下拉菜单,在弹出的对话框中点击“值表”,然后添加信号的物理值和对应的数值。
7.指定消息的发送周期。
在消息的属性中,点击“发送周期”右侧的下拉菜单,选择合适的发送周期。
8.添加节点。
点击顶部工具栏中的“节点”按钮,在弹出的对话框中选择合适的节点类型并输入节点的名称。
9.将消息分配给节点。
在节点属性中,点击“支持消息”右侧的下拉菜单,在弹出的对话框中选择需要支持的消息。
10.保存DBC文件。
点击顶部工具栏中的保存按钮,选择保存的路径和文件名,然后点击保存。
上述步骤是一个简单的DBC文件制作的示例,CANOE还提供了更多高级的功能和选项,比如添加节点的物理属性、添加信号的触发条件等。
总的来说,使用CANOE进行CAN总线的DBC文件制作是一个相对简单和直观的过程。
通过正确地配置和定义消息和信号的属性,可以实现不同硬件和软件模块之间的正确通信和数据解析。
使用CANOE进行CAN总线的DBC文件制作
使用CANOE进行CAN总线的设计信号定义与分配byte xbit(8*x+7)bit(8*x) msb lsb注:x=0,1,2,3 (7)图1一般主机厂设计人员在设计初期都会定义好字节的发送顺序,定义Byte0为LSB,Byte7为MSB。
第一种情况:先发送Byte0,然后Byte1到Byte7;第二种情况:先发送Byte7,然后Byte6到Byte0。
根据我了解到的大部分主机厂都会采取第一种发送方法,很少会采取后者。
我们在用CANoe中的CANdb++编辑数据库时,肯定会用到如下图所示的编辑界面。
Motorola Forward LSB,即从小端开始,它的起始位为lsb(16);第二种排布形式为Motorola Forward MSB,即从大端开始,它的起始位为msb(11);第三种排布形式为Motorola Backward,它的起始位为第8位,这种形式基本不采用,因为排布规律相对于前两种比较复杂。
如下图所示;图4图5在CANdb++中,无法区别这三种排布形式,它的起始位也是自动定义的,所以我们在设计通讯矩阵时,一般都会采用第一种,即Motorola Forward LSB。
只是有的工程师根据自己的个人习惯,去改变起始位,但我们需要明确一点就是,在Canoe软件中,一种格式的信号排布是没有区别的。
二、Intel编码格式如果我们选择使用Intel编码格式,它在CANdb++中也有两种信号排布方式。
图8以上文字介绍了当信号的位长超过一个字节的情况下,信号分别以Motorola 编码格式和Intel编码格式排布时的区别。
我们现在假设一个信号的位长为4,观察在CANdb++中信号的排布有什么区别。
Motorola编码格式下的信号排布:(绿色信号)2.在编写通讯矩阵时,在起始位的编写中,常会将Intel格式和Motorola格式弄混。
例如:如下图所示的通讯矩阵希望大家能从此篇文章中收获一些经验。
页眉内容文中术语解释及定义:1.2.信号的高位,即最能表达信号特性的因子,比如:车速信号500km/h按页脚内容。
CANoe分类分析CAN数据
CANoe分类分析CAN数据
最近安装了CANOE10版本,学习使用CANoe来分析车辆数据,打开软件后发现从未接触的东西太多,想快速分析CAN报文,基本不可能,通过艰难多方求助方法,才得以解决此问题,方法经过实战测试,基本无问题。
特此将解决办法记录于此:
1、打开VectorCANoe软件,选择CANoe 10.0 SP3;选择Configuration,切换界面;点击打开CAN Networks 的CAN,确定Channels,添加DBC至Databases。
2、在Measurement Setup窗口双击文件夹添加需要分析的文件。
3、添加报文后,在Graphics上右击,并点击Insert Graphics Window,可以再添加一个Graphics2
窗口,如下图,在新建窗口处单击,新建Desktop1,可以更改其名称:
4、在Desktop1窗口中,进入Analysis菜单中,点击Graphics,把之前新建的Graphics2调入此窗口,如下图。
5、同理,在Analysis窗口中,进入Analysis菜单中,点击Graphics,把Graphics调入此窗口;
6、通过右击Desktop1,选择Rename the Desktop,可以重命名为自己需要的分类,例如下图,把Analysis及Desktop1全部重命名为HvUpDown及VehRun;右击窗口中蓝色区域,单击Add Signals,选择需要的信号进行回放。
7、可以同时创建多个Desktop窗口并重命名,在不同的Graphics中分类添加所需信号。
感谢支持观看文章,未能解决请留言。
通过CANdb++创建一个新的DBC文件(心法工具篇)
通过CANdb++创建⼀个新的DBC⽂件(⼼法⼯具篇)怎样创建⼀个DBC呢?⽅法1.XLS2DBC(略...)通常情况下,我们可以拿到通信矩阵表。
这时可以先整理好通信矩阵的表格格式,再通过⽹上提供的⼀些⼯具直接转换成DBC,欲获取⾃⾏搜索。
如果⾃⼰具备编码能⼒,也可以⾃⼰去写转换⼯具实现。
⽅法2. 通过CANoe的⼩⼯具CANdb++新建DBC⽂件CANdb++在CANoe中的位置注意:可去官⽹下载单独安装-----------------------分割线-------------------------在开始讲解DBC的创建之前,先说⼀下基本知识点1. Intel 和 Motorola格式在CAN数据库中的信号可以定义为intel或motorola处理器的字节序,它⽤来区分消息中信号的字节排序情况。
Byte order for Motorola processors (Big Endian)Byte order for Intel processors (Little Endian)Bit significance (Bit Order)Within a byte the significance of bits is the same in both formatsmsb: most significant bit; lsb: least significant bitBit IndicationThe bits of a message have following indices:(1) Bit indexing in the byte from the right to the leftTransmitting a message with 8 byte length on the bus, bit 7 (most significant bit of byte 0) will be transmitted first, followed by bit 6. Bit 56 (least significant bit of byte 7) will be transmitted at last.(2) Bit indexing in the byte from the left to the right – inverted or sequential bit indexingTransmitting a message with 8 byte length on the bus, bit 0 (most significant bit of byte 0) will be transmitted first, followed by bit 1. Bit 63 (least significant bit of byte 7) will be transmitted at last.2.对象命名规则注意:此处的对象在第3点会描述这些对象的属性(1) 以下对象的命名需遵循C语⾔标识符的命名规则必须字母或下划线开头,之后可以包含字母/字符/下划线等.Signals, multiplexor signals, multiplexed signalsSignal groups, multiplexor signal groups, multiplexed signal groupsMessagesNodes/network nodesValue tablesEnvironment variables(2) 以下对象的命名不受约束Controllers/ECUsVehiclesNetworksNode groupsAttributesValue descriptions within value tables*3.Vector⼯具链属性总体分为以下5类,分别是DBC数据库中的各个对象下的⼀些属性,这些属性的定义了它们能⽤在Vector的哪些⼯具链中。
dbc文件 制作方法
dbc文件制作方法制作dbc文件的方法dbc文件(Database Container)是CAN总线数据定义文件,用于描述CAN信号的物理属性、数值范围、单位等信息。
制作dbc 文件需要遵循一定的规范和步骤,本文将介绍制作dbc文件的方法。
一、创建新的dbc文件在制作dbc文件之前,首先需要创建一个新的dbc文件。
可以使用文本编辑器(如Notepad++)或专业的dbc编辑器(如CANdb++)来创建和编辑dbc文件。
二、定义通信协议在dbc文件中,需要定义通信协议。
通信协议包括通信速率、帧格式、节点等信息。
首先定义通信速率,可以是标准的CAN通信速率(如500kbps)或者自定义的通信速率。
然后定义帧格式,可以是标准的CAN2.0A或CAN2.0B帧格式,也可以是自定义的帧格式。
最后定义节点,包括节点名称和节点ID。
三、定义信号在dbc文件中,需要定义信号。
信号是CAN数据帧中的数据字段,用于传输实际的数据。
信号包括信号名称、信号起始位、信号长度、数据类型、数值范围、单位等信息。
可以根据实际需求定义不同的信号。
例如,可以定义一个速度信号,用于表示车辆的速度,包括速度的起始位、长度、数据类型(如整数或浮点数)、数值范围(如0-200km/h)和单位(如km/h)。
四、定义信号组在dbc文件中,可以定义信号组。
信号组是一组相关的信号,用于表示一组相关的数据。
信号组可以包括多个信号,可以根据实际需求定义不同的信号组。
例如,可以定义一个车辆信息信号组,包括速度、加速度、转向角等信号。
五、定义节点属性在dbc文件中,可以定义节点属性。
节点属性包括节点的属性、节点的状态和节点的功能等信息。
节点属性可以根据实际需求定义不同的属性。
例如,可以定义一个车辆节点,包括车辆的制造商、型号、版本等属性。
六、保存和导出dbc文件在制作dbc文件完成后,需要保存和导出dbc文件。
可以使用文本编辑器或专业的dbc编辑器将文件保存为dbc格式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用CANO进行CAN总线的设计
信号定义与分配
DBC文件制作
我们在进行CAN总线的通讯设计过程中,对于通讯矩阵的建立,我们常常会选择一种编码方式,最常见的编码格式是In tel格式和Motorola格式。
但是往往人们都是以一种习惯去选择,究竟两种格式具体的区别在哪里呢?我们需要明白两种格式对信号是如何排布的,又是按照什么顺序进行正确解析的。
本篇文章就是作者根据在整理通讯矩阵和dbc文件中
遇到的一些问题,提出的自己的一些体会和见解,希望大家通过此篇文章对两种格式有更加深刻的理解。
我们在设计初期,都会首先选择一种编码格式,这种选择大多都是根据设计者自己的习惯,具体In tel格式和Motorola格式哪个更有优势的问题,在这里没有区别。
但是就使
用者而言,需要对接收到数据帧进行正确的解析,否则就无法得到想要的信号。
下面我们就来说一下两种格式的区别。
首先我们需要明确一点,无论是In tel格式还是Motorola格式,在每个字节中,数据传输顺序都是从高位(msb)传向低位(lsb )。
如下图所示。
byte x
注:x=0,1,2,3 (7)
图1
一般主机厂设计人员在设计初期都会定义好字节的发送顺序,定义Byte0为
LSB Byte7为MSB第一种情况:先发送Byte0,然后Byte1到Byte7;第二种情况:先发送Byte7,然后Byte6到Byte0。
根据我了解到的大部分主机厂都会采取第一种发送方法,很少会采取后者。
我们在用CANoe中的CANdb+编辑数据
库时,肯定会用到如下图所示的编辑界面。
图2
结合工作中的出现的问题,有的网络设计者会在排布信号的时候出现误区。
上图中用的是比较常规的排布方式,即位在字节中的索引是从右至左,还有一种是颠倒过来的,即从左至右。
如下图所示。
图3
我们现在以第一种矩阵模式进行说明。
在这种情况下,如果主机厂在初期定义先发送LSB 再发送的MSB勺形式,那么数据信号可以按照从上到下,从左到右的顺序发送,非常方便,接收器解析起来也比较容易。
如果主机厂定义先发送MSB!发送LSB的形式,那样数据传输比较复杂,所以一般都不建议用这种方案。
至于设计者常出现的错误我们在下文中会重点说明,下面我们先了解一下Intel 格式和Motorola格式在CANdb+中的区别。
一、Motorola编码格式:
如果我们选择使用Motorola编码格式,那需要知道它在CANdb+中的3种信号排布方式。
这三种排布的主要区别在于它们的起始位不同。
我们假设一个信号
的位长为12,那么它就要跨字节排布。
在Motorola格式中的第一种排布形式为Motorola Forward LSB,即从小端开始,它的起始位为lsb ( 16);第二种排布
形式为Motorola Forward MSB,即从大端开始,它的起始位为msb (11);第三种排布形式为Motorola Backward,它的起始位为第8位,这种形式基本不采用,因为排布规律相对于前两种比较复杂。
如下图所示;
7
6
5432 1 0
msb1
<—------■■■
■■
——l£b2
3
针对上述Motorola格式第一种排布形式,信号的起始位为高字节的低位。
在CANdb+中的具体体现如图所示。
Message EngineState (0x123)'
Definition | & Signafe
Multiplexor Signal No Milhlexoi ■-
J- Transmitters | J- Receivers L再wt | Attributes | Comment
在CANdb+中,无法区别这三种排布形式,它的起始位也是自动定义的,所以 我们在设计通讯矩阵时,一般都会采用第一种,即
Motorola Forward LSB 。
只
是有的工程师根据自己的个人习惯,去改变起始位,但我们需要明确一点就是, 在Canoe 软件中,一种格式的信号排布是没有区别的。
、lntel 编码格式
如果我们选择使用In tel 编码格式,它在CANdb+中也有两种信号排布方式。
我们假设一个信号位长为12,它也是要跨字节排布。
第一种排布形式为In tel Sta ndard ,即标准形式,它的起始位为lsb ( 12)。
信 号的起始位为低字节的低位。
如下图所示:
7
6
5
J
3
2
1
<—
■ ----- -
lsb
1
msb 2…
— —
—・ 2
3
Message 'ErgineState (Q K 123)'
Definition
取消
MulMxor Signal:
Attributes | C omment |
| ® Signals \ J- Transmitters | J- Receivers Layout
第二种排布形式为Intel Seque ntial ,即顺序排布形式或者叫颠倒排布。
这种
形式不太常用,但我们也需要了解,它的起始位为lsb (11)。
如下图所示:
以上文字介绍了当信号的位长超过一个字节的情况下,信号分别以Motorola 编码格式和Intel编码格式排布时的区别。
我们现在假设一个信号的位长为4, 观察在CANdb+中信号的排布有什么区别。
Motorola编码格式下的信号排布:(绿色信号)
图9 Intel编码格式下的信号排布:(绿色信号)
图10
由图可知,两种格式的起始位不同,但是他们的排布方式相同,都是信号的高位放在该字节的高位(mst),信号的低位放在该字节的低位(Isb )。
所以,当一个信号的位长小于8时,那么两种编码格式没有区别。
如果信号的位长大于8, 那么两种编码格式将会产生很大差别。
这是我们在网络通讯设计初期必须要掌握的。
下面我们说一下一些工程师在做通讯矩阵的设计时,常会出现的几个问题:
1. 在编写通讯矩阵时,在起始位的编写中,常会将Intel格式和Motorola格式弄混。
例
如:如下图所示的通讯矩阵
如果一个信号的位长为4,那么若是Motorola 编码格式,那它的起始位就是4;而若是Intel 编码格式,那它的起始位就是0。
2. 在CANdb+中进行通讯矩阵的调整时,首先应明确信号选取的编码格式,然后进行拖曳,
有的工程师常常在没有区分编码格式,凭借主观感觉对通讯矩阵进行调整,这往往会导致信号的传输错误。
3. 在信号跨字节排布中,未明确msb和lsb,在拖曳过程中会出现错误。
综上所述,Motorola 编码格式和Intel 编码格式主要区别还是在信号位长大
于8或者信位长不超过8但是跨字节的情况下,前者的规则:该信号的高位(S_msb 将被放在低字节(MSB的高位,信号的低位(S_lsb )将被放在高字节(LSB 的低位;后者的规则:该信号的高位(S_msb将被放在高字节(MSB的高位,信号的低位(S_lsb 将被放在低字节(LSB 的低位。
希望大家能从此篇文章中收获一些经验。
文中术语解释及定义:
1. 信号的高位,即最能表达信号特性的因子,比如:车速信号500km/h 按照给定的
公式,转换成十六进制数为0x6A5,因为6代表的数量级最大
(162),那么其中6 就是其信号的高位。
2. 信号的低位,即最不能表达信号特性的因子,比如:车速信号500km/h 按照给定的
公式,转换成十六进制数为0x6A5,因为5代表的数量级最小(160),那么其中5 就是其信号的低位。
3•信号的起始位,一般来讲,主机厂在定义整车CAN总线通信矩阵时,其每一个信号都从其最低位开始填写,这样也符合使用习惯。
所以信号的起始位就是信号的最低位。
这也与CANoe中CANdb+的定义Startbit 含义一致。
范文素材和资料部分来自网络,供参考。
可复制、编制,期待你的好评与关注)。