В этом примере вы реализуете пользовательский тип ссылки на гипотетический тип документа, текстовый файл с расширением .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"
Откройте следующую модель примера:
Щелкните правой кнопкой мыши подсистему Reaction Jet Control и выберите 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. The ContentsFcn
функция автоматически генерирует индекс документа.
Для реализации пользовательского типа ссылки:
Создайте файл функции MATLAB на основе пользовательского шаблона типа ссылки, как описано в разделе «Пользовательские функции типа ссылки».
Настройте пользовательский файл типа ссылки, чтобы задать свойства типа ссылки и пользовательские функции обратного вызова, необходимые для пользовательского типа ссылки, как описано в Свойствах типа ссылки.
Зарегистрируйте пользовательский тип ссылки с помощью 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 с уникальной функцией и именем файла.
Не могут потребоваться входные параметры.
Необходимо вернуть один выходной аргумент, являющийся образцом класса типа ссылки requirements.
Чтобы просмотреть аналогичные файлы для встроенных типов ссылок, смотрите следующие файлы в 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. Файл в папке выборов содержит список зарегистрированных типов ссылок, поэтому пользовательский тип ссылки загружается каждый раз, когда вы запускаете 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
, полный список соответствующих session-независимых Идентификаторы
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
страница с описанием функции для получения дополнительной информации.
После извлечения обновленной информации о ссылке из приложения управления правами заполните поля linkData
с обновленными значениями и распространить изменения на Simulink:
rmi('setLinks', slObjectHandle, linkData)
Для примера скрипта MATLAB реализации синхронизации с Excel Workbook Microsoft, смотрите следующее:
edit([matlabroot '/toolbox/slrequirements/... linktype_examples/slSurrogateInExcel.m'])
Можно запустить этот скрипт MATLAB на модели примера slvnvdemo_fuelsys_officereq
чтобы сгенерировать Excel® суррогат рабочей книги для модели.