在可以使用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 (“车速”)
关闭DBC-File
关闭访问DBC-file通过清算其变量的工作区。
清晰的db