主要内容

将子系统转换为复合组件

subsystem2ssc函数允许您将完全由Simscape™块组成的子系统转换为文本的Simscape文件。该函数根据子系统配置生成复合组件文件。如果正在转换的子系统包含嵌套子系统,那么该函数将生成几个Simscape文件,每个子系统一个。

使用此功能:

  • 促进组合组件的创作。在编写文本文件时,可能很难可视化复合组件中的连接。此功能允许您用Simscape块创建模型,将其封装到子系统中,然后将该子系统转换为文本复合组件。

  • 通过减少混乱和在顶层只暴露少数相关参数来提高复杂子系统的可用性。

  • 与客户共享您的模型,但不透露潜在的知识产权。

建议工作流

创建一个可重用的复合组件:

  1. 使用来自Simscape Foundation库、附加产品库或自定义块对物理组件(如电机、阀门、放大器等)建模。根据需要微调参数并对模型进行故障排除。

  2. 选择代表物理组件的块和连接线,并从选择中创建一个子系统。有关更多信息,请参见创建子系统

    子系统不需要被屏蔽。然而,为了在顶层公开底层块参数或变量,您必须屏蔽子系统,并将这些参数或变量提升到子系统掩码。有关更多信息,请参见参数推广

  3. 使用subsystem2ssc函数将子系统转换为文本复合组件。如果正在转换的子系统包含嵌套子系统,那么该函数将生成几个Simscape文件,每个子系统一个。

在不暴露底层知识产权的情况下实现模型共享:

  1. 转换子系统时,使用subsystem2ssc函数使用targetFolder参数将函数生成的一个或多个文件放入目标文件夹。

    例如,

    subsystem2ssc (ssc_dcmotor /直流电机的”。/ MotorsLibrary '

    创建一个名为DC_Motor.ssc并将其放入名为MotorsLibrary

  2. 创建并放置其他电机模型到相同的目标文件夹。

  3. 方法保护目标文件夹中的源文件ssc_protect函数。

  4. 与其他用户或客户共享文件夹的内容,而不泄露底层源。

方法将生成的文件放置到包文件夹中并构建库ssc_buildssc_mirror功能。但是,如果您的子系统包含嵌套的子系统,您必须手动编辑生成文件中的子组件路径,以匹配您预期的包结构。或者,您可以使用Simscape组件块,无需修改即可使用目标文件夹的平面层次结构。

参数推广

您可以使用子系统掩码标记成员块和子系统参数,以便提升到顶层。的subsystem2ssc函数自动生成相应的Simscape代码,类似于复合组件。有关更多信息,请参见参数化复合组件

当您将生成的复合文件部署为自定义块时,块对话框只包含这些提升的参数。

这个例子展示了如何在DC motor子系统级别修改电机惯性,以及对生成的Simscape代码和产生的自定义块掩码的影响:

  1. 通过键入打开永磁直流电动机示例模型ssc_dcmotor在MATLAB中®命令窗口。

  2. 右键单击直流电机子系统,然后从上下文菜单中选择面具>编辑蒙版

  3. 单击参数&对话框选项卡。使用促进一对一控件选项来提升惯性参数。惯性块到子系统掩码。

    点击保存面具

  4. 将直流电机子系统转换为Simscape组件文件,并将该文件放在当前工作文件夹中:

    subsystem2ssc (ssc_dcmotor /直流电机的

    函数创建一个名为DC_Motor.ssc在当前文件夹中。在编辑器中打开该文件。

    分量dc_电机参数惯性={。01,厘米^ 2 * g的};%惯性端节点C = foundation.mechanical. rotate . rotate;R = foundation.mechanical.rotation .rotation;V1 = foundation.electric .electrical;V0 = foundation.electric .electric;end components(ExternalAccess = observe) Rotor_Resistance = foundation.electric .elements。电阻(R ={3.9, '欧姆'});Rotor_Inductance = foundation.electric .elements。电感器(l = {1.2 e-05,“H”},r ={0,“欧姆”},g = {1 e-09, 1 /欧姆的},i_L = {value ={0, ' '},优先级= priority.high});Rotational_Electromechanical_Converter = foundation.electric .elements。rotational_converter(K ={。0006875493541569879, ' s * V / rad '}); Inertia = foundation.mechanical.rotational.inertia(inertia = inertia); Friction = foundation.mechanical.rotational.friction(brkwy_trq = {2e-05, 'm*N'}, brkwy_vel = {.03347, 'rad/s'}, Col_trq = {2e-05, 'm*N'}, visc_coef = {0, 'm*s*N/rad'}); end connections connect(V0,Rotor_Resistance.p); connect(Rotational_Electromechanical_Converter.p,Rotor_Inductance.n); connect(V1,Rotational_Electromechanical_Converter.n); connect(Rotor_Inductance.p,Rotor_Resistance.n); connect(R,Friction.R); connect(R,Inertia.I); connect(R,Rotational_Electromechanical_Converter.R); connect(C,Friction.C); connect(C,Rotational_Electromechanical_Converter.C); end end

    注意顶层参数块,其中包含惯性参数。

  5. 如果你现在点aSimscape组件块到DC_Motor.ssc源文件时,块对话框中包含一个名为惯性

限制

正在转换的子系统必须完全由用Simscape语言编写的块组成,例如来自Simscape Foundation库的块、附加产品库或自定义块。从Simscape的街区公用事业公司库不是用Simscape语言编写的,因此:

  • 如果子系统包含Simscape组件块,然后在转换期间该块被其源组件替换。

  • 连接端口块由连接语句。

  • Utilities库中的其他块(解算器配置Simscape总线,等等)是不允许的,因为它们没有等效的文本表示。

正在转换的子系统不能包含多个Simscape网络。

如果正在转换的子系统包含嵌套子系统,那么在运行时,您可能必须手动编辑对生成的嵌套子系统文件的引用ssc_build在包装上。

如果您使用来自Simscape库的块,请保留用于生成复合组件的原始子系统。Simscape语言不支持转发表或版本控制。万博1manbetx因此,如果底层库块在未来的版本中发生更改,由这些块生成的文本复合组件可能会停止工作。如果发生这种情况,打开新版本中的原始子系统并重新运行转换。

另请参阅

|||||

相关的话题