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

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

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

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

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

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

Примечание

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

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

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

  3. На вкладке Modeling нажмите 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 = 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.

Похожие темы