主要内容

在MATLAB中开始CAN FD通信

这个示例向您展示了如何使用CAN FD通道来发送和接收CAN FD消息。它使用在环回配置中连接的MathWorks虚拟CAN FD通道。

查看可用的CAN FD通道

使用canFDChannelList查看所有支持CAN FD的可用设备通道。万博1manbetx

canFDChannelList
ans =2×6表供应商设备通道DeviceModel ProtocolMode SerialNumber  ___________ ___________ _______ ___________ _____________ ____________ " MathWorks”“虚拟1“1“虚拟”“可以,可以FD”“0”“MathWorks”“虚拟1“2“虚拟”“可以,可以FD”“0”

创建发送和接收通道

使用canFDChannel使用指定的设备详细信息来创建用于发送和接收消息的CAN FD通道。

txCh = canFDChannel (“MathWorks”“虚拟1”, 1)
DeviceVendor txCh =通道属性:设备信息:“MathWorks”设备:“虚拟1”DeviceChannelIndex: 1 DeviceSerialNumber: 0 ProtocolMode:跑步可以FD的状态信息:0 MessagesAvailable: 0 MessagesReceived: 0 MessagesTransmitted: 0 InitializationAccess: 1 InitialTimestamp: [0 x0 datetime] FilterHistory:'Standard ID Filter: Allow All | Extended ID Filter: Allow All' Bit Timing Information BusStatus: 'N/A' SilentMode: 0 TransceiverName: 'N/A' TransceiverState: 'N/A' ReceiveErrorCount: 0 TransmitErrorCount: 0 ArbitrationBusSpeed: [] DataBusSpeed: [] Other Information Database: [] UserData: []
rxCh = canFDChannel (“MathWorks”“虚拟1”2);

配置总线速度

CAN FD通道上线前需要设置总线速度。仲裁和数据阶段速度都是使用configBusSpeed

configBusSpeed (txCh, 500000, 1000000);configBusSpeed (rxCh, 500000, 1000000);

打开DBC-File

使用canDatabase打开包含CAN FD消息和信号定义的数据库文件。

db = canDatabase (“CANFDExample.dbc”
/tmp/Bdoc21b_1757077_201157/tpc1faaadf/vnt-ex36915890/CANFDExample. db = Database with properties: Name: 'CANFDExample' Path: '/tmp/Bdoc21b_1757077_201157/tpc1faaadf/vnt-ex36915890/CANFDExample. db = Database with properties: Name: 'CANFDExample' Path: 'dbc' Nodes: {} NodeInfo: [0x0 struct] Messages: {'CANFDMessage'} MessageInfo: [1x1 struct] Attributes: {2x1 cell} AttributeInfo: [2x1 struct] UserData: []

将数据库直接连接到接收通道。来自dbc文件的定义被自动应用于解码传入的消息和信号。

rxCh。数据库=数据库;

启动通道

使用开始命令,使通道在线。

开始(txCh);开始(rxCh);

创建CAN FD消息

属性创建CAN FD消息canFDMessage函数。

msg1 = canFDMessage(500, false, 12)
msg1 =消息与属性:信息识别ProtocolMode:可以FD的ID: 500扩展:0的名字:“时间戳数据细节:0数据:[0 0 0 0 0 0 0 0 0 0 0 0]的信号:[]长度:12 DLC: 9协议旗帜br: 0 ESI: 0错误:0其他信息数据库:[]用户数据:[]
msg2 = canFDMessage(1000, false, 24);msg3 = canFDMessage(1500, false, 64);

要启用CAN FD的比特率切换能力,请设置BRS属性。

msg1。BRS= true; msg2.BRS = true; msg3.BRS = true;

CAN FD消息也可以使用数据库创建。数据库定义消息是CAN还是CAN FD以及BRS状态。

msg4 = canFDMessage (db,“CANFDMessage”
msg4 =消息与属性:信息识别ProtocolMode:可以FD的ID: 1扩展:0的名字:“CANFDMessage”数据细节时间戳:0数据:[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0…[] Length: 48 DLC: 14 Protocol Flags BRS: 1 ESI: 0 Error: 0 Other Information Database: [1x1 can.]数据库用户数据:[]

传递信息

使用传输从传输通道发送创建的消息。

发送(txCh, [msg1 msg2 msg3 msg4])

接收消息

属性从接收通道接收消息收到函数。CAN FD通道的默认返回类型是一个时间表,其中包含特定于接收到的CAN FD消息的信息。

rxMsg = receive(rxCh, Inf)
rxMsg =4×12时间表时间ID扩展名ProtocolMode数据远程BRS ESI DLC信号长度错误  ___________ ____ ________ ________________ ____________ __________________________________________________________________________ ______ ___ ____________ _____ ______ _____ _____ 0.10717秒500假{0 x0 char}{'可以FD} {[0 0 0 0 0 0 0 0 0 0 0 0]} {0 x0 12 9struct}假假真假0.10718秒1000假{0 x0 char}{'可以FD} {[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]} 24 12 {0 x0 struct}假假真假0.10718秒1500假{0 x0 char}{'可以FD '}{[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0…]} 64 15 {0 x0 struct}假假真假0.10718秒1假{‘CANFDMessage}{'可以FD '}{[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0…} 48 14 {1x1 struct}假的假的真的假的

停止通道

使用停止命令,使通道离线。

停止(txCh);停止(rxCh);

关闭DBC-File

通过从工作空间中清除它的变量来关闭对dbc文件的访问。

清晰的db