创建独立可执行 App 的技巧
在开发 App Designer 仪表板并将其部署为 Simulink® Real-Time™ 独立可执行应用程序时,建议考虑可能阻碍成功部署的支持限制和依赖关系。
由于独立可执行 App 不支持某些 MATLAB® 功能,因此请避免在用于部署的 App 中使用这些功能。此外,在为部署配置独立可执行 App 时,还有一些最佳做法需要遵循。在开发用于部署的独立可执行 App 时,请参考以下提示和最佳做法。
使用 App Generator 创建 Instrument Panel App
请按照Create App Designer Instrument Panels by Using App Generator和使用应用程序编译器创建独立仪表盘应用程序中的步骤,开始开发用于部署的独立可执行 App。
将附加文件包含在部署的 App 中
部署时,您的独立 App 需要 Simulink Real-Time 附加文件。在 StartupFcn 代码中插入函数 slrealtime.includeAddonFilesForDeployedApp('all'),以便将附加文件包含到已部署的 App 中。有关示例,请参阅使用应用程序编译器创建独立仪表盘应用程序。
MATLAB 支持的 MATLAB Compiler 功能
MATLAB 编译器支持许多 MATLAB、Simulink 以及工具箱功能。但是,有些功能编译器无法在独立可执行 App 中实现。
例如,对于独立部署的应用程序,MATLAB Compiler 并不直接支持 Simulink.IntEnumType,因为编译器通常不支持编译 Simulink 类,也不支持完整的 Simulink 引擎本身。有关详细信息,请参阅Code Generation for Enumerations。
在部署 App 之前,请确保该 App 使用的是受支持且可部署的功能。要了解支持哪些功能,请参阅以下列表:
将信号流式传输到 App Designer 组件以进行可视化
要可视化信号,请将信号数据从实时应用程序流式传输到独立可执行 App 中的组件。使用 connectLine 或 connectXYPlot 等函数将信号绑定到组件上。无法将仿真数据检查器 (SDI) 部署用于信号可视化。
如有需要,请为枚举定义配置可部署支持
如果实时应用程序需要访问枚举定义,请在 MATLAB 代码或程序文件中定义枚举值。MATLAB 编译器不支持 Simulink 字典 (.sldd) 文件。如果您的 App 需要从数据字典中访问枚举定义,此问题可能会导致部署失败。
在 App 中配置 UI 组件以实现可移植性
对于独立可执行 App,UI 组件 LoadButton 和 TargetSelector 需要特别注意。
在应用程序中包含 LoadButton UI 组件时,请设置该组件的 Application 属性,以指定独立可执行应用程序中的实时应用程序 MLDATX 文件。独立 App 中的 Load Application 按钮仅加载指定的 MLDATX 文件。在独立可执行应用程序中,该按钮不支持通过浏览方式选择实时应用程序。有关详细信息,请参阅为什么我无法在已部署的 SLRT 应用程序中使用“加载应用程序”按钮,在 Speedgoat 目标上切换要运行的 MLDATX 文件?。
如果您的 App 包含一个 TargetSelector UI 组件,请确保通过使用 TargetSource 属性,将每个 App Designer Simulink Real-Time UI 组件配置为 TargetSelector。有关详细信息,请参阅 slrealtime.ui Properties。
在独立可执行 App 中,TargetSelector 下拉列表不支持选择目标计算机。在 R2022b 及更高版本中,独立可执行 App 中的 TargetSelector 提供了一个编辑字段,供您输入目标计算机的 IP 地址。此外,您还可以在应用程序代码中使用 slrealtime 目标对象来指定目标计算机的 IP 地址。有关详细信息,请参阅为什么从已部署的 SLRT App 尝试连接到 Speedgoat 硬件时会出现“目标 IP 地址为空”的错误?。
确认 App 运行环境的防火墙设置
如果运行 Simulink Real-Time 独立可执行 App 的开发计算机上安装了防火墙或杀毒软件,可能需要允许该 App 的 EXE 文件通过防火墙进行访问,以确保开发计算机与 Speedgoat 目标计算机之间的通信。有关详细信息,请参阅如何配置 Windows Defender 防火墙,以便 MATLAB 与 Speedgoat 等外部硬件进行通信?。
另请参阅
LoadButton | TargetSelector | slrealtime.ui Properties