Таблицы переадресации

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

Таблица пересылки помогает поддерживать совместимость библиотечных блоков и гарантирует продолжение работы моделей. Таблицу пересылки можно использовать для создания карты между старым и новым библиотечными блоками без потери данных или функциональности. После определения отображения старых библиотечных блоков новым библиотечным блокам в таблице пересылки ссылки на старые библиотечные блоки автоматически обновляются во время загрузки модели. Например, если вы переименовываете или перемещаете блок в библиотеке, можно использовать таблицу переадресации для обновления моделей, имеющих ссылки на старый библиотечный блок. Таблица переадресации выполняется в следующих сценариях:

  • Когда модель закрывается и повторно открывается.

  • Когда add_block или replace_block команда выполняется.

Создайте таблицу переадресации

Примечание

Модели, которые разорвали или отключили ссылки, не могут быть обновлены с помощью таблицы переадресации.

  1. Откройте заблокированную библиотеку.

  2. В окне Library, на вкладке Library, нажмите Locked Library. Библиотека теперь разблокирована для редактирования.

  3. На вкладке Modeling нажмите Library Properties. Откроется диалоговое окно Library Properties.

  4. Перейдите на вкладку Forwarding Table.

  5. Нажмите кнопку (Добавить новую запись). Новая строка добавляется в таблицу переадресации.

  6. Задайте значения в Old Block Path и New Block Path столбцах. Чтобы получить путь блока, выберите блок в модели и нажмите.

  7. В Version столбце можно выбрать номер версии для библиотечного блока.

    Если старое имя блока и новое имя блока совпадают, таблица пересылки заполняет номер версии автоматически. Начальное значение версии библиотеки (LibraryVersion) получают из версии модели (ModelVersion) библиотеки на момент создания библиотечной ссылки. Любое последующее обновление библиотечного блока обновит библиотечную версию так, чтобы она совпадала с модельной версией библиотеки.

    Примечание

    • Номер версии должен быть числовым значением.

    • Когда старые и новые пути к блокам совпадают, номер версии должен иметь формат <major_version>.<minor_version>. Для примера при переименовании библиотечного блока.

    • Номер версии не может иметь более одной записи через точку. Для примера - количество версий 1.3 приемлемо, в то время как, номер версии 1.3.1 недопустимо.

    • При использовании таблицы переадресации для перемещения библиотечного блока из одной библиотеки в другую формат номера версии не является критическим.

  8. В Transformation Function столбце можно задать MATLAB® файл, который исправляет несоответствие данных параметра между старой и новой ссылкой. Преобразование данных старого параметра ссылки для нового библиотечного блока позволяет вам загрузить старые ссылки и сохранить данные параметра. Для получения дополнительной информации см. «Функции преобразования».

    Если функция преобразования не задана, столбец Transformation Function отображается No Transformation при сохранении библиотеки.

  9. Чтобы применить изменения и закрыть диалоговое окно, нажмите кнопку OK. В таблице пересылки создается отображение старого пути к новому пути. Ссылки на старые библиотечные блоки обновляются автоматически при открытии модели, содержащей ссылки на библиотеку.

После заполнения таблицы переадресации можно использовать строку поиска над таблицей для фильтрации ее содержимого. Этот фильтр особенно полезен, когда в таблице переадресации слишком много записей. Столбцы в таблице можно отсортировать в порядке возрастания или убывания. Можно также сгруппировать каждый из столбцов по их значениям.

Пример пользовательской таблицы переадресации:

Когда вы задаете идентичное имя библиотечного блока и путь для старых и более новых блоков, таблица пересылки заполняет номер версии автоматически. Для первой записи с идентичными именами и путем номер версии старого блока начинается с 0, а новая версия блока устанавливается как версия модели библиотеки. Версию модели библиотеки можно просмотреть на вкладке History таблицы переадресации.

Функция преобразования должна быть задана, когда специфичные для экземпляра параметры (InstanceData) изменились в старом и новом библиотечных блоках.

В этом примере,

  • Путь блока для Block A изменения от LibA на LibB.

  • Имя блока для Block X изменения в Block Y в то время как путь к библиотеке остается неизменным.

  • Имя блока для Block M изменено на Block N. Функция преобразования задана, чтобы позаботиться об изменениях конкретного экземпляра.

  • Версия блока и специфичный для экземпляра параметр изменены для Block L.

Составьте таблицу переадресации программно

В командной строке можно создать простую таблицу переадресации, в которой указаны старые местоположения и новые местоположения блоков, перемещенных внутри библиотеки или в другую библиотеку. Таблица пересылки связывается с библиотекой путем установки ее ForwardingTable параметр в массив ячеек из двухэлементных массивов ячеек, каждый из которых задает старый и новый путь перемещенного блока. Например, синтаксис для создания таблицы переадресации и назначения ее библиотеке с именем Lib1 является:

set_param('Lib1', 'ForwardingTable', {{'Lib1/A', 'Lib2/A'} 
{'Lib1/B', 'Lib1/C'}});

где:

  • Lib1 - библиотека, связанная с таблицей пересылки.

  • Блочное A передается от Lib1 на Lib2.

  • Блочное B переименован в C в той же библиотеке.

Функции преобразования

Связанный образец блока связан с параметрами конкретного экземпляра, называемыми InstanceData. Когда вы создаете версии библиотечного блока, наборы параметров могут быть добавлены или удалены из InstanceData.

Функция преобразования исправляет несовпадение параметров в InstanceData из новых и старых библиотечных ссылок таким образом обеспечивается продолжение работы библиотечных ссылок.

Можно задать функцию преобразования с помощью файла MATLAB в пути, затем указать функцию в Transformation Function столбце Forwarding Table.

Новый путь к блоку, заданный в таблице пересылки, переопределяет значения, определенные в функции преобразования. Если новый путь блока является динамическим значением, которое изменяется на основе определенных обстоятельств, то новый путь блока должен быть задан только с помощью функции преобразования.

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

function outData = TransformationFcn(inData)

где:

  • inData - структура с полями ForwardingTableEntry и InstanceData, и ForwardingTableEntry также является структурой.

  • outData - структура с полями NewInstanceData и NewBlockPath.

Функция общего преобразования может иметь много локальных функций, определенных в ней. Функция вызывает соответствующие локальные функции на основе старых имен блоков и версий. Можно использовать это, чтобы объединить несколько локальных функций в одну функцию преобразования, чтобы избежать многих функций преобразования в пути MATLAB.

Рассмотрим блок Compare to Constant в Simulink® Библиотека. Вы должны создать версии этого блока, не меняя имя и путь к блоку, но добавляя параметры к более новому библиотечному блоку.

В таблице отображается различие параметров в двух версиях блока Compare to Constant.

Старая версияНовая версия
Block {
BlockType		      Reference
Name		      "Compare\nTo Constant"
Ports		        [1, 1]
Position		     [210, 60, 250, 100]
SourceBlock	  "fixpt_lib_4/Logic & Comparison/Compare\nTo Constant"
SourceType	    "Fixed-Point Compare To Constant"
relop	           "=="
const	           "3.0"
    }
Block {
BlockType		      Reference
Name		      "Compare\nTo Constant"
SID		                      "15"
Ports		                     [1, 1]
Position		      [125, 50, 155, 80]
ZOrder		      -5
LibraryVersion	      "1.271"
SourceBlock	       "simulink/Logic and Bit\nOperations/Compare\nTo Constant"
SourceType	        "Compare To Constant"
relop		          "<="
const		             "3.0"
OutDataTypeStr	      "boolean"
ZeroCross		      on
    }
  

Новая версия блока Compare to Constant имеет дополнительные параметры (OutDataTypeStr и ZeroCross) связанная с ним. В таких случаях функция преобразования должна гарантировать, что дополнительные параметры в InstanceData установлены так, чтобы старые библиотечные ссылки работали.

Этот пример показывает функцию преобразования для блока Compare to Constant, чтобы добавить OutDataTypestr параметр со значением uint8.

function [outData] = TransformationCompConstBlk(inData)
outData.NewBlockPath = ''; % No change in the library block path
outData.NewInstanceData = [];
instanceData = inData.InstanceData;
% Get the field type 'Name' from instanceData
[ParameterNames{1:length(instanceData)}] = instanceData.Name;

if (~ismember('OutDataTypeStr',ParameterNames))
    % OutDataTypeStr parameter is not present in old link. Add it and set value uint8
    instanceData(end+1).Name = 'OutDataTypeStr';
    instanceData(end).Value = 'uint8';
end

outData.NewInstanceData = 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 mask нет имени псевдонима. Чтобы добавить имя псевдонима для параметра mask, можно задать значение для Alias свойство параметра маски.

MaskObj.Alias = 'pa'

Можно использовать имя параметра маски или псевдоним для вызова функции параметра маски. Например, в этом случае можно либо использовать set_param(gcb, 'p1, '10)(имя параметра маски) set_param(gcb, 'pa, '10)(псевдоним параметра маски), чтобы задать значение для параметра Edit маски.

Похожие темы