exponenta event banner

Пересылка таблиц

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

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

  • При закрытии и повторном открытии модели.

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

Создание таблицы пересылки

Примечание

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

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

  2. В окне Библиотека (Library) на вкладке Библиотека (Library) щелкните Заблокированная библиотека (Locked Library). Теперь библиотека разблокирована для редактирования.

  3. На вкладке Моделирование (Modeling) щелкните Свойства библиотеки (Library Properties). Откроется диалоговое окно Свойства библиотеки (Library Properties).

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

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

  6. Укажите значения в столбцах «Старый путь блока» и «Новый путь блока». Чтобы получить путь блока, выберите блок в модели и щелкните значок.

  7. В столбце «Версия» можно указать номер версии блока библиотеки.

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

    Примечание

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

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

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

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

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

    Если функция преобразования не указана, при сохранении библиотеки в столбце «Функция преобразования» отображается значение «Без преобразования».

  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 в пути, а затем указать функцию в столбце Функция преобразования таблицы переадресации.

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

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

function outData = TransformationFcn(inData)

где:

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

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

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

Рассмотрим блок «Сравнить с константой» в библиотеке Simulink ®. Необходимо создать версии этого блока без изменения имени и пути блока, но добавить параметры в новый блок библиотеки.

В таблице показано различие параметров в двух версиях блока «Сравнить с константой».

Старая версияНовая версия
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 устанавливаются таким образом, чтобы старые ссылки библиотеки работали.

В этом примере показана функция преобразования блока «Сравнить с константой» для добавления 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: 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: ''

Обратите внимание, что у параметра «Редактировать маску» нет псевдонима. Чтобы добавить псевдоним для параметра маски, можно задать значение Alias свойство параметра маски.

MaskObj.Alias = 'pa'

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

Связанные темы