主要内容

基于事件的消息传输行为模型金宝app

这个例子展示了如何使用基于事件可以消息传输模型与车辆网络工具箱™®。金宝app这个特性允许可以和FD消息传输时,数据从一个时间步的变化到下一个检测。

提供的配置选项可以和FD传输块使传输数据变化。启用时,消息特定的ID传输只有当数据更改ID。独立处理每个消息根据其ID。在每一个时间步时禁用,块操作和周期性的发送操作功能正常。此外,基于事件的传播可以启用和周期性传输同时都在一起工作。

准备模型的例子

包括示例模型包含两个可以包块配置成一个可以传输块。一个消息的数据是一个常数;另一个则是反驳说,在每一个时间步长变化。

Model1.JPG

打开示例模型。

开放EventTransmit

准备可以访问数据库文件

您可以访问可以DBC-files的内容canDatabase函数。通过此功能,网络节点的详细信息,消息和信号是可用的。这个DBC-file用于模型并用于解码信息发送的模型。

db = canDatabase (“CANBusEvent.dbc”)
db =数据库与属性:名称:“CANBusEvent”路径:“C: \ \ jpyle \ MATLAB文件\ \用户ExampleManager \ jpyle.21bExampleBlitz \ vnt-ex59902587 \ CANBusEvent。dbc的节点:{ECU的}NodeInfo: [1×1 struct]消息:{2×1细胞}MessageInfo: [2×1 struct]属性:{}AttributeInfo: [0×0 struct]用户数据:[]

DBC-file中定义一个测试节点。

节点= nodeInfo (db,“ECU”)
节点=结构体字段:名称:ECU的评论:“属性:{}AttributeInfo:(0×0结构)

节点传输两个消息。

messageInfo (db,“Constant_Msg”)
ans =结构体字段:名称:‘Constant_Msg ProtocolMode:“可以”评论:“ID: 10扩展:0 J1939:[]长度:4 DLC: 4 br: 0信号:{“常数”}SignalInfo: [1×1 struct] TxNodes: {ECU的}属性:{}AttributeInfo:(0×0结构)
messageInfo (db,“Counter_Msg”)
ans =结构体字段:名称:‘Counter_Msg ProtocolMode:“可以”评论:“20扩展ID:: 0 J1939:[]长度:4 DLC: 4 br: 0信号:{“计数器”}SignalInfo: [1×1 struct] TxNodes: {ECU的}属性:{}AttributeInfo:(0×0结构)

执行模型和基于事件的传播

只支持基于事件的传播

支持基于事件的传播可以通过编程方式传输块。同时,禁用周期性传输。

db = canDatabase (“CANBusEvent.dbc”)
db =数据库与属性:名称:“CANBusEvent”路径:“C: \ \ jpyle \ MATLAB文件\ \用户ExampleManager \ jpyle.21bExampleBlitz \ vnt-ex59902587 \ CANBusEvent。dbc的节点:{ECU的}NodeInfo: [1×1 struct]消息:{2×1细胞}MessageInfo: [2×1 struct]属性:{}AttributeInfo: [0×0 struct]用户数据:[]
set_param (“EventTransmit /可以传输”,“EnableEventTransmit”,“上”);set_param (“EventTransmit /可以传输”,“EnablePeriodicTransmit”,“关闭”);

注意,块显示更改后应用设置。

Model2.JPG

配置一个与模型可以在MATLAB通信通道

创建一个可以使用虚拟通道设备通信接口与仿真软件模型。金宝app同时,把数据库可以自动解码传入的消息。

