Как изменить настраиваемый параметр с помощью функции Matlab при использовании Simulink Coder (или принять входные данные из нескольких источников)? - PullRequest
0 голосов
/ 24 мая 2018

У нас есть модель Simulink, которая компилируется и запускается на коробке dSPACE.Нам нужно иметь возможность

  1. изменить значение параметра с помощью dSPACE ControlDesk и
  2. изменить значение параметра с помощью функции Matlab внутри модели (или чего-то подобного, подобногоБлок Simulink)

(1) возможно с блоком Constant, просто введя число.Вы можете изменить значение блока Constant в dSPACE.Также можно ввести имя переменной, например, FOO, в блоке Constant и изменить это значение FOO как настраиваемый параметр .

(2) пока невозможно.Такие вещи, как 'set_param', похоже, не работают, потому что все компилируется с помощью Simulink Coder.

Problem

Любой метод, способный изменить параметр FOOизнутри модель будет работать для нас.

Применение / Почему? : У нас есть значения, такие как «цель х позиция робота».Иногда это значение устанавливается вручную, но иногда оно устанавливается автоматически различными участниками («Двигайтесь прямо», «Управляйте кривыми» и т. Д.).Было бы неплохо увидеть текущую целевую позицию х в одном определенном месте, и не нужно беспокоиться о ручном переключении управления из ручного режима в актера 1, актера 2 и т. Д. (Конечно, тогда нам нужно убедиться, что активен только один актер вкаждый раз шаг).Если это необходимо и наша идея невозможна, мы бы хотя бы хотели элегантный способ переключить управление.

Текущее решение (есть проблемы) :

enter image description here enter image description here

Наш текущий метод обнаруживает изменения в установленных значениях (которые могут исходить от разных действующих лиц).Актер 1 устанавливает значение u1 = 10, тогда y = u1 = 10.Затем субъект 2 устанавливает значение u2 = 30, затем y = u2 = 30.Но если субъект 1 затем снова устанавливает u1 = 10, никаких изменений не обнаружено, а y по-прежнему равно u2 = 30.

1 Ответ

0 голосов
/ 24 мая 2018

Вы можете использовать «Память хранилища данных», которую вы можете изменить во время выполнения из функционального блока MATLAB.

Model with M-Function and Data Store Memory

InM-функция, которую вы объявляете FOO как переменную global.

function fcn(u)
%#codegen

global FOO

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

Для того, чтобы сделать это, вы должны сначала присоединить эту глобальную переменную к M-функции через «Диспетчер портов и данных».

MATLAB Editor for M-Function-Block

Ports and Data Manager

Затем необходимо дважды щелкнуть «Память хранилища данных»в модели и в разделе «Атрибут сигнала» в параметрах блока необходимо установить следующие параметры для определенных значений - автоматическое обнаружение здесь не разрешено:

  • Начальное значение
  • Тип данных
  • Размеры
  • Тип сигнала (сложность)

Block Parameters for Data Store Memory


НО Я ВСЕ ЕЩЕ РЕКОМЕНДУЮ, ЧТОБЫ ИСПОЛЬЗОВАТЬ ВЫХОД М-ФУНКЦИИ ДЛЯ ВЫВОДА OUTPORT 26!

...