При миграции устаревших SimEvents® модели, вы часто должны создавать действия события в следующих образцах:
Установка значений атрибутов
Получение значений атрибутов
Генерация генерации случайных чисел
Использование последовательностей событий
Замена блоков функции атрибутов
Использование Simulink® сигналы в основанных на событиях расчетах
Используйте следующие инструкции для замены Set Attribute блоков:
Если блоки Set Attribute немедленно следуют за блоками генератора сущностей, чтобы инициализировать атрибуты, в блоке Entity Generator кодируйте Generate
действие на вкладке Event actions, чтобы задать начальное значение атрибута. Для примера:
entitySys.id=5;
Если блоки Set Attribute изменяют атрибуты, в блоке Entity Generator кодируйте Create
действие на вкладке Event actions.
Этот пример иллюстрирует Generation
действие для инициализации значений атрибутов:
Вернуться к рабочему процессу миграции.
Если вы записываете действия события, чтобы получить значения атрибутов, используйте блок Simulink Function:
Поместите вычислительный блок в Simulink Function блок.
Передайте значение атрибута как аргумент из действия события в блок Simulink Function.
Вы можете сгенерировать случайные числа с помощью:
Замените Event-Based Random Number блок случайного числа режимами распределения на эквивалентные MATLAB® код в событийных действиях. Для получения дополнительной информации о генерации случайных распределений смотрите Языки действий События и Генерация случайных чисел.
Если вам нужны дополнительные распределения случайных чисел, см. Statistics and Machine Learning Toolbox.
После генерации случайных чисел вернитесь к Рабочему процессу миграции.
Вот пример того, как воспроизвести произвольное дискретное распределение для Event-Based Random Number устаревшего блока. Предположим, что блок имеет следующие настройки параметров:
Distribution: Arbitrary discrete
<reservedrangesplaceholder1> <reservedrangesplaceholder0>
<reservedrangesplaceholder1> <reservedrangesplaceholder0>
<reservedrangesplaceholder1> <reservedrangesplaceholder0>
В качестве общего руководства:
Установите начальный 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
После генерации случайных чисел вернитесь к Рабочему процессу миграции.
Замените Event-Based Sequence блоки, которые генерируют последовательность чисел из заданных векторов-столбцов, действиями события:
Замените Attribute Function блоки, которые манипулируют атрибутами с помощью кода MATLAB, действиями события:
Скопируйте код Attribute Function без синтаксиса функции на вкладку Event actions в соответствующем действии события.
Для обращения к атрибуту сущности используйте сущность
формата
.Attribute1.
Для краткого или простого кода используйте такие конструкции, как:
Если у вас более длинный или сложный код, рассмотрите замену Attribute Function блока на Simulink Function и копирование кода без модификации в Simulink Function блок.
Вернуться к рабочему процессу миграции.
Если вы используете сигналы Simulink в основанных на событиях расчетах, отправьте сигналы в блок Simulink Function.
Скопируйте основанный на событиях код расчета в блок Simulink Function.
Отправьте сигналы Simulink как входы в блок Simulink Function.
Для примера: