主要内容

本页采用了机器翻译。点击此处可查看英文原文。

使用 C#代码控制实时应用程序

此示例演示了如何通过使用 Simulink Real-Time XIL API 支持包中的函数,开发一个控制 Simulink® Real-Time™ 应用程序的 C#程序。该 C#示例代码展示了如何使用 XIL C# API 调用加载、运行和停止 Simulink Real-Time 应用程序。示例代码还展示了如何记录信号数据。

为 C#程序中的 API 做准备

1.使用附加组件管理器安装适用于 ASAM® XIL 标准的 Simulink Real-Time 支持包。

2.创建目标对象并连接。为默认目标计算机创建目标对象,并连接到目标计算机。

tg = slrealtime;
connect(tg);

3.将模型 slrt_ex_pendulum_100Hz 复制到您的工作文件夹中。

model = 'slrt_ex_pendulum_100Hz';
open_system(model);
modelSTF = getSTFName(tg);
set_param(model,"SystemTargetFile",modelSTF);

4.构建模型 slrt_ex_pendulum_100Hz

evalc('slbuild(model)');

5.创建一个 XIL 配置文件。此命令使用默认的 Speedgoat® 目标计算机 IP 地址 192.168.7.5。将 full_file_path_to_MLDATX 替换为 slrt_ex_pendulum_100Hz.mldatx 文件的完整路径。

slrealtime.createPortConfigureFile("configFile.xml","192.168.7.5",'full_file_path_to_MLDATX');

创建 C# 程序

1.打开 Visual Studio® 2019,并创建一个控制台应用程序(.NET Core)工程。

2.在 Visual Studio 中添加工程引用:ASAM.XIL.Implementation.Testbench.dllASAM.XIL.interfaces.dllMathWorks.ASAM.XIL.Server.dll。安装支持包后,这些文件即可使用。

在文件夹 C:\Program Files (x86)\ASAM e.V\ASAM AE XIL API Standard Assemblies 2.1.0\bin 中查找 ASAM.XIL.Implementation.Testbench.dllASAM.XIL.Interfaces.dll

在文件夹 C:\ProgramData\MATLAB\SupportPackages\<release>\toolbox\slrealtime\xil\src\bin\win64 中查找 MathWorks.ASAM.XIL.Server.dll

3.将示例 C# 程序 myRealTimeAppController.cs 的内容复制到您当前的 Visual Studio 工程中。更新工程。

要查找文件 myRealTimeAppController.cs,请打开此示例并查看示例文件夹。

4.在您的 Visual Studio 工程中构建解决方案。

运行 C# 程序

1.在操作系统命令提示符下运行您的应用程序。输入:

appName configFilePath csvFilePath

该命令的组成部分包括:

  • 应用名称

  • 配置文件的完整文件路径

  • 保存解决方案的 CSV 文件的完整文件路径

运行该应用程序时,它会在目标计算机上加载并运行名为 Simulink Real-Time 的应用程序 slrt_ex_pendulum_100Hz.mldatx。运行期间,信号 slrt_ex_pendulum_100Hz/Pendulum:1slrt_ex_pendulum_100Hz:2 的信号数据将被记录约 3 秒钟。数据已保存至您选择的 CSV 文件中。完成后,应用程序在目标计算机上停止运行。

2.检查 CSV 文件中保存的信号数据。

关于多个 MATLAB 安装

若系统中安装了多个版本的 MATLAB®,当您运行 C# 程序时,操作系统的默认行为是打开系统路径中定义的首个 MATLAB 可执行文件。默认情况下,此版本即为已安装的最新版本 MATLAB。要选择不同的 MATLAB 版本(可选):

  • 打开路径环境变量,确保选定的 MATLAB 版本(作为 COM 自动化服务器使用)位于顶部或系统中已安装的其他 MATLAB 路径之前。

  • 手动将当前的 MATLAB 实例设置为 COM 自动化服务器。请参阅regmatlabserver

bdclose(model);