主要内容

在可以使用DBC-Files沟通

这个例子向您展示了如何创建、使用信息存储在DBC-files接收和处理消息。这个例子描述了工作流网络可以,但这个概念也适用于一个可以FD网络。

打开DBC-File

打开的文件demoVNT_CANdbFiles.dbc使用canDatabase

db = canDatabase (“demoVNT_CANdbFiles.dbc”)
db =数据库与属性:名称:“demoVNT_CANdbFiles”路径:/ tmp / Bdoc22a_1891349_157288 / tpe433a46b vnt-ex80654288 / demoVNT_CANdbFiles。dbc的UTF8_File: / tmp / Bdoc22a_1891349_157288 / tpe433a46b vnt-ex80654288 / demoVNT_CANdbFiles。dbc' Nodes: {} NodeInfo: [0x0 struct] Messages: {5x1 cell} MessageInfo: [5x1 struct] Attributes: {} AttributeInfo: [0x0 struct] UserData: []

检查消息属性的名字在这个文件中定义的所有消息。

db.Messages
ans =5 x1细胞{' DoorControlMsg} {‘EngineMsg} {‘SunroofControlMsg} {‘TransmissionMsg} {' WindowControlMsg '}

查看消息信息

使用messageInfo消息的查看信息EngineMsg,包括标识符、数据长度和信号列表。

messageInfo (db,“EngineMsg”)
ans =结构体字段:名称:‘EngineMsg ProtocolMode:“可以”评论:“ID: 100扩展:0 J1939:[]长度:8 DLC: 8 br: 0信号:{2 x1细胞}SignalInfo: [2 x1 struct] TxNodes: {0 x1细胞}属性:{}AttributeInfo: [0 x0 struct]

你也可以查询所有消息的信息。

messageInfo (db)
ans =5×1结构体数组字段:名称ProtocolMode评论ID长度延长J1939 DLC br信号SignalInfo AttributeInfo TxNodes属性

查看信号信息

使用signalInfo查看信息的信号EngineRPM在消息EngineMsg,包括类型、字节次序、大小和缩放值原始信号转换成物理值。

signalInfo (db,“EngineMsg”,“EngineRPM”)
ans =结构体字段:名称:“EngineRPM”评论:“StartBit: 0 SignalSize: 32 ByteOrder:“LittleEndian”签署:0 ValueType:“整数”类:“uint32”因素:0.1000抵消:250最低:250最大:9500台:“rpm”ValueTable: [0 x1 struct]多路复用器:0多路复用:0 MultiplexMode: 0 RxNodes: {0 x1细胞}属性:{}AttributeInfo: [0 x0 struct]

你也可以查询信息信号的信息EngineMsg在一次。

signalInfo (db,“EngineMsg”)
ans =2×1结构体数组字段:名字评论StartBit SignalSize ByteOrder签署ValueType类因素抵消最小最大单位ValueTable多路复用器多路复用MultiplexMode RxNodes属性AttributeInfo⋮

创建一个消息使用数据库定义

创建一个新的消息通过指定数据库和消息的名字EngineMsg数据库定义应用。可以在此消息信号表示在工程单位除了原始数据字节。

msgEngineInfo = canMessage (db,“EngineMsg”)
msgEngineInfo =消息与属性:信息识别ProtocolMode:“可以”ID: 100扩展:0的名字:“EngineMsg”数据细节时间戳:0数据:[0 0 0 0 0 0 0 0]的信号:[1 x1 struct]长度:8协议标志错误:0远程:0其他信息数据库:[1 x1。数据库用户数据:[]

查看信号信息

使用信号财产看到此消息的信号值。你可以从这些信号直接写入和读取包的数据信息。

msgEngineInfo.Signals
ans =结构体字段:VehicleSpeed: 0 EngineRPM: 250

改变信号信息

直接写信号EngineRPM改变它的值。

msgEngineInfo.Signals。EngineRPM = 5500.25
msgEngineInfo =消息与属性:信息识别ProtocolMode:“可以”ID: 100扩展:0的名字:“EngineMsg”数据细节时间戳:0数据:[23 205 0 0 0 0 0 0]的信号:[1 x1 struct]长度:8协议标志错误:0远程:0其他信息数据库:[1 x1。数据库用户数据:[]

,注意,读取当前信号的值EngineRPM已经更新的值写的。

msgEngineInfo.Signals
ans =结构体字段:VehicleSpeed: 0 EngineRPM: 5.5003 e + 03

当一个值是直接写信号,它是翻译,缩放,挤进消息数据使用数据库定义。注意值的变化数据财产后写入新值VehicleSpeed信号。

msgEngineInfo.Signals。VehicleSpeed = 70.81
msgEngineInfo =消息与属性:信息识别ProtocolMode:“可以”ID: 100扩展:0的名字:“EngineMsg”数据细节时间戳:0数据:[23 205 0 0 71 0 0 0]的信号:[1 x1 struct]长度:8协议标志错误:0远程:0其他信息数据库:[1 x1。数据库用户数据:[]
msgEngineInfo.Signals
ans =结构体字段:VehicleSpeed: 71 EngineRPM: 5.5003 e + 03

与数据库信息接收消息

将数据库附加到一个频道,可以接收消息数据库定义应用于自动传入的消息。数据库只解码消息定义。所有其他收到消息在他们的原始形式。

rxCh = canChannel (“MathWorks”,“虚拟1”2);rxCh。数据base = db
DeviceVendor rxCh =通道属性:设备信息:“MathWorks”设备:“虚拟1”DeviceChannelIndex: 2 DeviceSerialNumber: 0 ProtocolMode:“可以运行的状态信息:0 MessagesAvailable: 0 MessagesReceived: 0 MessagesTransmitted: 0 InitializationAccess: 1 InitialTimestamp: [0 x0 datetime] FilterHistory:“标准ID过滤器:允许所有|扩展ID过滤器:允许所有的频道信息BusStatus:“N / A”SilentMode: 0 TransceiverName:“N / A”TransceiverState:“N / A”ReceiveErrorCount: 0 TransmitErrorCount: 0 BusSpeed: 500000 SJW: [] TSEG1: [] TSEG2: [] NumOfSamples:[]其他信息数据库:[1 x1。数据库用户数据:[]

接收消息

启动通道,生成一些消息流量,与物理消息和接收消息解码。

开始(rxCh);generateMsgsDb ();rxMsg =接收(rxCh,正无穷,“OutputFormat”,“时间表”);

查看接收到的消息的前几行。

头(rxMsg)
ans =8×8的时间表时间ID扩展名称数据长度误差信号远程_______ ___ ________ _____________________ ________________________ ______ _______专攻0.049547秒100假{‘EngineMsg} {[0 0 0 0 0 0 0 0]} {1 x1 struct} 8假假0.049549秒200假{‘TransmissionMsg} {[0 0 0 0 0 0 0 0]} {1 x1 struct} 8假假0.049551秒400假{‘DoorControlMsg} {[0 0 0 0 0 0 0 0]} {1 x1 struct} 8假假0.049553秒600假{‘WindowControlMsg} {[0 0 0 0]} 4 {1 x1 struct}假假0.049554秒800假{‘SunroofControlMsg} {[0 0]} 2 {1 x1 struct}假假0.075082秒100假{‘EngineMsg} {(172 129 0 0 0 0 0)} {1 x1 struct} 8假假0.099548秒100假{‘EngineMsg} {(172 129 0 0 0 0 0)} {1 x1 struct} 8假假0.099549秒200假{‘TransmissionMsg} {[4 0 0 0 0 0 0 0]} 8 {1 x1 struct}假假

阻止接收通道和清除工作区。

停止(rxCh);清晰的rxCh

检查收到的消息

检查收到的消息看解码应用数据库。

:rxMsg (10)
ans =1×8的时间表时间ID扩展名称数据长度误差信号远程___________ ___ ________ _________________ ________________________ ______ _______专攻0.14954秒100假{‘EngineMsg} {(172 129 0 0 0 0 0)} 8 {1 x1 struct}假假
rxMsg.Signals {10}
ans =结构体字段:VehicleSpeed: 50 EngineRPM: 3.5696 e + 03

提取指定消息的所有实例

提取信息的所有实例EngineMsg

allMsgEngine = rxMsg (strcmpi (“EngineMsg”rxMsg.Name):);

查看这个特定消息的最初几个实例。

头(allMsgEngine)
ans =8×8的时间表时间ID扩展名称数据长度误差信号远程_______ ___ ________ _________________ ________________________ ______ _______专攻0.049547秒100假{‘EngineMsg} {[0 0 0 0 0 0 0 0]} {1 x1 struct} 8假假0.075082秒100假{‘EngineMsg} {(172 129 0 0 0 0 0)} {1 x1 struct} 8假假0.099548秒100假{‘EngineMsg} {(172 129 0 0 0 0 0)} {1 x1 struct} 8假假0.12454秒100假{‘EngineMsg} {(172 129 0 0 0 0 0)} {1 x1 struct} 8假假0.14954秒100假{‘EngineMsg} {(172 129 0 0 0 0 0)} {1 x1 struct} 8假假0.17454秒100假{‘EngineMsg} {(172 129 0 0 0 0 0)} {1 x1 struct} 8假假0.19954秒100假{‘EngineMsg} {(172 129 0 0 0 0 0)} {1 x1 struct} 8假假0.22455秒100假{‘EngineMsg} {(172 129 0 0 0 0 0)} 8 {1 x1 struct}假假

情节物理信号值

使用canSignalTimetable重新打包信号的数据信息EngineMsg到一个信号的时间表。

signalTimetable = canSignalTimetable (rxMsg,“EngineMsg”);

查看前几行信号的时间表。

头(signalTimetable)
ans =8×2时间表0.049547秒时间VehicleSpeed EngineRPM _______ _______ ____ 50 0 250 0.075082秒3569.6 0.099548秒3569.6 0.12454秒50 3569.6 - 0.14954秒50 3569.6 - 0.17454秒50 3569.6 - 0.19954秒50 50 3569.6 3569.6 0.22455秒

情节的值信号VehicleSpeed随着时间的推移。

情节(signalTimetable。时间,signalTimetable.VehicleSpeed)标题(“从EngineMsg车辆速度”,“FontWeight”,“大胆”)包含(“时间戳”)ylabel (“车速”)

图包含一个坐标轴对象。坐标轴对象与标题车速EngineMsg包含一个类型的对象。

关闭DBC-File

关闭访问DBC-file通过清算其变量的工作区。

清晰的db