【问题标题】:How to change a tunable parameter with a Matlab function when using Simulink Coder (or accept input from multiple sources)?使用 Simulink Coder 时如何使用 Matlab 函数更改可调参数(或接受来自多个来源的输入)?
【发布时间】:2018-11-03 17:49:42
【问题描述】:

我们有一个在 dSPACE 机器上编译和运行的 Simulink 模型。我们需要能够

  1. 使用 dSPACE Con​​trolDesk 更改参数值并
  2. 使用模型内的 Matlab 函数(或类似 Simulink 模块的类似函数)更改参数值

(1) 可以使用 Constant 块,只需输入一个数字。您可以在 dSPACE 中更改 Constant 模块的值。也可以在 Constant 块中输入变量名称,如 FOO,并将 FOO 值更改为 可调参数

(2) 到目前为止还不可能。 'set_param' 之类的东西似乎不起作用,因为一切都是用 Simulink Coder 编译的。

任何能够从模型内部更改参数 FOO 的方法都适用于我们。

应用/为什么?:我们有诸如“机器人的目标 x 位置”之类的值。有时,这个值是手动设置的,但有时,它是由不同的参与者自动设置的(“直线行驶”、“行驶曲线”等等)。很高兴在一个确定的位置看到当前目标 x 位置,而不必担心手动将控制从手动模式切换到 actor 1、actor 2 等。(当然,我们需要确保只有一个 actor 在每个时间步)。如果需要并且我们的想法是不可能的,我们至少想要一种优雅的方式来切换控制。

当前解决方法(有问题)

我们当前的方法检测设置值的变化(可能来自不同的参与者)。 Actor 1 设置值 u1=10,然后 y=u1=10。然后演员 2 设置值 u2=30,然后 y=u2=30。但如果演员 1 再次设置 u1=10,则没有检测到任何变化,并且 y 仍然是 u2=30。

【问题讨论】:

  • dSPACE 目标是否为 Simulink 提供 "External Mode"?如果是这样,您可以使用简单的 M 脚本从 MATLAB / Simulink 更改目标系统上的值。
  • 我将不得不稍后检查。虽然这个想法是用一个在 dSpace 盒子本身上编译和运行的 matlab 功能块(或等效的)来更改值,因此实际上不需要计算机。
  • 为什么不用M-Function的输出作为信号来驱动“Outport 26”呢?
  • 查看应用程序/原因。有时我们需要手动设置'outport 26',有时需要设置matlab函数1,有时需要设置matlab函数2等

标签: matlab parameters simulink dspace-ecu


【解决方案1】:

您可以使用“数据存储内存”,您可以在运行时从 MATLAB-Function-Block 中更改它。

在 M-Function 中,您将 FOO 声明为 global 变量。

function fcn(u)
%#codegen

global FOO

% Do something foo...
if u < 10
    FOO = 1;
else
    FOO = 2;
end

为此,您必须首先通过“端口和数据管理器”将此全局变量附加到 M-Function。

然后您还必须双击模型中的“数据存储内存”和块参数中的“信号属性”部分,您必须将以下参数设置为定义的值 - 不允许自动检测这里:

  • 初始值
  • 数据类型
  • 尺寸
  • 信号类型(复杂性)


但我仍然建议仅使用 M-FUNCTION 的输出来驱动 OUTPORT 26!

【讨论】:

    猜你喜欢
    • 2020-05-28
    • 2013-10-06
    • 2017-09-03
    • 2016-05-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    相关资源
    最近更新 更多