exponenta event banner

Внедрение расширения RMI для поддержки пользовательского типа документа

Интерфейс управления требованиями (RMI) предоставляет инструменты для создания и проверки связей между элементами конструкции на основе модели и документами по требованиям. RMI обеспечивает встроенную поддержку для многих типов документов. Кроме того, можно внедрить пользовательские расширения типов ссылок, чтобы включить связь с другими типами документов. Этот пример иллюстрирует реализацию расширения RMI для связи с презентациями Microsoft PowerPoint.

Файлы для использования с этим примером

Для целей данного примера учебного пособия необходимо связать объекты в slvnvdemo_powerwindowController.slx модель с слайдами в powerwindowController.pptx Презентация PowerPoint. Открытие модели Simulink slvnvdemo_powerwindowController.slx.

open_system('slvnvdemo_powerwindowController');

Настройка диспетчера требований для работы со ссылками

  1. На вкладке Приложения откройте Диспетчер требований.

  2. На вкладке «Требования» выберите «Компоновка» > «Обозреватель требований».

  3. В браузере требований в раскрывающемся меню «Вид» выберите «Связи».

  4. В этом примере вы будете работать исключительно на вкладке Требования (Requirements), а все ссылки на кнопки панели инструментов находятся на этой вкладке.

Если в какой-либо момент времени в этом примере изменить выбор на «Требования» в выпадающем меню «Вид» в браузере «Требования», будут изменены кнопки, которые вы можете видеть, и вы не сможете правильно следовать инструкциям без возврата к разделу «Ссылки».

Внешнее хранение ссылок

В slvnvdemo_powerwindowController настройте параметры для внешнего хранения связей. На вкладке Требования выберите Параметры связи > Хранилище связей по умолчанию. Откроется диалоговое окно «Параметры требований». В разделе Режим хранения по умолчанию для данных отслеживания выберите Сохранить внешне (в отдельном файле * .slmx). Либо проанализируйте следующий код.

rmipref('StoreDataExternally', true);

Установленные файлы определений типов связей

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

В этом учебном пособии будет использовано определение пользовательского типа связи, созданное с нуля. Для получения дополнительной информации об API расширения Custom Link Type см. linktype_TEMPLATE.m оценивая следующее:

edit([matlabroot,'/toolbox/slrequirements/linktype_examples/linktype_TEMPLATE.m'])

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

edit([matlabroot,'/toolbox/slrequirements/linktype_examples/linktype_rmi_text.m'])

Можно также обратиться к более расширенному типу ссылки на книгу Microsoft Excel:

edit([matlabroot,'/toolbox/slrequirements/linktype_examples/linktype_rmi_excel.m'])

Создание и регистрация файла типа упорного канала

Файл rmidemo_pp_linktype.m в текущей рабочей папке содержится информация о типе ссылки для RMI для работы с файлами Microsoft PowerPoint. Зарегистрируйте тип канала в RMI, оценив следующее.

rmi('register', 'rmidemo_pp_linktype')

Это предписывает RMI распознавать расширения имен файлов .ppt и .pptx в качестве поддерживаемых файлов и для использования методов, определенных здесь для функциональности RMI.

Создание первой связи

  • Щелкните правой кнопкой мыши фон slvnvdemo_powerwindowController пример модели. В контекстном меню выберите Требования на этом уровне > Открыть диалоговое окно исходящих ссылок... для открытия диалогового окна «Исходящие связи».

  • Щелкните Создать, чтобы создать новую ссылку.

  • Разверните раскрывающийся список Тип документа. Выберите Microsoft PowerPoint в нижней части списка.

  • Используйте кнопку «Обзор» для поиска powerwindowController.pptx.

  • Введите метку «Описание», например «Пример представления».

  • Нажмите кнопку ОК, чтобы сохранить новую связь и закрыть диалоговое окно.

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

