В этом примере показано, как создать пользовательскую функцию отображения для инструмента 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);