【问题标题】:how to run a Simulink model in a Matlab M file in this way?如何以这种方式在 Matlab M 文件中运行 Simulink 模型?
【发布时间】:2015-07-02 02:30:43
【问题描述】:

我在 simulink 中有 simulink 模型“Mod_Sim” 带有一个输入端口“inp”和一个输出端口“out”。 我想向这个模型发送输入,模拟它,然后取 每个采样时间“Ts”的相应输出。 我想以这种方式为“N”个时间步(以 Ts 计)模拟此模型。

更具体地说,我想要以下实现:

在给定的时间步“k”,我将输入 u(k)(来自其他来源)。 然后,我想将此输入应用到 Mod_Sim 并从模型中获取相应的输出 y(k)。我想重复这个 N 个时间步。

我怎样才能做到这样的实现?

我很乐意为您提供帮助。

【问题讨论】:

    标签: matlab controls simulink


    【解决方案1】:

    在开始仿真之前,您需要在 MATLAB 工作区中将所有输入定义为感兴趣的时间跨度的时间函数。

    假设您在 MATLAB 工作区中定义了 tu,并且您的输入端口 inp 位于模型的根级别,您需要将模型配置为使用 u 和 @987654332 @ 代表inp,如Import Data to Root-Level Input Ports 中所述。

    完成此操作后,您可以run the simulation using the sim command,确保'SaveOutput' 在模拟选项中处于打开状态。

    例如,您可以在 for 循环中重复该练习 N 次。真正的关键是在开始模拟之前在工作区中定义所有输入。

    基于 cmets 编辑

    听起来你想要联合仿真,虽然你没有说是什么生成了u(t),不管它是另一个软件还是什么。无论如何,在我看来,您有几个选择:

    1. 编写一个 S-Function 与生成 u(t) 的其他软件交互,以便它在每个时间步提取一个新值 u。这实际上很难做到,许多软件供应商建议通过 S-Function 与 Simulink 进行某种形式的联合仿真(例如SimulationX)。另请参阅同一主题的 this other question

    2. 使用 TCP/IP 或 UDP/IP 在 Simulink 和第三方软件之间进行通信。仪器控制工具箱提供Send and Receive blocks for TCP/IP and UDP/IP。 TCP/IP 应该比 UDP/IP 更可靠,参见this comparison

    【讨论】:

    • 我知道这个实现,但这不是我想要的。我的实现将在线:t 和 u 将随时间创建,因此 u 不能在一开始就被定义为时间的函数。
    • 您的问题不清楚(或者可能只是我)。无论如何,听起来你想要联合仿真。这实际上很难正确完成,您需要编写一个 S-Function 来与其他软件或生成 u(t) 的任何东西交互,而我不知道从哪里开始。如果可能,另一种选择是通过 TCP/IP 或 UDP/IP 发送数据。我将更新我的答案以反映这一点。
    • 我想做的具体如下(没错,就是协同仿真)。有一个软件“X”可以耦合到 Matlab 但不能耦合到 Simulink。 X 软件中有一个模型“M”。我在 Simulink 中为 M 设计了一个 SISO 控制器“K”。在耦合文件“C.m”(将 X 耦合到 Matlab)中,我想在每个采样时间 k 调用 K 来获取 u(k),然后发送这个 u( k) 通过 C.m 到 M,在 M 被模拟之后,我将通过 C.m 从 X 中的 M 得到输出 y(k),最后我会将 y(k) 发送到 K。我很高兴知道这将如何执行.谢谢。
    • 那么你需要编写一个S-Function来执行协同仿真,没有办法绕过它,尽管你的软件X的供应商应该提供这个。这是非常高级的东西(超出了我的知识范围),您需要彻底了解 simulink 引擎和其他软件引擎的工作方式。有关类似问题,请参阅 stackoverflow.com/questions/18742427/…。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    相关资源
    最近更新 更多