主要内容

生成非virtual总线的代码

如果你有金宝app®编码器™,无论您使用虚拟或非virtual总线是否可以对所生成的代码的效率,大小和可读性产生显着差异。例如,非视频总线显示为生成的代码中的结构,并且只有一个使用总线的算法仅存在一个副本。在追踪模型与代码之间的对应关系时,使用所生成的代码中的结构可以有所帮助。例如,这是生成的代码总线的创造者块在ex_bus_logging模型。

在生成的代码中,虚拟总线不会以结构或任何其他一致单元的形式出现。对于每个元素,都存在操作总线的任何算法的单独副本。通常,虚拟总线不会影响生成的代码。

要在生成的代码中将信号分组到结构中,请使用非虚拟总线。看在生成的代码中将数据组织成结构(金宝appSimulink编码器)

当你创建一个MATLAB®要初始化包含非双信号元素的总线,您需要设置Structure字段的值。您选择的设置值的技术可能会影响生成代码的效率和可读性。看初始条件结构字段的控制数据类型

当您为输入到引用模型或从引用模型输出的总线生成代码时,存在一些代码生成限制。看虚拟巴士跨越模型参考边界的限制

公共汽车数组的代码生成产生具有特定格式的结构。看总线数组的代码生成

初始条件结构字段的控制数据类型

您可以使用MATLAB结构初始化总线中的信号元素。看指定总线信号的初始条件

如果目标总线的信号元素使用除此之外的数字数据类型, 一般来说:

  • 为了避免手动匹配字段数据类型与信号元素的数据类型,请使用无类型表达式来设置字段值。在开发和快速原型模型时,为了方便,请使用这种技术。

  • 为了生成更高效的生产代码并避免代码中的浮点存储,将结构字段的数据类型与相应信号元素的数据类型匹配。

您选择的技术可能会影响生成代码的效率和可读性。

有关生成代码中可调初始条件的示例和更多信息,请参阅在生成的代码中控制信号和状态初始化(金宝appSimulink编码器)

在生成的代码中内联结构字段的数值

如果你设置了默认参数的行为配置参数内联,默认情况下,初始条件结构的字段值在生成的代码中显示为内联数字(不可调优)。对于这些结构,在Simulink中使用非类型化表达式设置字段值。金宝app字段值不需要数据类型,因为在生成的代码中结构是不可调优的。

但是,如果您稍后设置默认参数的行为可调或通过使用金宝app仿真软件。参数对象时,代码可以包含浮点存储和低效的显式类型转换和位移位。为了避免这些问题,请考虑将结构字段的数据类型与相应信号元素的数据类型进行匹配。

在块对话框中生成直接指定的可调结构

假设您直接在块对话框中指定初始条件结构,或者在金宝app仿真软件。信号对象,具有表达式如结构(“signal1”5“signal2”,7.2)(而不是将结构存储在一个变量或金宝app仿真软件。参数目的)。在这种情况下,要在代码中生成可调结构,请设置默认参数的行为可调

使用该表来决定如何控制这些初始条件结构中的字段的数据类型。

目标 技术

使用非虚拟总线。

使用非类型化表达式设置字段值。

使用虚拟总线。

避免使用信号元素的字段数据类型手动匹配。

使用非类型化表达式设置字段值。

生成更有效的代码并避免浮点存储。

将结构字段数据类型与信号元素类型匹配。将数据类型信息存储在结构体通过使用类型化表达式来设置字段值。

生成存储在变量或参数对象中的可调结构

假设您将初始条件结构存储在变量或中金宝app仿真软件。参数您在基础工作区或数据字典中创建的对象。例如,您可以使用此技术在多个块之间共享结构,或者在设置时生成可调结构默认参数的行为内联.在这种情况下,使用表来决定如何控制初始条件结构中字段的数据类型。

目标 技术

避免使用信号元素的字段数据类型手动匹配。

使用非类型化表达式设置字段值。在生成的代码中,结构字段使用数据类型.生成的算法使用显式类型转换来协调不匹配的数据类型。

生成更有效的代码并避免浮点存储。

将结构字段数据类型与信号元素类型匹配。将数据类型信息存储在结构字段中或使用a金宝app仿真软件。公共汽车对象同时控制字段和信号元素的数据类型。

要使用Model Advisor检查模型中可能存在的昂贵数据类型不匹配,请参见用总线信号检查结构参数的使用情况

使用结构数组初始化引用模型中的总线数组。将结构数组作为模型参数的值传递给被引用的模型模型堵塞。

将结构字段数据类型与信号元素类型匹配。将数据类型信息存储在结构字段中或使用a金宝app仿真软件。公共汽车对象来同时控制结构字段和信号元素的数据类型。

如果您没有将结构作为模型参数传递给被引用的模型,请遵循非虚拟总线的其他指导原则来决定如何控制数据类型。

使用非类型化表达式设置字段值

您可以使用非类型化表达式来设置结构字段值。字段隐式地使用数据类型.设置字段值以表示理想的实际初始化值。

避免手动匹配字段数据类型与相应信号元素的数据类型。但是,根据总线的虚拟性、用于应用初始条件的方法和其他因素,可以在生成的代码中引入浮点存储和可能效率低下的类型转换。

假设您创建了一个总线mybussig使用这些信号元素。每个元素都使用特定的数据类型。

MyBussig SignalLement1(Int32)信号尺寸2(Boolean)信号尺寸3(单)

创建一个初始条件结构初学者.使用非类型化表达式来指定字段值。可选地,增强布尔字段的可读性SignalLement2.,使用该值而不是0.

initstruct.signaleLement1 = 3;initstruct.signaleLement2 = false;initstruct.signaleLement3 = 17.35;

如果你使用这个函数金宝appSimulink.Bus.createMATLABStruct为了创建结构,函数将数据类型信息存储在结构字段中。在创建结构之后,可以选择使用非类型化表达式来更改字段值。看使用si金宝appmulink . bus . createatlabstruct创建结构

在结构字段中存储数据类型信息

要在“结构”字段中存储数据类型信息,请使用键入的表达式设置字段值,或使用该函数金宝appSimulink.Bus.createMATLABStruct来创建结构。使用这些技术可以通过消除浮点存储和可能低效的显式类型转换来生成有效的代码。

要避免在更改相应信号元素的数据类型时手动将新数据类型应用于结构字段,请考虑使用a金宝app仿真软件。公共汽车对象来同时控制结构和总线中的数据类型。

使用键入的表达式设置字段值。假设您创建了一个总线mybussig用这种信号元素的层次结构。每个元素都使用特定的数据类型。

MyBussig SignalLement1(Int32)信号尺寸2(Boolean)信号尺寸3(单)

创建一个初始条件结构初学者通过使用类型化表达式来设置字段值。将字段的数据类型与相应信号元素的数据类型进行匹配。

initStruct。signalElement1 = int32 (3);initstruct.signaleLement2 = false;initStruct。signalElement3 =单(17.35);

结构字段存储数据类型信息。如果稍后更改了信号元素的数据类型,请手动将新的数据类型应用到相应的结构字段。

要匹配固定点数据类型,请使用a设置字段值fi(定点设计师)对象。

通过保存数据类型信息更改字段值。假设您更改了现有初始条件结构中的字段值。要保留字段中的数据类型信息,可以使用下标赋值和语法(:)

initStruct.signalElement3 (,) = 16.93;

如果不使用下标赋值,则必须记住使用类型化表达式来保留数据类型。

initStruct。signalElement3 =单(16.93);

如果不使用这些技术中的任何一种,则该字段会失去数据类型信息。

initStruct。signalElement3 = 16.93;%字段数据类型现在是'double'。

使用金宝appSimulink.Bus.createMATLABStruct创建结构。你可以使用这个函数金宝appSimulink.Bus.createMATLABStruct创建一个字段所有具有接地值的结构,通常0..如果在使用函数之前配置信号元素的数据类型,例如通过设置生成信号元素的块的输出数据类型,输出结构中的每个字段都使用与相应信号元素相同的数据类型。字段存储数据类型信息,就像您使用类型化表达式来设置值一样。

通过将部分结构传递给函数,可以用非接地值初始化一些信号元素。当您创建这个部分结构时,请使用类型化表达式将每个字段的数据类型与相应信号元素的数据类型匹配。有关更多信息和示例,请参见金宝appSimulink.Bus.createMATLABStruct

