Присоединение Входных данных к Внешним Входным параметрам через Пользовательские Входные Отображения

В этом примере показано, как создать пользовательскую функцию отображения для инструмента Root Inport Mapper. Инструмент Root Inport Mapper сопоставляет данные о MAT-файле с определенным входным портом, на основе одного из этих критериев.

  • Порядок порта - Карты в порядке это появляется в файле к соответствующему номеру порта.

  • Имя блока - Карты именем переменной к соответствующему корневому импорту с соответствующим именем блока.

  • Имя сигнала - Карты именем переменной к соответствующему корневому импорту с соответствующим именем сигнала.

  • Блок Path - Карты параметром BlockPath к соответствующему корневому импорту с соответствующим блоком path.

  • Пользовательский - Карты с помощью функции MATLAB.

Используйте пользовательское отображение критерии, когда данные, которые вы пытаетесь сопоставить, не совпадают ни с одним из других критериев отображения.

Пользовательский сценарий отображения

Если комбинация входных данных и входных портов модели не совпадает с Порядком Порта, Именем блока, Именем Сигнала или критериями отображения Блока Path, можно выполнить одно из следующих действий:

  • Переименуйте входные данные в MAT-файле

  • Переименуйте входные порты на модели

  • Используйте пользовательский режим отображения

В этом примере показано, как записать пользовательскую функцию отображения.

Рабочий процесс, описанный ниже, включает

  • Создайте файл MATLAB, чтобы содержать пользовательскую функцию отображения

  • Объявите пользовательское имя функции отображения, входные параметры и выходные параметры

  • Инициализируйте выход для присвоения возвращаемого значения

  • Задайте и реализуйте свой алгоритм отображения

  • Подтвердите свой алгоритм отображения

Создайте новый файл функции MATLAB

Создайте файл функции MATLAB. Этот файл будет содержать вашу пользовательскую функцию отображения.

Объявите пользовательскую функцию отображения

Объявите пользовательское имя функции отображения и задайте вводы и выводы. slexCustomMappingMyCustomMap является пользовательской функцией отображения в этом примере. Это объявляет входные параметры функции и выходные параметры, как задано ниже.

Входные параметры

  • modelName - Представьте в виде строки, который содержит имя модели.

  • signalNames - Массив ячеек строк, которые содержат имена переменных сигналов сопоставить

  • сигналы - Массив ячеек данных сигнала, выровненных с signalNames, таким образом, что signalNames {1} является именем переменной сигнала, сохраненного в сигналах {1}.

Выходные параметры

  • inputMap - Массив или скаляр объектов, которые следуют из функции getRootInportMap.

Инициализируйте Выход

Инициализируйте значение выходной переменной inputMap. Сделать это использование getRootInportMap команда с пустым свойством как показано в функции, взятой в качестве примера, slexCustomMappingMyCustomMap или во фрагменте кода ниже. Это инициализирует выходную переменную, чтобы опустеть так, чтобы значение могло быть присвоено выходу.

inputMap = getRootInportMap('empty');

Задайте свой пользовательский алгоритм отображения

Вещи думать о при определении пользовательского алгоритма отображения.

  • Что является критериями отображения сигналов к импорту корневого уровня, например, BlockName, сопоставляющий соответствия, имя входного сигнала к имени корневого уровня импортирует имя блока.

  • Какая информация необходима, чтобы создать отображение.

  • Что происходит, если критерии отображения решают, что там не идет ни в какое сравнение между импортом корневого уровня и сигналом.

Пример обращается к этим элементам

  • Используя номер порта корневого уровня и имя сигнала для отображения критериев.

  • Используя служебную функцию slexCustomMappingGetPortNames, чтобы получить корневой уровень импортируют имена блока, чтобы обеспечить, как введено наряду с variable|signalName | к getRootInportMap функция, которая создает отображение.

  • Включая логическое условие обработать случай, где там не идет ни в какое сравнение между номером порта и именем сигнала.

Реализуйте свой алгоритм отображения

Затем реализуйте свой алгоритм отображения.

В slexCustomMappingMyCustomMap реализации номер порта импорта корневого уровня является критериями критериев отображения. Алгоритм получает этот номер порта от блока импорта корневого уровня. Это затем добавило численные значения к именам сигналов, которые передаются в функцию, и сравнивает номер порта с численными значениями.

ПРИМЕЧАНИЕ: В дополнение к реализации вашего алгоритма отображения, необходимо также включать логический оператор, чтобы обработать ситуации, где отображение не возможно. Функция, взятая в качестве примера, делает это при помощи if оператор с isempty функция, чтобы определить, может ли отображение быть сделано.

Создайте отображение

Последний шаг должен использовать getRootInportMap функция, чтобы создать пользовательскую карту. getRootInportMap функционируйте использует пары Значения свойства, чтобы создать пользовательскую карту. Свойства:

  • модель - Строка, которая представляет имя модели.

  • signalName - Строка или ячейка строк, которая содержит значение имени переменной сигнала сопоставить.

  • имя блока - Строка или ячейка строк, которая содержит значение имени блока порта, который будет сопоставлен.

Следующий код является примером этой функции. Этот тот же код появляется в функции, взятой в качестве примера, slexCustomMappingMyCustomMap.

inputMap = getRootInportMap(...
                        'model',modelName,...
                        'signalName',signalNames,...
                        'blockName',portNames);

Подтвердите пользовательскую функцию отображения

Чтобы подтвердить пользовательское отображение функционируют в командной строке:

  1. Откройте модель, против которой вы хотите протестировать свою функцию.

  2. Создайте некоторые входные сигналы, чтобы поддержать модель.

  3. Вызовите свою пользовательскую функцию отображения правильными входными параметрами.

  4. Подтвердите ожидаемую входную строку, чтобы отправить к sim команда, или поместить в окне редактирования External Input String параметров конфигурации модели.

Выполните строки кода в следующем примере. Этот код использует пользовательскую функцию отображения, которой предоставляют этот пример. Если пользовательская функция карты успешно выполняется, необходимо видеть список, разделенный запятыми имен переменных, отображенных в порядке номера порта, которому они присвоены ('port1,port2').

load_system('slexAutotransRootInportsExample'); port1               =
timeseries(ones(10,1)*10); port2               =
timeseries(zeros(10,1)); inputMap            =
slexCustomMappingMyCustomMap('slexAutotransRootInportsExample',{'port1'
, 'port2'},{port1 , port2}); externalInputString =
getInputString(inputMap,'base');
close_system('slexAutotransRootInportsExample',0);

Если ваши сигналы находятся в Simulink. SimulationData. Набор данных, можно выполнить строки кода в следующем примере. Этот код использует пользовательскую функцию отображения, которой предоставляют этот пример. Если пользовательская функция отображения успешно выполняется, необходимо видеть список, разделенный запятыми имен переменных, отображенных в порядке номера порта, которому они присвоены ('ds.getElement(1),port1,ds.getElement(2)').

load_system('slexAutotransRootInportsExample');
ds = Simulink.SimulationData.Dataset;
ds = ds.addElement( timeseries(ones(10,1)*10),'port1');
ds = ds.addElement( timeseries(zeros(10,1)),'port1');
inputMap            = slexCustomMappingMyCustomMap('slexAutotransRootInportsExample',{'ds'},{ ds });
externalInputString = getInputString(inputMap,'base');
close_system('slexAutotransRootInportsExample',0);