В этом примере вы реализуете тип настраиваемой ссылки к гипотетическому типу документа, текстовому файлу с дополнительным .abc
. В рамках этого документа элементы требования идентифицированы со специальной текстовой строкой, Requirement::
, сопровождаемый одиночным пробелом и затем элементом требования в кавычках ("
).
Вы создадите индекс документа, перечисляющий все элементы требования. При навигации от модели Simulink® до документа требований документ открывается в Редакторе MATLAB® линии требования, чтобы вы хотели.
Создать тип требования настраиваемой ссылки:
Запишите функцию, которая реализует тип настраиваемой ссылки, и сохраните его на пути MATLAB.
В данном примере файлом является rmicustabcinterface.m
, содержа функцию, rmicustabcinterface
, это реализует файлы ABC, поставляющиеся с вашей установкой.
Чтобы просмотреть эту функцию, в посдказке MATLAB, введите:
edit rmicustabcinterface
Файл rmicustabcinterface.m
открывается в редакторе MATLAB. Содержимое файла:
function linkType = rmicustabcinterface %RMICUSTABCINTERFACE - Example custom requirement link type % % This file implements a requirements link type that maps % to "ABC" files. % You can use this link type to map a line or item within an ABC % file to a Simulink or Stateflow object. % % You must register a custom requirement link type before using it. % Once registered, the link type will be reloaded in subsequent % sessions until you unregister it. The following commands % perform registration and registration removal. % % Register command: >> rmi register rmicustabcinterface % Unregister command: >> rmi unregister rmicustabcinterface % % There is an example document of this link type contained in the % requirement demo directory to determine the path to the document % invoke: % % >> which demo_req_1.abc % Copyright 1984-2010 The MathWorks, Inc. % Create a default (blank) requirement link type linkType = ReqMgr.LinkType; linkType.Registration = mfilename; % Label describing this link type linkType.Label = 'ABC file (for demonstration)'; % File information linkType.IsFile = 1; linkType.Extensions = {'.abc'}; % Location delimiters linkType.LocDelimiters = '>@'; linkType.Version = ''; % not required % Uncomment the functions that are implemented below linkType.NavigateFcn = @NavigateFcn; linkType.ContentsFcn = @ContentsFcn; function NavigateFcn(filename,locationStr) if ~isempty(locationStr) findId=0; switch(locationStr(1)) case '>' lineNum = str2num(locationStr(2:end)); openFileToLine(filename, lineNum); case '@' openFileToItem(filename,locationStr(2:end)); otherwise openFileToLine(filename, 1); end end function openFileToLine(fileName, lineNum) if lineNum > 0 if matlab.desktop.editor.isEditorAvailable matlab.desktop.editor.openAndGoToLine(fileName, lineNum); end else edit(fileName); end function openFileToItem(fileName, itemName) reqStr = ['Requirement:: "' itemName '"']; lineNum = 0; fid = fopen(fileName); i = 1; while lineNum == 0 lineStr = fgetl(fid); if ~isempty(strfind(lineStr, reqStr)) lineNum = i; end; if ~ischar(lineStr), break, end; i = i + 1; end; fclose(fid); openFileToLine(fileName, lineNum); function [labels, depths, locations] = ContentsFcn(filePath) % Read the entire file into a variable fid = fopen(filePath,'r'); contents = char(fread(fid)'); fclose(fid); % Find all the requirement items fList1 = regexpi(contents,'\nRequirement:: "(.*?)"','tokens'); % Combine and sort the list items = [fList1{:}]'; items = sort(items); items = strcat('@',items); if (~iscell(items) && length(items)>0) locations = {items}; labels = {items}; else locations = [items]; labels = [items]; end depths = [];
Чтобы указать настраиваемую ссылку вводят ABC, вводят следующую команду MATLAB:
rmi register rmicustabcinterface
Тип файла ABC появляется на Исходящем Редакторе Ссылок выпадающий список типов документа.
Создайте текстовый файл с .abc
расширение, содержащее несколько элементов требования, отмечено Requirement::
строка.
Для вашего удобства файл в качестве примера поставляется с вашей установкой. Файлом в качестве примера является
. matlabroot
\toolbox\slvnv\rmidemos\demo_req_1.abcdemo_req_1.abc
содержит следующее содержимое:
Requirement:: "Altitude Climb Control" Altitude climb control is entered whenever: |Actual Altitude- Desired Altitude | > 1500 Units: Actual Altitude - feet Desired Altitude - feet Description: When the autopilot is in altitude climb control mode, the controller maintains a constant user-selectable target climb rate. The user-selectable climb rate is always a positive number if the current altitude is above the target altitude. The actual target climb rate is the negative of the user setting. End of "Altitude Climb Control"> Requirement:: "Altitude Hold" Altitude hold mode is entered whenever: |Actual Altitude- Desired Altitude | < 30*Sample Period*(Pilot Climb Rate / 60) Units: Actual Altitude - feet Desired Altitude - feet Sample Period - seconds Pilot Climb Rate - feet/minute Description: The transition from climb mode to altitude hold is based on a threshold that is proportional to the Pilot Climb Rate. At higher climb rates the transition occurs sooner to prevent excessive overshoot. End of "Altitude Hold" Requirement:: "Autopilot Disable" Altitude hold control and altitude climb control are disabled when autopilot enable is false. Description: Both control modes of the autopilot can be disabled with a pilot setting. ENd of "Autopilot Disable" Requirement:: "Glide Slope Armed" Glide Slope Control is armed when Glide Slope Enable and Glide Slope Signal are both true. Units: Glide Slope Enable - Logical Glide Slope Signal - Logical Description: ILS Glide Slope Control of altitude is only enabled when the pilot has enabled this mode and the Glide Slope Signal is true. This indicates the Glide Slope broadcast signal has been validated by the on board receiver. End of "Glide Slope Armed" Requirement:: "Glide Slope Coupled" Glide Slope control becomes coupled when the control is armed and (Glide Slope Angle Error > 0) and Distance < 10000 Units: Glide Slope Angle Error - Logical Distance - feet Description: When the autopilot is in altitude climb control mode the controller maintains a constant user selectable target climb rate. The user-selectable climb rate is always a positive number if the current altitude is above the target altitude the actual target climb rate is the negative of the user setting. End of "Glide Slope Coupled"
Откройте следующую модель в качестве примера:
Щелкните правой кнопкой по Струйной подсистеме Управления Реакцией и выберите Requirements> Open Outgoing Links dialog.
Исходящий Редактор Ссылок открывается.
Нажмите New, чтобы добавить новую ссылку требования. Document type выпадающий список теперь содержит ABC file (for demonstration)
опция.
Установите Document type на ABC file (for demonstration)
и просмотрите к
файл. Браузер показывает только файлы с matlabroot
\toolbox\slvnv\rmidemos\demo_req_1.abc.abc
расширение.
Чтобы задать конкретное местоположение в документе требований, используйте поле Location.
В этом примере, rmicustabcinterface
функция задает два типа разделителей местоположения для ваших требований:
>
— Номер строки в файле
@
— Названный элемент, такой как закладка, функция или привязка к HTML
rmi
страница с описанием описывает другие типы разделителей местоположения требований.
Выпадающий список Location содержит эти два типа разделителей местоположения каждый раз, когда вы устанавливаете Document type на ABC file (for demonstration)
.
Выберите Line number. Введите номер 26
, который соответствует номеру строки для Altitude Hold
требование в demo_req_1.abc
.
В поле Description введите Altitude Hold
, идентифицировать требование по наименованию.
Нажмите Apply.
Проверьте что Altitude Hold
требование соединяется со Струйной подсистемой Управления Реакцией. Щелкните правой кнопкой по подсистеме и выберите Requirements> 1. “Altitude Hold”.
Индекс документа является списком всех требований в данном документе. Чтобы создать индекс документа, MATLAB использует функции файлового ввода-вывода, чтобы считать содержимое документа требований в переменную MATLAB. RMI извлекает список элементов требования.
Документ требований в качестве примера, demo_req_1.abc
, задает четыре требования с помощью строки Requirement::
. Сгенерировать индекс документа для этого файла ABC, ContentsFcn
функция в rmicustabcinterface.m
извлекает имена требований и вставляет @
перед каждым именем.
Для demo_req_1.abc
файл, в диалоговом окне Outgoing Links: Reaction Jet Control, кликает по вкладке Document Index. ContentsFcn
функция генерирует индекс документа автоматически.
Реализовывать тип настраиваемой ссылки:
Создайте файл функции MATLAB на основе шаблона типа настраиваемой ссылки, как описано в Функциях Типа Настраиваемой ссылки.
Настройте файл типа настраиваемой ссылки, чтобы задать свойства типа ссылки и пользовательские функции обратного вызова, требуемые для типа настраиваемой ссылки, как описано в Link Type Properties.
Укажите тип настраиваемой ссылки с помощью rmi
команда 'register'
опция, как описано в Регистрации Типа Настраиваемой ссылки.
В дополнение к соединению со встроенными типами документов требований можно указать пользовательские типы документа требований с Requirements Management Interface (RMI). Затем можно создать ссылки требования от модели до этих типов документов.
С типами настраиваемой ссылки вы можете:
Соединитесь с элементами требования в коммерческом программном обеспечении отслеживания требования
Соединитесь с внутренними системами баз данных
Соединитесь с типами документа, которые не поддерживает RMI
API типа настраиваемой ссылки позволяет вам задавать функции MATLAB, которые позволяют соединиться между вашей моделью Simulink и вашим пользовательским типом документа требований. Эти функции также включают новое создание ссылки и навигацию между моделью и документами.
Например, навигация включает открытие документа требований и нахождение записи конкретного требования. Когда вы щелкаете по своей настраиваемой ссылке в меню содержимого связанного объекта в модели, Simulink использует вашу функцию навигации типа настраиваемой ссылки, чтобы открыть документ и подсветить целевое требование на основе обеспеченной реализации. Функция навигации, которую вы реализуете, использует доступный API, чтобы связаться с вашим приложением устройства хранения данных требований.
Как правило, MATLAB запускает команду интерпретатора операционной системы или использует коммуникацию ActiveX® в отправлении запросов навигации к внешним приложениям.
В качестве альтернативы, если ваши требования хранятся как пользовательские варианты текста или файлов HTML, можно использовать встроенный редактор или веб-браузер, чтобы открыть документ требований.
Чтобы создать файл функции MATLAB, начните с шаблона типа настраиваемой ссылки, расположенного в:
matlabroot\toolbox\slrequirements\linktype_examples\linktype_TEMPLATE.m
Ваша функция типа настраиваемой ссылки:
Должен существовать на пути MATLAB с уникальной функцией и именем файла.
Не может потребовать входных параметров.
Должен возвратить один выходной аргумент, который является экземпляром класса типа ссылки требований.
Чтобы просмотреть подобные файлы для встроенных типов ссылки, смотрите следующие файлы в matlabroot
\toolbox\slrequirements\linktype_examples\
:
linktype_rmi_doors.m linktype_rmi_excel.m linktype_rmi_html.m linktype_rmi_text.m
Укажите свой тип настраиваемой ссылки путем передачи имени файла функции MATLAB к rmi
команда можно следующим образом:
rmi register mytargetfilename
Если вы указываете тип ссылки, это появляется в Исходящем Редакторе Ссылок как запись в Document type выпадающий список. Файл в вашей папке preference содержит список зарегистрированных типов ссылки, таким образом, тип настраиваемой ссылки загружается каждый раз, когда вы запускаете MATLAB.
Когда вы создаете ссылки с помощью типов настраиваемой ссылки, программное обеспечение сохраняет регистрационное имя и другие свойства ссылок, заданные в файле функции. Когда вы пытаетесь перейти к такой ссылке, RMI разрешает тип ссылки против зарегистрированного списка. Если программное обеспечение не может найти тип ссылки, вы видите сообщение об ошибке.
Можно удалить тип ссылки со следующей командой MATLAB:
rmi unregister mytargetfilename
После того, как вы реализуете типы настраиваемой ссылки для RMI, которые позволяют, вы, чтобы установить ссылки от Simulink возражаете против требований в своем приложении для управления требованиями (приложение RM), можно реализовать синхронизацию ссылок между приложением RM и Simulink с помощью функций Simulink Requirements™. Ссылки могут затем быть рассмотрены и управляемые в вашей среде приложения RM, в то время как внесенные изменения распространены к Simulink.
Вы сначала создаете суррогатные объекты в приложении RM, чтобы представлять предметы интереса Simulink. Вы затем автоматизируете процесс установления ссылок трассируемости между этими суррогатными объектами и другими элементами, сохраненными в приложении RM, чтобы совпадать со ссылками, которые существуют на стороне Simulink. После изменения или создания новых ассоциаций в приложении RM, можно распространить изменения назад в Simulink. Вы используете Simulink Requirements, чтобы реализовать синхронизацию ссылок для пользовательских документов требований. Однако эта функциональность зависит от API автоматизации и межпроцессного взаимодействия, доступных в вашем приложении RM. Вы используете следующие функции Simulink Requirements, чтобы реализовать синхронизацию ссылок между приложениями RM и Simulink.
Чтобы получить полный список объектов Simulink, которые могут быть рассмотрены для включения в суррогатный модуль:
[objHs, parentIdx, isSf, objSIDs] = rmi... ('getObjectsInModel', modelName);
Эта команда возвращается:
objHs
, полный список числовых указателей
objSIDs
, полный список соответствующих независимых от сеанса идентификаторов Simulink
isSf
, логический массив, который указывает, которому соответствуют положения списка, которому возражает Stateflow®
parentIdx
, массив индексов, который предоставляет информацию об иерархии модели
Когда создание суррогата возражает в вашем приложении RM, необходимо будет сохранить objSIDs
значения – не objHs
значения – потому что objHs
значения не являются персистентными между сеансами Simulink.
Чтобы получить имя объекта Simulink и информацию Типа, которую вы храните на стороне приложения RM:
[objName, objType] = rmi('getObjLabel', slObjectHandle);
Запрашивать ссылки для объекта Simulink, заданного или числовым указателем или SID:
linkInfo = rmi('getLinks', slObjectHandle) linkInfo = rmi('getLinks', sigBuildertHandle, m) % Signal Builder group "m" use case. linkInfo = rmi('getLinks', [modelName objSIDs{i}]);
linkInfo
структура MATLAB, которая содержит атрибуты ссылки. Смотрите rmi
страница ссылки на функцию для получения дополнительной информации.
После того, как вы получаете обновленную информацию о ссылке из своего приложения RM, заполняете поля linkData
с обновленными значениями, и распространяют изменения в Simulink:
rmi('setLinks', slObjectHandle, linkData)
Для примера скрипт MATLAB, реализующий синхронизацию с Рабочей книгой Microsoft Excel, смотрите следующее:
edit([matlabroot '/toolbox/slrequirements/... linktype_examples/slSurrogateInExcel.m'])
Можно запустить этот скрипт MATLAB на модели slvnvdemo_fuelsys_officereq
в качестве примера сгенерировать суррогат рабочей книги Excel® для модели.