卧底= canChannel (“Mathworks”,“虚拟1”,2)
DeviceVendor卧底=通道属性:设备信息:“MathWorks”设备:“虚拟1”DeviceChannelIndex: 2 DeviceSerialNumber: 0 ProtocolMode:“可以运行的状态信息:0 MessagesAvailable: 0 MessagesReceived: 0 MessagesTransmitted: 0 InitializationAccess: 1 InitialTimestamp: [0×0 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:[]其他信息数据库:[]用户数据:[]
卧底。数据库=数据库;

启动通道可以上网。

开始(卧底);

运行模型

分配一个模拟运行时间和启动模式。

t =“10”;set_param (“EventTransmit”,“StopTime”,t) set_param (“EventTransmit”,“SimulationCommand”,“开始”);

等到开始仿真。

比较字符串(get_param (“EventTransmit”,“SimulationStatus”),“停止”)结束

等到仿真结束。

暂停(2)

在MATLAB接收消息

从总线接收所有消息生成的模型。

味精=接收(卧底,正无穷,“OutputFormat”,“时间表”)
味精=12×8的时间表时间ID扩展名称数据长度误差信号远程__________ __ ________ ___________ _______ ______,_______专攻5.204秒10假{‘Constant_Msg} {[5 0 0 0]} 4 {1×1 struct}假假5.204秒20假{‘Counter_Msg} {[0 0 0 0]} 4 {1×1 struct}假假5.206秒20假{‘Counter_Msg} {[1 0 0 0]} 4 {1×1 struct}假假5.206秒20假{‘Counter_Msg} {[2 0 0 0]} 4 {1×1 struct}假假5.206秒20假{‘Counter_Msg} {[3 0 0 0]} 4 {1×1 struct}假假5.206秒20假{‘Counter_Msg} {[4 0 0 0]} 4 {1×1 struct}假假5.206秒20假{‘Counter_Msg} {[5 0 0 0]} 4 {1×1 struct}假假5.206秒20假{‘Counter_Msg} {[6 0 0 0]} 4 {1×1 struct}假假5.206秒20假{‘Counter_Msg} {[7 0 0 0]} 4 {1×1 struct}假假5.206秒20假{‘Counter_Msg} {[8 0 0 0]} 4 {1×1 struct}假假5.206秒20假{‘Counter_Msg} {[9 0 0 0]} 4 {1×1 struct}假假5.2061秒20假{‘Counter_Msg} {[10 0 0 0]} 4 {1×1 struct}假假

停止在MATLAB®可以通道。

停止(卧底);

探索信息和信号接收的数据

的次数可以ID已经收到如下绘制。消息“Constant_Msg”(可以ID 10)收到后只有一次,因为它的数据不会改变其初始设置。消息“Counter_Msg”(ID 20)是来自每一个时间步,因为数据不断变化的模型了。

%定义X和Y轴。x = 1:长度(msg.ID);y = msg.ID;%画出的图可以id。茎(x, y,“填充”)举行;yMax = max (msg.ID) + 5;yMax ylim ([0])%的标签图。包含(“数量可以消息”);ylabel (“ID”能);传奇(“ID”能,“位置”,“东北”);传奇(“boxoff”);持有;

接下来,情节在每个消息接收到的信号相同的模拟运行。

%创建一个结构与信号的细节。signalTimeTable = canSignalTimetable(味精);%的阴谋的信号值“Constant_Msg”。x1 = 1:高度(signalTimeTable.Constant_Msg);日元= signalTimeTable.Constant_Msg.Constant;情节(x1, y1,“标记”,“o”);持有%的阴谋的信号值“Counter_Msg”。x2 = 1:高度(signalTimeTable.Counter_Msg);y2 = signalTimeTable.Counter_Msg.Counter;情节(x2, y2,“标记”,“o”);%的比例确定轴的最大价值图。y1Max = max (signalTimeTable.Constant_Msg.Constant);y2Max = max (signalTimeTable.Counter_Msg.Counter);yMax = max (y1Max y2Max) + 5;ylim ([0 yMax]);%的标签图。包含(“信号接收的次数”);ylabel (“显示值”);传奇(“不变”,“计数器”,“位置”,“northeastoutside”);传奇(“boxoff”);持有

信号“常数”(在消息“Constant_Msg”)只绘制一次,而信号“计数器”(在消息“Counter_Msg”)策划每一个时间步。这是由于基于事件的传播中启用传输块,可以传递一个消息只有在数据已经改变了,可以ID与以前收到的消息。

作为信息的信号“Counter_Msg”是一个计数器,增量1在每一个时间步,可以看到一个线性曲线。

每个数据点代表一个启用了基于事件的传播的传播,因此信号接收“计数器”在每一个时间步,但只收到信号“常数”一次。

执行模型与基于事件和周期性传输

使两种传输模式

启用事件传播可以通过编程方式传输块。同时,使周期传输和设置一个消息。

set_param (“EventTransmit /可以传输”,“EnableEventTransmit”,“上”);set_param (“EventTransmit /可以传输”,“EnablePeriodicTransmit”,“上”);set_param (“EventTransmit /可以传输”,“MessagePeriod”,“0.1”);

注意,块显示更改后应用设置。

Model3.JPG

配置一个与模型可以在MATLAB通信通道

创建一个可以使用虚拟通道设备通信接口与仿真软件模型。金宝app同时,把数据库可以自动解码传入的消息。

卧底= canChannel (“Mathworks”,“虚拟1”,2)
DeviceVendor卧底=通道属性:设备信息:“MathWorks”设备:“虚拟1”DeviceChannelIndex: 2 DeviceSerialNumber: 0 ProtocolMode:“可以运行的状态信息:0 MessagesAvailable: 0 MessagesReceived: 0 MessagesTransmitted: 0 InitializationAccess: 1 InitialTimestamp: [0×0 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:[]其他信息数据库:[]用户数据:[]
卧底。数据库=数据库;

启动通道可以上网。

开始(卧底);

运行模型

分配一个模拟运行时间和启动模式。

t =“20”;set_param (“EventTransmit”,“StopTime”,t) set_param (“EventTransmit”,“SimulationCommand”,“开始”);

等到开始仿真。

比较字符串(get_param (“EventTransmit”,“SimulationStatus”),“停止”)结束

等到仿真结束。

暂停(5);

在MATLAB接收消息

从总线接收所有消息生成的模型。

味精=接收(卧底,正无穷,“OutputFormat”,“时间表”)
味精=22×8的时间表时间ID扩展名称数据长度误差信号远程__________ __ ________ ___________ _______ ______,_______专攻4.598秒10假{‘Constant_Msg} {[5 0 0 0]} 4 {1×1 struct}假假4.598秒20假{‘Counter_Msg} {[0 0 0 0]} 4 {1×1 struct}假假4.5987秒20假{‘Counter_Msg} {[1 0 0 0]} 4 {1×1 struct}假假4.5987秒20假{‘Counter_Msg} {[2 0 0 0]} 4 {1×1 struct}假假4.5987秒20假{‘Counter_Msg} {[3 0 0 0]} 4 {1×1 struct}假假4.5987秒20假{‘Counter_Msg} {[4 0 0 0]} 4 {1×1 struct}假假4.5987秒20假{‘Counter_Msg} {[5 0 0 0]} 4 {1×1 struct}假假4.5987秒20假{‘Counter_Msg} {[6 0 0 0]} 4 {1×1 struct}假假4.5987秒20假{‘Counter_Msg} {[7 0 0 0]} 4 {1×1 struct}假假4.5987秒20假{‘Counter_Msg} {[8 0 0 0]} 4 {1×1 struct}假假4.5988秒20假{‘Counter_Msg} {[9 0 0 0]} 4 {1×1 struct}假假4.5988秒20假{‘Counter_Msg} {[10 0 0 0]} 4 {1×1 struct}假假4.5988秒20假{‘Counter_Msg} {[11 0 0 0]} 4 {1×1 struct}假假4.5988秒20假{‘Counter_Msg} {[12 0 0 0]} 4 {1×1 struct}假假4.5988秒20假{‘Counter_Msg} {[13 0 0 0]} 4 {1×1 struct}假假4.5988秒20假{‘Counter_Msg} {[14 0 0 0]} 4 {1×1 struct}假假⋮

停止在MATLAB可以通道。

停止(卧底);

探索接收到的数据

情节在每个消息接收到的数据在同一时期。

%创建一个结构与信号的细节。signalTimeTable = canSignalTimetable(味精);%的阴谋的信号值“Constant_Msg”。x3 = 1:高度(signalTimeTable.Constant_Msg);y3 = signalTimeTable.Constant_Msg.Constant;情节(x3, y3,“标记”,“o”);持有%的阴谋的信号值“Counter_Msg”。x4 = 1:高度(signalTimeTable.Counter_Msg);y4 = signalTimeTable.Counter_Msg.Counter;情节(x4、y4“标记”,“o”);%的比例确定轴的最大价值图。y3Max = max (signalTimeTable.Constant_Msg.Constant);y4Max = max (signalTimeTable.Counter_Msg.Counter);yMax = max (y3Max y4Max) + 5;ylim ([0 yMax]);%的标签图。包含(“信号接收的次数”);ylabel (“显示值”);传奇(“不变”,“计数器”,“位置”,“northeastoutside”);传奇(“boxoff”);持有

情节显示信号“常数”消息“Constant_Msg”只收到几次;一旦开始时由于基于事件的传播,后来由于周期性传输性质。这是因为信号的输入值保持不变。

而信号的值“计数器”变化在每一个时间步的消息“Counter_Msg”,它不断收到由于基于事件的传播,后来有一些更多的传输因为周期性启用传输。