Передача Таблицы позволяет вам проверять, что изменения в блоках в библиотеке не повреждают модель, если вы имеете сохраненный модель с более старой версией библиотечного блока. Передача таблиц помогает вам обеспечить совместимость библиотечных блоков, когда вы изменяете путь или имя библиотеки, или добавляете, удаляете или переименовываете параметры в библиотечном блоке. Для получения дополнительной информации смотрите, Создайте Пользовательскую Библиотеку.
Создайте передающую запись таблицы для отображения старых библиотечных блоков к новым библиотечным блокам. Когда вы открываете модель, ссылки на старый библиотечный блок обновляются автоматически, не теряя данные или функциональность. Передающие таблицы выполняются, когда вы открываете модель, закрываете модель, или когда вы выполняете add_block
или replace_block
команда.
Создайте передающую запись таблицы когда вы:
Переименуйте блок.
Переместите блок от одной библиотеки до другой библиотеки.
Добавьте или удалите параметры из блока.
Разделите функциональность блока.
Рассмотрите пример где имя блока в библиотеке testlib
переименован от ss1
к ss2
.
Откройте заблокированную библиотеку Lib1
.
В окне Library, на вкладке Library, нажимают Locked Library. Библиотека теперь разблокирована для редактирования.
На вкладке Modeling нажмите Library Properties. Диалоговое окно Library Properties открывается.
Кликните по вкладке Forwarding Table.
Нажмите запись Add New. Новая строка добавляется в передающей таблице.
Задайте имя старого блока в Старом Блоке Path и соответствующем новом блоке path в Новом Блоке Path. Если вы не знаете путь, выберите блок в модели и нажмите Get gcb кнопка. Путь блока автоматически заполняется в соответствующих столбцах.
Отображение старого пути к новому пути создается в передающей таблице. Теперь откройте модель, которая содержит ссылки на библиотеку. Ссылки на старые библиотечные блоки в модели обновляются автоматически. Можно использовать панель поиска выше таблицы, чтобы отфильтровать табличное содержимое. Можно отсортировать столбцы в порядке возрастания или убывания. Можно также сгруппировать столбцы их значениями.
Присвойте номера версий библиотечным блокам
В столбце Версии можно задать номер версии для библиотечного блока.
Если старое имя блока совпадает с новым именем блока, передающая таблица заполняет номер версии автоматически. Начальное значение версии библиотеки LibraryVersion
выведен из ModelVersion
свойство библиотеки в то время ссылка библиотеки создается. Любые последующие обновления библиотечного блока обновят версию библиотеки, чтобы совпадать с версией модели библиотеки.
Номер версии:
Должно быть числовое значение.
Должен иметь формат <major_version>
. <minor_version>
когда старым и новыми путями к блоку является то же самое.
Не должен иметь больше чем одной записи через точку. Например, номер версии 1,3 приемлем. Номер версии 1.3.1 не приемлем.
Формат не очень важен, когда вы используете передающую таблицу, чтобы переместить библиотечный блок от одной библиотеки до другого.
Рассмотрите пример где блок ss1
перемещен от testlib1
к testlib2
'. Передающую запись таблицы в этом случае показывают здесь:
Рассмотрите пример где параметр Усиления ss1
в библиотеке testlib
удален, и два других параметра Initial condition
и Delay length
добавляются к нему.
Чтобы обработать это изменение, мы используем функцию преобразования. Функция преобразования корректирует несоответствие параметров между новыми и старыми ссылками библиотеки, которое гарантирует, что ссылки библиотеки продолжают работать. Можно задать функцию преобразования использование .m
файл функции на пути MATLAB, затем вызовите функцию в столбце Функции Преобразования Передающей Таблицы.
Соединенный блок содержит экземпляр параметров блоков в форме аргументов name-value, чтобы инстанцировать блока. Эти данные об экземпляре передаются функции преобразования как InstanceData
наряду с передачей записи. Эти данные хранятся как struct
поля .
Когда вы создаете версии библиотечного блока, параметры добавлены или удалены из InstanceData
. В этом примере, InstanceData
перед удалением параметра Усиления и после того, как выглядит так сложение начального условия и длины задержки
Прежде:
'RTWMemSecFuncInitTerm' 'Inherit from model' 'RTWMemSecFuncExecute' 'Inherit from model' 'RTWMemSecDataConstants' 'Inherit from model' 'RTWMemSecDataInternal' 'Inherit from model' 'RTWMemSecDataParameters' 'Inherit from model' 'ContentPreviewEnabled' 'on' 'Gain' '0'
После:
'RTWMemSecFuncInitTerm' 'Inherit from model' 'RTWMemSecFuncExecute' 'Inherit from model' 'RTWMemSecDataConstants' 'Inherit from model' 'RTWMemSecDataInternal' 'Inherit from model' 'RTWMemSecDataParameters' 'Inherit from model' 'ContentPreviewEnabled' 'on' 'DelayLength' '1' 'InitialCondition' '0'
Это - синтаксис для функции преобразования.
function outData = TransformationFcn(inData)
В этом синтаксисе функций:
inData
структура с полями ForwardingTableEntry
и InstanceData
. ForwardingTableEntry
также структура.
ForwardingTableEntry
имеет старое название, новое имя, старый путь и новый путь блока. Обратитесь к коду, чтобы получить доступ к членам ForwardingTableEntry
.
outData
структура с полями NewInstanceData
и NewBlockPath
.
Добавление или удаляет параметры из блока:
Получите данные об экземпляре и передающую запись таблицы.
Извлеките список пары "имя-значение" и имен блока.
Получите старые и новые имена блока.
Проверяйте, являются ли старые и новые имена блока тем же самым. Если так, затем извлеките версии блока.
Проверяйте, ли старая версия 1.1, и новая версия 1.2. Затем удалите Gain
параметр и добавляет параметры Delay length
и Initial condition
.
Примечание
У вас может быть только одна функция преобразования для одной библиотеки или блока. Однако у вас может быть несколько функций.
Чтобы добавить или удалить параметры, используйте эту функцию преобразования.
function [outData] = txFcnTestlib(inData) outData.NewBlockPath = ''; outData.NewInstanceData = []; % Get linked block instance data and forwarding entry for which % function is called instanceData = inData.InstanceData; forwardingTableEntry = inData.ForwardingTableEntry; % Get list of name value pair and block names [ParamNames{1:length(instanceData)}] = instanceData.Name; % Get old and new block paths or simply names oldName = forwardingTableEntry.('__slOldName__'); newName = forwardingTableEntry.('__slNewName__'); % If block names are same and its subsys block in the lib if strcmp(oldName, newName) % Get old and new block versions from forwarding table oldVer = forwardingTableEntry.('__slOldVersion__'); newVer = forwardingTableEntry.('__slNewVersion__'); % Each forwarding entry with different version can have separate % entry. Here, for one single entry in forwarding table i.e. % 1.2->1.3 or 1.3->2.0, we have separate transformation making one % TX Fcn for one library or block. if strcmp(oldName, 'testlib/ss1') % Forwarding with same block name ss1 if oldVer == '1.1' && newVer == '1.2' % Remove gain param if (ismember('Gain',ParamNames)) for (i = 1:length(instanceData)) if (strcmp(instanceData(i).Name,'Gain') == true) instanceData(i) = []; break; end end end % Add delay length param if (ismember('DelayLength',ParamNames)) for (i = 1:length(instanceData)) if (strcmp(instanceData(i).Name,'Value') == true) instanceData(i).Value = '5'; break; end end else instanceData(end+1).Name = 'DelayLength'; instanceData(end).Value = '1'; end % Add initial condition param if (ismember('InitialCondition',ParamNames)) for (i = 1:length(instanceData)) if (strcmp(instanceData(i).Name,'InitialCondition') == true) instanceData(i).Value = '0'; break; end end else instanceData(end+1).Name = 'InitialCondition'; instanceData(end).Value = '0'; end elseif (oldVer == '1.2' && newVer == '1.3') % Do version 1.2 to 1.3 specific changes elseif (oldVer == '1.3' && newVer == '2.0') % Do version 1.3 to 2.0 specific changes else % Do default changes not applicable to any version if % required end elseif strcmp(oldName, 'testlib/ss2') % Forwarding for block ss2 with version upgrade end elseif strcmp(oldName, 'testlib/oldblk') && strcmp(newName, 'testlib2/newblk') % Block moved to new library or just block is renamed within same % library, no version is checked here. Do transformation is % required i.e. is block has been modified while renaming or moving % to new lib. elseif strcmp(oldName, 'testlib/blkX') && isempty(newName) % We are splitting the block into 2 different blocks. Hence, kept % newName empty in fwd table. Using one of the block param from its % instance data (which is name-value pair of all block params) to % decide how and what to divide. % Get the index of param we are interested in i.e. param X i = find(contains({instanceData.Name},'X'), true); % Based on its value, do block splitting switch (instanceData(i).Value) case 'op1' newName = 'newlibX/blkX'; % Remove existing param or add new param or modify existing % params etc. case 'op2' newName = 'newlibY/blkX'; otherwise newName = oldName; end end % Return new instance data and new block path outData.NewInstanceData = instanceData; outData.NewBlockPath = newName; end
Разделение функциональности блока включает добавление, удаление или изменение существующего параметра блока и добавления его с новым блоком. Разделять функциональность блока:
Оставьте newName
пустой аргумент.
Получите индекс и значение параметра.
Разделите блок на основе его значения.
Возвратите NewBlockPath
с обновленным InstanceData
при необходимости.
Если вы переименовываете параметр маски, необходимо гарантировать что существующий MATLAB® скрипты, которые используют старые названия параметра, продолжают работать. Чтобы проверять совместимость, можно создать псевдоним для названия параметра маски. Псевдоним позволяет вам менять имя параметра маски в библиотечном блоке, не имея необходимость воссоздавать ссылки на блок в существующих моделях.
Рассмотрите маскированный блок, который содержит параметр Edit. Названием параметра маски для этого параметра Edit является p1
.
MaskObj = Simulink.Mask.get(gcb)); hEdit = MaskObj.getParameter('p1'); hEdit= % MaskParameter with properties: Type: 'edit' TypeOptions: {0×1 cell} Name: 'p1' Prompt: 'p1' Value: '0' Evaluate: 'on' Tunable: 'on' NeverSave: 'off' Hidden: 'off' Enabled: 'on' Visible: 'on' ToolTip: 'on' Callback: '' Alias: ''
Заметьте, что параметр маски Edit не имеет псевдонима. Чтобы добавить псевдоним для параметра маски, установите значение для Alias
свойство параметра маски.
MaskObj.Alias = 'pa'
Можно или использовать название параметра маски или псевдоним, чтобы сделать вызов функции на параметре маски. Например, можно или использовать set_param(gcb, 'p1, '10)
(название параметра маски) или set_param(gcb, 'pa, '10)
(псевдоним параметра маски), чтобы установить значение для параметра маски Edit.