先进的可以使用车辆网络工具箱与Arduino的沟通
这个例子展示了如何使用MATLAB支持包Arduino硬件以及车辆网络工具箱™读写数据库可以使用消息和信号。
所需的硬件
要运行这个示例,您将需要以下硬件:
VN1610向量可以接口装置
Arduino Mega2560董事会
se工作室can总线盾V2
硬件设置
山se工作室can总线盾V2 Arduino Mega2560板上。正确使用一个自定义有线连接终止CANH CANL别针的矢量设备Arduino可以盾牌。
这个例子演示了之间的双向通信Arduino Mega2560董事会和向量VN1610设备。
创建可以通道
创建一个可以使用的通道连接到VN1610设备canChannel从车辆网络工具箱函数。
ch1 = canChannel (“向量”,“VN1610 1”1);
可以创建一个连接通道与Arduino Mega2560板使用canChannelArduino MATLAB支持包的硬件。
arduinoObj = arduino (“COM4为”,“Mega2560”,“库”,“可以”,“F”,“真正的”);ch2 = canChannel (arduinoObj,“MCP2515”,“D9”,“D3”);
的数据库文件,demoVNT_CANdbFiles.dbc
,将被用来定义和解码消息使用canDatabase从车辆网络工具箱函数。创建句柄可以数据库文件并将其附加到通道。
db = canDatabase (“demoVNT_CANdbFiles.dbc”);ch1。数据库=数据库;ch2。数据库=数据库;
创建可以消息
创建消息,可以定义的数据库文件,使用canMessage从车辆网络工具箱函数。
味精= canMessage (db,“EngineMsg”);
传输可以消息从向量从Arduino硬件设备和阅读
传输可以从向量VN1610信息设备使用传输从车辆网络工具箱函数。你必须启动通道使用开始函数从车辆网络工具箱之前发送的消息。
开始(ch1);msg.Signals。EngineRPM = 2000;传输(ch1、味精);
读的时间表包含所有可以从通道帧与Arduino兆2560板使用读
函数。
arduinoRx =阅读(ch2)
arduinoRx =1×8的时间表时间ID扩展名称数据长度误差信号远程________________________ ___ ________ _________________ ___________ ______ _______专攻14 - 100年7月- 2020年17:07:15.403假{‘EngineMsg} {1×8 uint8} 8 {1×1 struct}假假
arduinoRx.Signals {1} .EngineRPM
ans = 2000
现在,您已经成功建立节点之间的通信。
写可以消息从Arduino硬件设备和接收从矢量
现在新值写入可以通过Arduino消息对象并传递它的硬件。写可以从Arduino大型消息2560板使用写
函数。
msg.Signals。EngineRPM = 500;写(ch2,味精)
收到可以从VN1610帧矢量硬件使用收到从车辆网络工具箱函数。您必须指定的值“OutputFormat”
“时间表的
当使用收到函数最优性能和代表性可以在MATLAB的消息。
vectorRx =接收(ch1 2“OutputFormat”,“时间表”)
vectorRx =2×8的时间表时间ID扩展名称数据长度误差信号远程_______ ___ ________ _________________ ___________ ______ _______专攻0.073982秒100假{‘EngineMsg} {1×8 uint8} 8 {1×1 struct}假假0.29798秒100假{‘EngineMsg} {1×8 uint8} 8 {1×1 struct}假假
vectorRx.Signals {1} .EngineRPM
ans = 2000
vectorRx.Signals {2} .EngineRPM
ans = 500
消息传播的车辆网络工具箱,可在接收缓冲区,直到收到为止。因此你看到第一个传播价值信号{1}
。你已经收到了消息传播由Arduino硬件信号{2}
。
使用车辆网络工具箱可以提取信号从接收到的时间表。
canSignalTimetable (vectorRx)
ans =2×2的时间表0.073982秒时间VehicleSpeed EngineRPM _______ _______ ____ 0 2000 0.29798秒0 500
有一个区别时间
输出的时间表从车辆为Arduino硬件网络工具箱和MATLAB支持包。的时间
输出从MATLAB支持包Arduino硬件datetime而绝对时间时间
车辆网络工具箱的输出的相对时间大多数VNT硬件驱动程序是建立在相对时间。要获取绝对时间,使用InitialTimestamp
的属性ch1
。
ch1.InitialTimestamp
ans =datetime14 - 7 - 2020 17:07:15
看表的绝对时间,添加InitialTimestamp
到时间
列的vectorRx
时间表。
vectorRx。时间= vectorRx.Time + ch1.InitialTimestamp
vectorRx =2×8的时间表时间ID扩展名称数据长度误差信号远程____________________ ___ ________ _________________ ___________ ______ _______专攻14 - 100年7月- 2020年17:07:15假{‘EngineMsg} {1×8 uint8} 8 {1×1 struct}假假14 - 100年7月- 2020年17:07:15假{‘EngineMsg} {1×8 uint8} 8 {1×1 struct}假假
清理
当完成时,清晰的连接硬件。
清晰的db;清晰的味精;清晰的arduinoRx;清晰的vectorRx;清晰的ch1;清晰的ch2;清晰的arduinoObj;