При миграции устаревших моделей SimEvents® часто необходимо создавать действия события в этих экземплярах:
Установка значений атрибута
Получение значений атрибута
Генерация генерации случайных чисел
Используя последовательности События
Заменяя Функциональные блоки Атрибута
Используя Simulink® сигнализирует в основанном на событии вычислении
Используйте эти инструкции, чтобы заменить блоки Set Attribute:
Если блоки Set Attribute сразу следуют за блоками генератора сущности, чтобы инициализировать атрибуты в блоке Entity Generator, закодируйте действие Generate
с вкладкой Event actions, чтобы установить начальное значение атрибута. Например:
entitySys.id=5;
Если атрибуты изменения блоков Set Attribute, в блоке Entity Generator, кодируют действие Create
с вкладкой Event actions.
Этот пример иллюстрирует действие Generation
, чтобы инициализировать значения атрибута:
Возвратитесь к рабочему процессу миграции.
Если вы пишете действия события, чтобы получить значения атрибута, используйте Функциональный блок Simulink:
Поместите блок вычисления в Функциональный блок Simulink.
Передайте значение атрибута в качестве аргумента от действия события до Функционального блока Simulink.
Можно сгенерировать использование случайных чисел:
Замените режимы распределения блока Event-Based Random Number случайных чисел на эквивалентный код MATLAB® в действиях события. Для получения дополнительной информации о генерации случайных распределений, смотрите Языки Действия События и Генерацию случайных чисел.
Если вам нужны дополнительные дистрибутивы случайных чисел, см. Statistics and Machine Learning Toolbox.
Если вы генерируете случайные числа, возвратитесь к Рабочему процессу Миграции.
Вот пример того, как воспроизвести произвольное дискретное распределение для Основанного на событии устаревшего блока Случайных чисел. Примите, что блок имеет эти установки параметров:
Distribution: Arbitrary discrete
Value vector:
[2 3 4 5 6]
Probability vector:
[0.3 0.3 0.1 0.2 0.1]
Initial seed:
12234
Как общее руководство:
Установите начальный seed, например:
persistent init if isempty(init) rng(12234); init=true; end
Определите то, чему присвоен вектор значения в устаревшей модели, и непосредственно присвойте его в коде действия в новой модели. В этом примере вектор значения присвоен FinalStop
.
Чтобы присвоить значения в соответствующей области значений, вычислите вектор интегральной вероятности. Для удобства используйте вектор вероятности, чтобы вычислить совокупное, вероятно, вектор. Например, если вектор вероятности:
[0.3 0.3 0.1 0.2 0.1]
Вектор интегральной вероятности:
[0.3 0.6 0.7 0.9 1]
Создайте случайную переменную, чтобы использовать в коде, например:
x=rand();
Вот пример кода для этого блока в качестве примера, чтобы вычислить распределение. Вектор значения присвоен FinalStop
:
% Set initial seed. persistent init if isempty(init) rng(12234); init=true; end % Create random variable, x. x=rand(); % % Assign values within the appropriate range using the cumulative probability vector. % if x < 0.3 entity.FinalStop=2; elseif x >= 0.3 && x< 0.6 entity.FinalStop=3; elseif x >= 0.6 && x< 0.7 entity.FinalStop=4; elseif x >= 0.7 && x< 0.9 entity.FinalStop=5; else entity.FinalStop=6; end
Если вы генерируете случайные числа, возвратитесь к Рабочему процессу Миграции.
Замените Основанные на событии блоки Последовательности, которые генерируют последовательность чисел от заданных вектор-столбцов с действиями события:
Замените Функциональные блоки Атрибута, которые управляют атрибутами с помощью кода MATLAB с действиями события:
Скопируйте код Функции Атрибута, без синтаксиса функций, к вкладке Event actions в соответствующем действии события.
Чтобы относиться к атрибуту сущности, используйте формат
.entity.Attribute1
Для короткого или простого кода используйте построения как они:
Если вы имеете дольше или более сложный код, рассматриваете заменяющий Функциональный блок Атрибута на Функцию Simulink и копирующий код без модификации в Функциональный блок Simulink.
Возвратитесь к рабочему процессу миграции.
Если вы используете Сигналы Simulink в основанном на событии вычислении, отправьте сигналы в Функциональный блок Simulink.
Скопируйте основанный на событии код вычисления в Функциональный блок Simulink.
Отправьте Сигналы Simulink как входные параметры к Функциональному блоку Simulink.
Например: