При переносе устаревших моделей SimEvents ® часто необходимо создавать действия с событиями в следующих случаях:
Установка значений атрибутов
Получение значений атрибутов
Генерация случайных чисел
Использование последовательностей событий
Замена функциональных блоков атрибутов
Использование сигналов Simulink ® в вычислениях на основе событий
Используйте следующие инструкции для замены блоков Задать атрибут (Set Attribute).
Если блоки Задать атрибут (Set Attribute) сразу следуют за блоками генератора объектов для инициализации атрибутов, в блоке Генератор объектов (Entity Generator) введите код Generate действие на вкладке Действия события для установки начального значения атрибута. Например:
entitySys.id=5;
Если блоки Задать атрибут (Set Attribute) изменяют атрибуты, в блоке Генератор объектов (Entity Generator) кодируйте Create на вкладке Действия события.
Этот пример иллюстрирует Generation действие для инициализации значений атрибута:

Вернуться к разделу Рабочий процесс миграции.
При записи действий события для получения значений атрибутов используйте блок Simulink Function:
Поместите вычислительный блок в блок Simulink Function.
Передайте значение атрибута в качестве аргумента из действия события блоку Simulink Function.
Можно создать случайные числа, используя:
Замените режимы распределения случайных чисел на основе событий на эквивалентный код MATLAB ® в действиях с событиями. Дополнительные сведения о создании случайных распределений см. в разделе Языки действий события и создание случайных чисел.
Если требуется дополнительное распределение случайных чисел, см. раздел Статистика и инструментарий машинного обучения.
После создания случайных чисел вернитесь в раздел Рабочий процесс миграции.
Ниже приведен пример воспроизведения произвольного дискретного распределения для устаревшего блока случайных чисел на основе событий. Предположим, что блок имеет следующие параметры:
Распределение: Arbitrary discrete
Вектор значения:
[2 3 4 5 6]
Вектор вероятности:
[0.3 0.3 0.1 0.2 0.1]
Начальное начальное число:
12234
В качестве общего руководства:
Задайте начальное начальное значение, например:
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, на действия с событиями:
Скопируйте код функции атрибута без синтаксиса функции на вкладку Действия события в соответствующем действии события.
Для ссылки на атрибут сущности используйте формат entity..Attribute1
Для краткого или простого кода используйте такие конструкции, как:

При наличии более длинного или более сложного кода рекомендуется заменить блок «Функция атрибута» функцией Simulink и скопировать код без изменений в блок «Функция Simulink».

Вернуться к разделу Рабочий процесс миграции.
Если вы используете сигналы Simulink в вычислениях на основе событий, отправьте сигналы в блок Simulink Function.
Скопируйте основанный на событиях вычислительный код в блок Simulink Function.
Передача сигналов Simulink в качестве входных сигналов в блок Simulink Function.
Например:
