Передача таблиц

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

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

Составьте передающую таблицу

Примечание

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

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

  2. Нажмите Diagram> Unlock Library. Библиотека теперь разблокирована для редактирования.

  3. Нажмите File> Library Properties> Library Properties. Диалоговое окно Library Properties открывается.

  4. Кликните по вкладке Forwarding Table.

  5. Нажмите кнопку (Add New Entry). Новая строка добавляется в Передающей Таблице.

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

  7. В столбце Version можно принять решение задать номер версии для блока библиотеки.

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

    Примечание

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

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

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

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

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

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

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

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

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

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

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

  • Блок path для 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.

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

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

function outData = TransformationFcn(inData)

где:

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

  • outData является структурой с полями NewInstanceData и NewBlockPath.

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

Рассмотрите блок Compare to Constant в Библиотеке Simulink®. Необходимо создать версии этого блока, не меняя имя и блок path, но добавить параметры в более новый блок библиотеки.

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

Старая версияNewVersion
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= 
% 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.

Похожие темы