创建和处理邮件使用的数据库定义

这个示例向您展示了如何使用存储在CAN数据库文件中的信息创建、接收和处理消息。本例使用CAN数据库文件,demoVNT_CANdbFiles.dbc

打开数据库文件

打开数据库文件并检查消息财产看到在这个数据库中定义的所有消息的名称。

分贝= canDatabase('demoVNT_CANdbFiles.dbc')db.Messages
DB =数据库与属性:名称: 'demoVNT_CANdbFiles' 路径: '/tmp/Bdoc20a_1326390_96406/tpcdc8aedc/ex80654288/demoVNT_CANdbFiles.dbc' 节点:{}的nodeinfo:为0x0结构]消息:{5X1细胞} MessageInfo:[5X1结构]属性:{} AttributeInfo:为0x0结构]的UserData:[] ANS = 5X1单元阵列{ 'DoorControlMsg'} { 'EngineMsg'} { 'SunroofControlMsg'} { 'TransmissionMsg'} { 'WindowControlMsg'}

查看消息信息

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

messageInfo (db,'EngineMsg'
ANS =结构与字段:名称: 'EngineMsg' ProtocolMode: 'CAN' 的评论: '' ID:100扩展:0 J1939:[]长度:8 DLC:8名BRS:0信号:{2×1细胞} SignalInfo:[2×1结构] TxNodes:{为0x1细胞}属性:{} AttributeInfo:为0x0结构]

您还可以查询一齐消息的信息。

messageInfo (db)
ANS = 5X1结构阵列字段:名称ProtocolMode评论ID扩展J1939长度DLC BRS信号SignalInfo TxNodes属性AttributeInfo

查看信号信息

使用signalInfo到视点信号定义信息,包括类型,字节顺序,大小,以及转换原信号以物理值缩放值。