当您稍后更改结构中某个字段的值时,请选择以下技术之一来设置新值:

  • 无类型的表达式。字段值不再存储数据类型信息。

  • 类型化表达式或下标赋值。字段值继续存储数据类型信息。

使用总线对象作为初始条件结构的数据类型

无论将数据类型信息存储在结构字段中还是使用非类型表达式设置字段值,都可以使用金宝app仿真软件。公共汽车对象作为整个初始条件结构的数据类型。然后,您可以独立地管理字段值和数据类型。

如果使用此技术,请考虑使用Untyped表达式来设置字段值。然后,当您更改信号元素的数据类型时,您无需手动匹配现场数据类型。要控制字段和信号元素的数据类型,请使用数据类型中元素的属性公共汽车对象。

假设你使用a总线的创造者块创建总线mybussig使用这些信号元素。

MyBussig SignalLement1(Int32)信号尺寸2(Boolean)信号尺寸3(单)

  1. 打开总线编辑器。

    巴士

  2. 创建一个公共汽车对象,myBus,对应总线。

  3. 创建一个初始条件结构初学者.使用非类型化表达式设置字段值。增强字段的可读性SignalLement2.,使用布尔值而不是0.

    initstruct.signaleLement1 = 3;initstruct.signaleLement2 = false;initstruct.signaleLement3 = 17.35;

  4. 要表示该结构,请创建金宝app仿真软件。参数对象。

    initStruct = 金宝appSimulink.Parameter (initStruct);

  5. 使用参数对象为总线指定初始条件。例如,在a单位延迟块对话框,设置初始条件初学者

  6. 使用公共汽车对象指定参数对象的数据类型。

    initstruct.datatype =“公共汽车:MyBus”;

  7. 使用公共汽车对象指定总线的数据类型。例如,在总线的创造者块对话框,设置输出数据类型公共汽车:MyBus.

在模拟期间和生成的代码中,结构字段和信号元素使用您在公共汽车对象。在模拟和代码生成之前,参数对象将结构字段转换为您在公共汽车对象。

有关的基本信息公共汽车对象,看到用Simulink指定总线属性。金宝app总线对象

为现有结构配置数据类型

要从结构的所有字段中删除数据类型信息,可以编写一个自定义函数,替换字段值数字。使用示例功能CastStructTodbl.作为一个模板。

要将使用双精度的结构转换为存储数据类型信息的结构,可以使用该函数创建引用结构金宝appSimulink.Bus.createMATLABStruct.然后可以编写一个自定义函数,将字段值转换为引用结构中的数据类型。使用示例功能castStructFromDbl作为一个模板。

使用Model Advisor检查不匹配的数据类型

要检测结构字段的数据类型何时与相关的总线元素不一致,请使用Model Advisor。

  1. 在这一点建模选项卡,单击模型的顾问

  2. 点击好吧

  3. 选择通过任务>使用总线建模信号和参数>用总线信号检查结构参数的使用情况

  4. 单击运行这个检查按钮。

虚拟巴士跨越模型参考边界的限制

如果您使用总线作为引用模型的输入或输出(模型块):

  • 不能配置I/O参数步进方法用于引用模型的C ++类接口的样式。

    作为一个解决方案,使用非虚拟总线代替。另外,使用默认的c++类接口的样式。

  • 不能为引用的模型配置函数原型控制。

    作为一个解决方案,使用非虚拟总线代替。

有关使用总线作为引用模型的输入或输出的更多信息,请参见模型接口上的非虚拟总线.有关总线虚拟性的更多信息,请参阅复合信号的类型

总线数组的代码生成

当您为包含总线数组的模型生成代码时,a类型定义表示底层总线类型出现在* _types.h文件。

代码生成生成一系列C结构,您可以与使用结构数组的传统C代码集成。必要时,总线变量(阵列)的代码在以下结构中生成:

  • 阻塞IO

  • 状态

  • 外部输入

  • 外部输出

这是一个总线数组的一些生成代码的简化示例。

有关非虚拟总线的代码生成的基本信息(它们以结构形式出现在代码中),请参见在生成的代码中将数据组织成结构(金宝appSimulink编码器)

相关的话题