Requirements Management Interface (RMI) предоставляет инструменты для создания и анализа ссылок между элементами модельно-ориентированного проектирования и документами требований. RMI обеспечивает встроенную поддержку для многих типов документа. Кроме того, можно реализовать пользовательские расширения типа «link», чтобы разрешить связывание с другими типами документа. Этот пример иллюстрирует реализацию расширения RMI для связи с презентациями Microsoft PowerPoint.
В целях этого примера руководства вы будете связывать объекты в slvnvdemo_powerwindowController.slx
модель со слайдами в powerwindowController.pptx
Презентация PowerPoint. Откройте модель Simulink slvnvdemo_powerwindowController.slx
.
open_system('slvnvdemo_powerwindowController');
На вкладке Приложения откройте Диспетчер требований.
На вкладке «Требования» убедитесь, что выбрано «Размещение» > «Браузер требований».
В браузере требований в раскрывающемся меню View выберите Ссылки.
В этом примере вы работаете исключительно на вкладке Requirements, и все ссылки на кнопки панели инструментов находятся на этой вкладке.
Если в течение этого примера в раскрывающемся меню «Вид» браузера требований в любой момент можно изменить значение параметра «Требования», это приведет к изменению кнопок, которые можно увидеть, и, возможно, вы не сможете правильно следовать инструкциям без возврата на «Ссылки».
В slvnvdemo_powerwindowController
настройте параметры для внешнего хранения ссылок. На вкладке Requirements выберите Link Settings > Default Link Storage. Откроется диалоговое окно «Параметры требований». В заголовке Режим хранения по умолчанию для данных трассируемости выберите Сохранить внешне (в отдельном файле * .slmx). Кроме того, оцените следующий код.
rmipref('StoreDataExternally', true);
В зависимости от приложения, используемого для документов пользовательского типа, можно реализовать базовую поддержку, включая создание ссылок через диалоговое окно «Исходящие ссылки» и навигацию по ссылкам через ярлыки контекстного меню, или можно принять решение реализовать более насыщенную функциями поддержку с привязкой выбора через ярлыки контекстного меню, проверку согласованности и т.д.
В этом руководстве вы будете использовать пользовательское определение типа ссылки, которое было создано с нуля. Для получения дополнительной информации о API-интерфейсе типа пользовательской ссылки см. linktype_TEMPLATE.m
путем оценки следующего:
edit([matlabroot,'/toolbox/slrequirements/linktype_examples/linktype_TEMPLATE.m'])
Можно также просмотреть фактические файлы определения типов ссылок, используемые выпущенным продуктом. Для примера см. минимальный тип ссылки Текстовый файл путем оценки следующего:
edit([matlabroot,'/toolbox/slrequirements/linktype_examples/linktype_rmi_text.m'])
Можно также обратиться к более расширенному типу ссылки Microsoft Excel Workbook:
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
пример модели. В контекстном меню выберите Requirements at This Level > Open Outgoing Links Dialog... для вызова диалогового окна «Исходящие ссылки».
Нажмите кнопку Создать, чтобы создать новую ссылку.
Разверните раскрывающийся список Тип документа. Выберите Microsoft PowerPoint в нижней части списка.
Используйте кнопку Browse, чтобы найти 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, см. страницы Справочника разработчиков Майкрософт.
The 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')
Щелкните правой кнопкой мыши блок, выберите Requirements > Open Outgoing Links Dialog... для вызова диалогового окна «Исходящие ссылки».
Нажмите кнопку Создать, чтобы создать новую ссылку.
Укажите тип документа и имя файла как и прежде.
Введите вход в поле Description.
Введите 5 в поле Location/Identifier входа.
Нажмите кнопку ОК, чтобы сохранить новую ссылку.
Если перейти по этой ссылке из схемы Simulink, документ откроется как и прежде, но теперь он перейдет вниз на 5-й слайд. Вспомогательный goToSlide()
метод наряду с кодом в NavigateFcn()
откройте правильный слайд.
function goToSlide(hDoc, slideNum) disp(['Opening slide #' num2str(slideNum)]); hDoc.Slides.Item(slideNum).Select; end
Перейдите к ссылке, выбрав Truth Table
блок, щелчок правой кнопкой мыши и выбор Requirements > 1. «Драйвер входа». Окно презентации PowerPoint должно прокрутиться до 5-го слайда.
Кроме того, создайте ссылку путем оценки следующего кода. Этот код сначала заполняет информацию о месте назначения ссылки, затем использует 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')
Щелкните правой кнопкой мыши блок, выберите Requirements > Open Outgoing Links Dialog... для вызова диалогового окна «Исходящие ссылки».
Нажмите кнопку Создать, чтобы создать новую ссылку.
Выберите Named Item
из раскрывающегося списка Расположение (Тип/Идентификатор).
Введите 260
в поле Location input.
Нажмите кнопку ОК, чтобы сохранить измененную ссылку.
«260» является постоянным идентификатором для Driver Input
слайд (подробнее об этом ниже).
Теперь, после этого изменения, навигация из Вход Truth Table
блок поднимет правильный слайд, даже после изменения номера порядка.
К сожалению, в пользовательском интерфейсе приложения PowerPoint не видно идентификаторов слайдов. Чтобы узнать идентификатор 5-го слайда, можно использовать 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)
Как показано выше, можно создать постоянные ссылки, которые не становятся устаревшими после повторного упорядочения слайдов в связанной презентации, но у вас нет быстрого доступа к постоянным значениям SlideID в PowerPoint. Одним из возможных решений является выбор необходимого слайда на вкладке Индекс диалогового окна Outgoing Links. Содержимое вкладки Индекс контролируется ContentsFcn()
метод в файле определения типа linktype. можно обеспечить реализацию для этого метода таким образом, чтобы постоянное значение SlideID сохранялось в RMI при создании ссылки вместо изменчивого значения SlideNumber.
The ContentsFcn()
методы возвращают три массива:
labels
для использования для элементов списка индекса на документ и навигационных ярлыков
depths
для указания иерархической связи перечисленных элементов (не используется в этом примере)
locations
для использования для сохраненных уникальных идентификаторов
The ContentsFcn()
реализация опирается на следующий вызов PowerPoint API для заполнения значений местоположения:
hDoc.Slides.Item(k).SlideID
Это обеспечивает постоянство навигационной информации даже после изменения порядка слайдов. Обратите внимание, что вы используете @ как префикс для locations
значения, чтобы указать, что последующее число сохраняет значение местоположения именованного элемента вместо значения местоположения номера слайда (страницы).
Для создания ссылки используйте вкладку Индекс документа в редакторе исходящих ссылок.
Перейдите к Truth Table1
блок, который соединяется с passenger
вход control
блок подсистемы. Следующий код переходит к Truth Table1
блок.
rmidemo_callback('locate','slvnvdemo_powerwindowController/Truth Table1')
Щелкните правой кнопкой мыши блок, выберите Requirements > Open Outgoing Links Dialog... для вызова диалогового окна «Исходящие ссылки».
Нажмите кнопку Создать, чтобы создать новую ссылку.
Задайте Microsoft PowerPoint
как тип документа.
Задайте powerwindowController.pptx
как документ из меню Обзор.
Оставьте вход Description.
Вместо определения местоположения вручную перейдите на вкладку Индекс, найдите линию, которая соответствует ползунку Passenger Inputs, и дважды щелкните по линии.
Заметьте, что оставшиеся входные поля автоматически заполняются правильной информацией.
Нажмите кнопку ОК, чтобы сохранить новую ссылку.
Перейдите к ссылке, щелкнув правой кнопкой мыши по Truth Table1
блок и выбор Requirements > 1. «Passenger Input состоит из вектора с тремя элементами в 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)
Еще лучший способ поддержки устойчивейшие постояннейшие ссылки - это сочетания ярлыков Selection Linking. RMI API позволяет вам определять SelectionLinkFcn()
функция для связи с текущим объектом в текущем документе. На следующем шаге нашего руководства вы автоматизируете привязку к текущему слайду в текущей открытой презентации PowerPoint.
В разделе «Требования» контекстных меню отображается ярлык для связывания с текущим слайдом в PowerPoint.
В вашей копии примера презентации PowerPoint перейдите к слайду 6 под названием Top or bottom of the window frame is reached
.
В схеме Simulink щелкните правой кнопкой мыши по endstop
блок.
rmidemo_callback('locate','slvnvdemo_powerwindowController/endstop')
Щелкните правой кнопкой мыши блок и выберите в контекстном меню Requirements > Link to Slide в PowerPoint
RMI автоматически создает ссылку на SlideID, которая соответствует текущему местоположению в активной презентации. RMI попытается использовать текст заголовка целевого слайда в качестве метки для новой ссылки.
Чтобы перейти к ссылке, щелкните правой кнопкой мыши по endstop
снова блокируйте и выберите Requirements > 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. Затем выберите Ссылку Settings > Linking Опций. Кроме того, оценка следующего кода откроет это диалоговое окно: 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
модель.
Продукт Simulink Requirements включает возможность импорта документов, если ваше определение Custom Linktype включает все необходимые части. Использование файла индивидуальной настройки rmidemo_pp_linktype.m
и slreq.import()
API, вы можете автоматически получение по запросу-в содержимое как объекты типа slreq.Reference
или slreq.Requirement
, и сохранить в .slreqx
файл. См. slreq.import
для получения дополнительной информации.
Поскольку наше пользовательское определение типа документа не обеспечивает реализацию для HtmlViewFcn()
будет работать только обычный импорт.
Убедитесь, что документ открыт в PowerPoint, прежде чем запускать slreq.import()
команда. Импортер отобразит количество импортированных элементов, что для нашего случая соответствует количеству слайдов. Использование slreq.editor
команда для запуска пользовательского интерфейса редактора Simulink Requirements. Разверните узел документа, чтобы просмотреть импортированные элементы. Нажмите кнопку «Показать документ» для перехода от импортированной ссылки к исходному элементу в исходном документе.
Также выполните следующие действия, чтобы импортировать требования из командной строки.
Убедитесь, что powerwindowController.pptx
документ открыт перед импортом:
rmi('view','slvnvdemo_powerwindowController', 1)
Импортируйте требования с помощью:
slreq.import('rmidemo_pp_linktype', 'AsReference', true, 'RichText', false)
Просмотрите требования в редакторе требований с slreq.editor
В отличие от связывания со слайдом в целом, можно захотеть изменить SelectionLinkFcn()
Реализация для ссылки на определенный текст или изображение на слайде. Сведения о том, как настроить привязку и внешний вид элементов управления навигацией Simulink, см. на страницах Справочника разработчиков Майкрософт. Например, вместо вставки значка с гиперссылкой можно присоединить гиперссылку к выбранному тексту на текущем слайде.
Если необходимо связать с текстовым шаблоном Search, независимо от того, какой слайд включает сохраненный текст, можно расширить объявление поддерживаемых типов местоположения, включив в? символ:
linkType.LocDelimiters = '#@?';
Затем необходимо предоставить дополнительную case
для switch(locationStr(1))
в NavigateFcn()
способ. Соответствующий findText()
helper запрашивает объект PowerPoint Presentation для всех элементов TextFrame на всех слайдах и выбирает элемент с соответствующим текстом.
Шаблон типа ссылка поддерживает другие методы, в зависимости от ваших потребностей. Для примера, чтобы пользовательские ссылки были охвачены проверкой согласованности требований, рассмотрите реализацию следующих методов:
IsValidDocFcn()
IsValidIdFcn()
IsValidDescFcn()
Чтобы настроить отображение ссылок в сгенерированных отчетах, можно использовать:
CreateURLFcn()
UrlLabelFcn()
DocDateFcn()
DetailsFcn()
HtmlViewFcn()
Если ваше приложение не основано на файлах, но использует проприетарную базу данных для хранения документов с требованиями, необходимо пометить тип ссылки как «не файл»:
linkType.IsFile = 0;
и обеспечить специализированную реализацию для BrowseFcn()
. Это функция, которая вызывается при нажатии кнопки Browse в диалоговом окне Outgoing Links.
rmi('edit','slvnvdemo_powerwindowController');
Команды очистки. Отменить регистрацию rmidemo_pp_linktype
, очищает открытые наборы требований без сохранения изменений и закрывает открытые модели без сохранения изменений.
rmi('unregister', 'rmidemo_pp_linktype'); slreq.clear(); bdclose all;
Копирайт 2014-2018 The MathWorks, Inc