signalInfo(DB,'EngineMsg''EngineRPM'
ans = struct with fields: Name: 'EngineRPM' Comment: " StartBit: 0 SignalSize: 32 ByteOrder: 'LittleEndian' Signed: 0 ValueType: 'Integer' Class: 'uint32' Factor: 0.1000 Offset: 250 Minimum: 250 Maximum: 9500 Units: 'rpm' ValueTable: [0x1 struct] Multiplexor: 0 Multiplexor: 0 MultiplexMode: 0 RxNodes: {0x1 cell}属性:{}AttributeInfo:[0 x0 struct]

您还可以查询上一次消息中的所有信号的信息。

signalInfo(DB,'EngineMsg'
名称Comment StartBit SignalSize ByteOrder Signed ValueType Class Factor Offset Minimum Maximum Units ValueTable multior Multiplexed multimode RxNodes Attributes AttributeInfo . value . value . value . value . value . value . value . value . value . value . value

创建邮件使用的数据库定义

当你创建一个新的消息,应用了数据库定义指定消息的名称。可以在这个消息的信号除了原始数据字节被表示以工程单位。

msgEngineInfo = canMessage (db,'EngineMsg'
msgEngineInfo =消息与属性:消息识别ProtocolMode: 'CAN' ID:100扩展:0名称: 'EngineMsg' 数据细节时间戳:0数据:[0 0 0 0 0 0 0 0]信号:[1x1的结构]长度:8协议标志错误:0远程:0其他信息数据库:[1x1的can.Database]的UserData:[]

查看信号信息

使用信号属性查看此消息的信号值。您可以直接对这些信号进行写入和读取,以从消息中打包或解包数据。

msgEngineInfo。信号
ans = struct with fields: VehicleSpeed: 0 engineerpm: 250

改变信号信息

直接写信号更改值和读取其电流值回。

msgEngineInfo. signals . engineerpm = 5500.25信号
msgEngineInfo = Message with properties: Message Identification ProtocolMode: 'CAN' ID: 100 Extended: 0 Name: ' engineemsg ' Data Details Timestamp: 0 Data: [23 205 00 00 00] Signals: [1x1 struct] Length: 8 Protocol Flags Error: 0 Remote: 0 Other Information Database: [1x1 CAN . 0][] ans = struct with fields: VehicleSpeed: 0 engineerpm: 5.5003e+03

当直接写入信号时,会使用数据库定义将值转换、缩放并打包到消息数据中。

msgEngineInfo.Signals.VehicleSpeed = 70.81 msgEngineInfo.Signals
msgEngineInfo =消息与属性:消息识别ProtocolMode: 'CAN' ID:100扩展:0名称: 'EngineMsg' 数据细节时间戳:0数据:[23 205 0 0 71 0 0 0]信号:[1x1的结构]长度:8协议标志错误:0远程:0其他信息数据库:[1x1的can.Database]的UserData:[] ANS =结构与字段:VehicleSpeed:71 EngineRPM:5.5003e + 03

接收与数据库信息的消息

附加数据库到接收到的消息的数据库定义自动适用于传入的消息的CAN信道。数据库仅解码中定义的消息。所有其他消息在他们的原始形式接收。

rxCh = canChannel (“MathWorks公司的“虚拟1”,2);rxCh.Database =分贝
rxCh =通道与属性:设备信息DeviceVendor:'MathWorks的装置: '虚拟1' DeviceChannelIndex:2 DeviceSerialNumber:0 ProtocolMode: 'CAN' 状态信息运行:0 MessagesAvailable:0 MessagesReceived:0 MessagesTransmitted:0 InitializationAccess:1 InitialTimestamp:为0x0日期时间] FilterHistory:“标准ID过滤器:允许所有|扩展ID过滤器:允许所有”频道信息BUS状态软键: 'N / A' SILENTMODE:0 TransceiverName: 'N / A' TransceiverState: 'N / A' ReceiveErrorCount:0 TransmitErrorCount:0 BusSpeed:500000 SJW:[] TSEG1:[]TSEG2:[] NumOfSamples:[]其他信息数据库:[1x1的can.Database]的UserData:[]

接收消息

启动通道,产生一些消息业务和接收与物理消息解码的消息。

开始(rxCh);generateMsgsDb ();rxMsg = receive(rxCh, Inf,'输出格式'“时间表”);rxMsg(1:15,:)
ans = 15×8时间表时间ID扩展名称数据远程信号长度错误  _____________ ___ ________ _____________________ ___________ ______ ____________ _____ ______ 0.0013193秒100假{‘EngineMsg}{1×8 uint8} {1 x1 struct} 8假假0.0013272秒200假{‘TransmissionMsg}{1×8 uint8} {1 x1 struct} 8假假0.0013344秒400假{‘DoorControlMsg}{1×8 uint8} 8 {1 x1 struct}假假0.0013394秒600假{‘WindowControlMsg} {1 x4 uint8} 4 {1 x1 struct}假假0.0013409秒800假{‘SunroofControlMsg} {1 x2 uint8} 2 {1 x1 struct}假假0.026322秒100假{‘EngineMsg}{1×8 uint8} 8 {1 x1 struct}假假0.051317秒100假{' EngineMsg '}{1×8 uint8} {1 x1 struct} 8假假0.051319秒200假{‘TransmissionMsg}{1×8 uint8} {1 x1 struct} 8假假0.076289秒100假{‘EngineMsg}{1×8 uint8} {1 x1 struct} 8假假0.1013秒100假{‘EngineMsg}{1×8 uint8} {1 x1 struct} 8假假0.1013秒200假{‘TransmissionMsg}{1×8 uint8} {1 x1 struct} 8假假0.1263秒100假{‘EngineMsg}{1×8 uint8} {1 x1 struct} 8假假0.12633秒400假{‘DoorControlMsg}{1×8 uint8} {1 x1 struct} 8假假0.15133秒100假{‘EngineMsg}{1×8 uint8} {1 x1 struct} 8假假0.15133秒200假{‘TransmissionMsg}{1×8 uint8} 8 {1 x1 struct}假假

停止通道并将其从工作区中清除。

止动件(rxCh);清除rxCh

检查收到的消息

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

rxMsg rxMsg(10:)。信号{10}
ANS = 1×8时间表时间ID扩展名称数据长度的信号错误远程__________ ___ ________ _____________ ___________ ______ ____________ _____ ______ 0.1013秒100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假ANS =结构与字段:VehicleSpeed:50 EngineRPM:3.5696e + 03

提取指定消息的所有实例

使用MATLAB符号的名字提取指定消息的所有实例。

allMsgEngine = rxMsg(strcmpi('EngineMsg'rxMsg.Name):);allMsgEngine (1:15,:)
ANS = 15x8时间表时间ID扩展名称数据长度的信号错误远程_____________ ___ ________ _____________ ___________ ______ ____________ _____ ______ 0.0013193秒100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假0.026322秒100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假0.051317秒100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假0.076289秒100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假0.1013秒100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假0.1263秒100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假0.15133秒100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假0.17632秒100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假0.20132秒100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假0.22635秒100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假0.25132秒100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假0.27632本身C 100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假0.30132秒100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假0.32632秒100假{ 'EngineMsg'} {1×8UINT8} 8 {1x1的结构}虚假0.3513秒100假{ 'EngineMsg'} {1×8 UINT8} 8 {1x1的结构}虚假

绘制物理信号值

绘制随着时间的推移数据库解码信号的值。引用变量消息时间戳和所述信号值。

signalTimetable = canSignalTimetable (rxMsg,'EngineMsg');(signalTimetable signalTimetable(1:15:)阴谋。时间,signalTimetable.VehicleSpeed)标题(“从EngineMsg车速”'fontWeight设置''胆大')xlabel(“时间戳”) ylabel (“车速”
ANS = 15X2时间表时间VehicleSpeed EngineRPM _____________ ____________ _________ 0.0013193秒0 250 0.026322秒0 250 0.051317秒50 3569.6 0.076289秒50 3569.6 0.1013秒50 3569.6 0.1263秒50 3569.6 0.15133秒55 3621.3 0.17632秒55 3621.3 0.20132秒55 3621.3 0.22635秒55 3621.30.25132秒55 3621.3 0.27632秒55 3663.9 0.30132秒55 3663.9 0.32632秒55 3663.9 0.3513秒55 3663.9