firstReq = rmi('createempty');
firstReq.reqsys = 'rmidemo_pp_linktype';
firstReq.doc = 'powerwindowController.pptx';
firstReq.description = 'Example presentation';
rmi('set', 'slvnvdemo_powerwindowController', firstReq);

Переход к документу

Навигация к документу PowerPoint обеспечивается функциями в rmidemo_pp_linktype.m Файл. Реализация этого и всех других методов требует подробных знаний API, доступных в приложении, которое управляет документами требований. Для этого примера Microsoft PowerPoint будет использоваться COM API. Вы будете использовать actxserver в MATLAB для создания соединения с приложением PowerPoint. Затем вы будете использовать такие вызовы, как Application.Presentations.Open(FILENAME) для управления приложением PowerPoint через rmidemo_pp_linktype методы. Сведения о том, какие объекты и методы PowerPoint доступны через COM API, см. на справочных страницах Microsoft для разработчиков.

rmidemo_pp_linktype.m файл содержит функции для поиска правильного .pptx файл.

Вернуться к модели Simulink для slvnvdemo_powerwindowController. Щелкните правой кнопкой мыши фон диаграммы Simulink и снова выберите в контекстном меню пункт «Требования на этом уровне». Обратите внимание на новый ярлык навигации в верхней части подменю. Если щелкнуть этот новый ярлык, MATLAB откроет файл PowerPoint.

Перейти к ссылке можно так же, как и раньше, или, оценив следующее: rmi('view','slvnvdemo_powerwindowController', 1)

Внедрение навигации к заданному номеру слайда

Предположим, что вы хотите связать Truth Table блок, который подключается к driver вход control блок подсистемы к соответствующему слайду номер 5 в презентации PowerPoint. Перейдите к Truth Table блокировать или вычислять следующий код.

rmidemo_callback('locate','slvnvdemo_powerwindowController/Truth Table')
  • Щелкните правой кнопкой мыши блок, выберите "Требования" > "Открыть диалоговое окно" Исходящие связи "... для открытия диалогового окна «Исходящие связи».

  • Щелкните Создать, чтобы создать новую ссылку.

  • Укажите тип документа и имя файла, как было ранее.

  • Введите драйвер в поле Описание.

  • Введите 5 в поле «Местоположение/Идентификатор».

  • Нажмите кнопку ОК, чтобы сохранить новую ссылку.

Если перейти по этой ссылке из диаграммы Simulink, документ откроется, как и раньше, но теперь он будет прокручиваться до пятого слайда. Помощник goToSlide() вместе с кодом в NavigateFcn() откройте соответствующий слайд.

function goToSlide(hDoc, slideNum)
  disp(['Opening slide #' num2str(slideNum)]);
  hDoc.Slides.Item(slideNum).Select;
end

Перейдите к ссылке, выбрав Truth Table блок, щелкните правой кнопкой мыши и выберите «Требования > 1». «Вход драйвера». Окно презентации PowerPoint должно перейти к пятому слайду.

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

secondReq = rmi('createempty');
secondReq.reqsys = 'rmidemo_pp_linktype';
secondReq.doc = 'powerwindowController.pptx';
secondReq.description = 'Driver input';
secondReq.id = '#5';
rmi('set', 'slvnvdemo_powerwindowController/Truth Table', secondReq);

Перейти к ссылке можно так же, как и раньше, или, оценив следующее: rmi('view','slvnvdemo_powerwindowController/Truth Table', 1)

Связывание и навигация с идентификатором слайда

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

Теперь все остальные слайды сдвигаются вниз на один. Навигация из входных данных драйвера Truth Table блок выведет неправильный слайд. Необходимо использовать другой тип местоположения, кроме Page/Item number.

  • Выберите то же самое Truth Table блок, который подключается к driver вход control подсистема. Следующий код переходит к Truth Table блок.

rmidemo_callback('locate','slvnvdemo_powerwindowController/Truth Table')
  • Щелкните правой кнопкой мыши блок, выберите "Требования" > "Открыть диалоговое окно" Исходящие связи "... для открытия диалогового окна «Исходящие связи».

  • Щелкните Создать, чтобы создать новую ссылку.

  • Выбрать Named Item из выпадающего списка Местоположение (Тип/Идентификатор).

  • Войти 260 в поле «Местоположение».

  • Нажмите кнопку ОК, чтобы сохранить измененную ссылку.

«260» является постоянным идентификатором для Driver Input слайд (подробнее об этом ниже).

Теперь, после этого изменения, навигация из Driver Input Truth Table блок выведет правильный слайд даже после изменения номера заказа.

К сожалению, в пользовательском интерфейсе приложения PowerPoint не отображаются идентификаторы слайдов. Чтобы узнать идентификатор пятого слайда, можно использовать COM API:

>> hApp = actxGetRunningServer('powerpoint.application');
>> hDoc = hApp.ActivePresentation;
>> hDoc.Slides.Item(5).SlideID 
ans =
  260

Более удобные для пользователя решения этой проблемы рассматриваются в разделах ниже.

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

betterLink = rmi('createempty');
betterLink.reqsys = 'rmidemo_pp_linktype';
betterLink.doc = 'powerwindowController.pptx';
betterLink.description = 'Driver input - better link';
betterLink.id = '@260';
rmi('set', 'slvnvdemo_powerwindowController/Truth Table', betterLink);

К месту назначения ссылки можно перейти так же, как и раньше, или оценить следующее: rmi('view','slvnvdemo_powerwindowController/Truth Table', 1)

Связывание с помощью вкладки «Индекс документа»

Как показано выше, можно создавать постоянные ссылки, которые не устаревают после того, как слайды в связанной презентации переупорядочены, но у вас нет простого доступа к постоянным значениям SlireID в PowerPoint. Одним из возможных решений является выбор требуемого слайда на вкладке «Индекс документа» диалогового окна «Исходящие ссылки». Содержимое вкладки Индекс документа управляется ContentsFcn() в файле определения типа линий. можно обеспечить реализацию этого метода, так что постоянное значение SleyID сохраняется RMI при создании ссылки, вместо изменчивого значения SleyNumber.

ContentsFcn() методы возвращают три массива:

  • labels используется для элементов списка индекса документа и быстрых ссылок на навигацию

  • depths для указания иерархического отношения перечисленных элементов (не используется в данном примере)

  • locations для использования для сохраненных уникальных идентификаторов

ContentsFcn() реализация основана на следующем вызове API PowerPoint для заполнения значений местоположения:

hDoc.Slides.Item(k).SlideID

Это обеспечивает постоянную навигацию даже после изменения порядка слайдов. Обратите внимание, что в качестве префикса для используется @ locations значения, указывающие на то, что в следующем номере вместо значения местоположения номера слайда (страницы) хранится значение местоположения именованного элемента.

Используйте вкладку «Индекс документа» в редакторе исходящих ссылок для создания ссылки.

  • Перейдите к Truth Table1 блок, который подключается к passenger вход control блок подсистемы. Следующий код переходит к Truth Table1 блок.

rmidemo_callback('locate','slvnvdemo_powerwindowController/Truth Table1')
  • Щелкните правой кнопкой мыши блок, выберите "Требования" > "Открыть диалоговое окно" Исходящие связи "... для открытия диалогового окна «Исходящие связи».

  • Щелкните Создать, чтобы создать новую ссылку.

  • Определить Microsoft PowerPoint в качестве типа документа.

  • Определить powerwindowController.pptx в качестве документа в меню «Обзор».

  • Оставьте поле Description (Описание).

  • Вместо указания местоположения вручную перейдите на вкладку «Индекс документа», найдите строку, соответствующую слайду «Пассажирские вводы», и дважды щелкните строку.

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

  • Нажмите кнопку ОК, чтобы сохранить новую ссылку.

Перейдите к ссылке, щелкнув правой кнопкой мыши значок Truth Table1 блок и выбор Требования > 1. «Пассажирский ввод состоит из вектора с тремя элементами в powerwindowController.pptx». Эта ссылка должна работать правильно даже после того, как слайды сдвинуты или переупорядочены.

Можно также создать ссылку путем анализа следующего кода. Связь ID создается так же, как в предыдущем разделе, где установлен постоянный идентификатор. Этот код сначала заполняет информацию о назначении канала, а затем использует rmi для создания связей.

indexLink = rmi('createempty');
indexLink.reqsys = 'rmidemo_pp_linktype';
indexLink.doc = 'powerwindowController.pptx';
indexLink.description = 'Passenger input - linked via Index tab';
indexLink.id = '@259';
rmi('set', 'slvnvdemo_powerwindowController/Truth Table1', indexLink);

Перейдите к ссылке таким же образом, как и выше, или оцените следующее: rmi('view','slvnvdemo_powerwindowController/Truth Table1', 1)

Ссылка на текущий слайд в PowerPoint

Еще более эффективным способом поддержки надежных постоянных ссылок является использование ярлыков связывания выбора. API RMI позволяет определить SelectionLinkFcn() для связи с текущим объектом в текущем документе. На следующем шаге нашего учебного пособия вы автоматизируете ссылки на текущий слайд в открытой презентации PowerPoint.

В разделе «Требования» контекстных меню отображается ярлык для связи с текущим слайдом в PowerPoint.

  • В копии примера презентации PowerPoint перейдите к слайду 6 под названием Top or bottom of the window frame is reached.

  • На схеме Simulink щелкните правой кнопкой мыши значок endstop блок.

rmidemo_callback('locate','slvnvdemo_powerwindowController/endstop')
  • Щелкните правой кнопкой мыши блок и выберите в контекстном меню «Требования» > «Ссылка на слайд» в PowerPoint

RMI автоматически создает ссылку на SlireID, соответствующую текущему местоположению в активной презентации. RMI попытается использовать текст заголовка целевого слайда в качестве метки для новой ссылки.

Для перехода к ссылке щелкните правой кнопкой мыши значок endstop снова заблокировать и выбрать «Требования > 1». «Верхняя или нижняя часть оконной рамы rea».... Программа PowerPoint должна открыть правильный слайд.

Можно также создать ссылку с помощью следующего кода. Связь ID создается так же, как в предыдущем разделе, где установлен постоянный идентификатор. Этот код сначала заполняет информацию о назначении канала, а затем использует rmi для создания связей.

selectionLink = rmi('createempty');
selectionLink.reqsys = 'rmidemo_pp_linktype';
selectionLink.doc = 'powerwindowController.pptx';
selectionLink.description = 'Endstop signal - selection link';
selectionLink.id = '@261';
rmi('set', 'slvnvdemo_powerwindowController/endstop', selectionLink);

Можно перейти к ссылке так же, как и выше, или оценить следующее: rmi('view','slvnvdemo_powerwindowController/endstop', 1)

Создание двунаправленных связей

В качестве последнего шага этого учебного пособия вы расширите SelectionLinkFcn() для дополнительной вставки гиперссылки на текущем слайде для перехода из PowerPoint к связанному объекту в Simulink.

Тип ссылки PowerPoint позволяет автоматически вставлять элементы управления навигацией Simulink в связанные слайды при использовании ссылки на слайд в ярлыке PowerPoint в контекстном меню объектов Simulink. Чтобы активировать этот элемент, в модели Simulink выберите вкладку Требования (Requirements). Затем выберите Параметры связи > Параметры связи. Кроме того, в этом диалоговом окне можно открыть анализ следующего кода: rmi_settings_dlg.

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

origMcState = rmipref('UnsecureHttpRequests', true);
origTwoWayPref = rmipref('BiDirectionalLinking', true);

