Этот пример показывает, как создать пользовательскую функцию отображения для инструмента Root Inport Mapper. Инструмент Root Inport Mapper сопоставляет данные о MAT-файле с определенным входным портом, на основе одного из этих критериев.
Порядок порта - Карты в порядке это появляется в файле к соответствующему номеру порта.
Имя блока - Карты именем переменной к соответствующему корневому импорту с соответствующим именем блока.
Имя сигнала - Карты именем переменной к соответствующему корневому импорту с соответствующим именем сигнала.
Блок Path - Карты параметром BlockPath к соответствующему корневому импорту с соответствующим блоком path.
Пользовательский - Карты с помощью функции MATLAB.
Используйте пользовательское отображение критерии, когда данные, которые вы пытаетесь сопоставить, не совпадают ни с одним из других критериев отображения.
Если комбинация входных данных и образцовых входных портов не совпадает с Порядком Порта, Именем блока, Именем Сигнала или критериями отображения Блока Path, можно выполнить одно из следующих действий:
Переименуйте входные данные в MAT-файле
Переименуйте входные порты на модели
Используйте пользовательский режим отображения
Этот пример показывает, как записать пользовательскую функцию отображения.
Рабочий процесс, описанный ниже, включает
Создайте файл 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);
Чтобы подтвердить пользовательское отображение функционируют в командной строке:
Откройте модель, против которой вы хотите протестировать свою функцию.
Создайте некоторые входные сигналы, чтобы поддержать модель.
Вызовите свою пользовательскую функцию отображения с правильными входными параметрами.
Подтвердите ожидаемую входную строку, чтобы отправить к команде 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);