Начиная с R2019a, встроенная служба HTTP MATLAB активируется на защищенном порту 31515, но не на небезопасном порту 31415. Поскольку наши URL-адреса навигации не могут использовать безопасный порт без установки сертификата, необходимо также установить флажок Включить внешнее подключение при запуске MATLAB в нижней части этой вкладки.

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

  • Перейти к слайду 7 в powerwindowController.pptx (сделать его активным слайдом).

  • Перейдите к obstacle блок в модели Simulink.

rmidemo_callback('locate','slvnvdemo_powerwindowController/obstacle')
  • Щелкните правой кнопкой мыши блок и выберите в контекстном меню «Требования» > «Связать со слайдом» в PowerPoint.

Теперь в левом верхнем углу слайда будет вставлен новый значок RMI.

Следуйте инструкциям Microsoft PowerPoint, чтобы перейти по ссылке, и она должна выделить соответствующий блок в slvnvdemo_powerwindowController модель.

Импорт элементов из документа PowerPoint в требования Simulink

Продукт Simulink Requirements включает возможность импорта документов, если определение пользовательского типа линий включает все необходимые части. Использование файла адаптации rmidemo_pp_linktype.m и slreq.import() API, вы можете автоматически извлекать содержимое как объекты типа slreq.Reference или slreq.Requirementи сохраните в .slreqx файл. См. slreq.import для получения дополнительной информации.

Поскольку наше пользовательское определение типа документа не обеспечивает реализацию для HtmlViewFcn(), будет работать только импорт обычного текста.

Убедитесь, что документ открыт в PowerPoint перед запуском slreq.import() команда. Импортер отобразит количество импортированных товаров, что для нашего случая соответствует количеству слайдов. Использовать slreq.editor для вызова пользовательского интерфейса редактора требований Simulink. Разверните узел документа для просмотра импортированных элементов. Нажмите кнопку «Показать в документе», чтобы перейти от импортированной ссылки к исходному элементу в исходном документе.

Кроме того, выполните следующие действия для импорта требований из командной строки.

  • Убедитесь, что powerwindowController.pptx открыт перед импортом:

rmi('view','slvnvdemo_powerwindowController', 1)
  • Импортируйте требования с помощью:

slreq.import('rmidemo_pp_linktype', 'AsReference', true, 'RichText', false)
  • Просмотр требований в редакторе требований с помощью slreq.editor

Куда идти отсюда

В отличие от ссылки на слайд в целом, может потребоваться изменить SelectionLinkFcn() для ссылки на определенный текст или рисунок на слайде. Сведения о настройке привязки и внешнего вида элементов управления навигацией Simulink см. на страницах справочных материалов Microsoft для разработчиков. Например, вместо вставки значка с гиперссылкой можно прикрепить гиперссылку к выбранному тексту на текущем слайде.

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

 linkType.LocDelimiters = '#@?';

Затем необходимо предоставить дополнительную case для switch(locationStr(1)) в NavigateFcn() способ. Передача findText() помощник запрашивает объект презентации PowerPoint для всех элементов TextFrame во всех слайдах и выбирает элемент с соответствующим текстом.

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

  • IsValidDocFcn()

  • IsValidIdFcn()

  • IsValidDescFcn()

Чтобы настроить способ отображения ссылок в созданных отчетах, можно использовать:

  • CreateURLFcn()

  • UrlLabelFcn()

  • DocDateFcn()

  • DetailsFcn()

  • HtmlViewFcn()

Если приложение не основано на файлах, но использует собственную базу данных для хранения документов требований, необходимо отметить тип ссылки как «не файл»:

linkType.IsFile = 0;

и обеспечить специализированное внедрение для BrowseFcn(). Эта функция вызывается при нажатии кнопки «Обзор» в диалоговом окне «Исходящие связи».

rmi('edit','slvnvdemo_powerwindowController');

Очистка

Команды очистки. Нерегистры rmidemo_pp_linktypeочищает открытые наборы требований без сохранения изменений и закрывает открытые модели без сохранения изменений.

rmi('unregister', 'rmidemo_pp_linktype');
slreq.clear();
bdclose all;

Авторское право 2014-2018 The MathWorks, Inc