В этом примере реализуется пользовательский тип ссылки на гипотетический тип документа, текстовый файл с расширением .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"
Откройте пример модели:
Щелкните правой кнопкой мыши подсистему управления реактивной струей и выберите "Требования" > "Открыть окно" Исходящие связи ".
Откроется редактор исходящих связей.
Щелкните Создать, чтобы добавить новую ссылку требования. Выпадающий список Тип документа теперь содержит ABC file (for demonstration) вариант.

Задать для типа документа значение ABC file (for demonstration) и перейдите к файл. В браузере отображаются только файлы с matlabroot\toolbox\slvnv\rmidemos\demo_req_1.abc.abc расширение.
Для определения определенного местоположения в документе потребности используйте поле Местоположение.
В этом примере rmicustabcinterface функция определяет два типа разделителей расположения для требований:
> - Номер строки в файле
@ - именованный элемент, например закладка, функция или привязка HTML;
Примечание
rmi описывает другие типы разделителей расположения требований.
Раскрывающийся список Расположение (Location) содержит эти два типа разделителей расположения, если для параметра Тип документа (Document type) задано значение ABC file (for demonstration).

Выберите Номер строки. Введите номер 26, что соответствует номеру строки для Altitude Hold требование в demo_req_1.abc.
В поле Описание введите Altitude Hold, чтобы определить требование по имени.
Нажмите кнопку «Применить».
Убедитесь, что Altitude Hold необходимые ссылки на подсистему управления реактивной струей. Щелкните правой кнопкой мыши подсистему и выберите Требования > 1. «Удержание высоты».
Индекс документа - это список всех требований данного документа. Для создания индекса документа MATLAB использует файловые функции ввода-вывода для считывания содержимого документа требований в переменную MATLAB. RMI извлекает список позиций потребности.
Пример документа потребности, demo_req_1.abc, определяет четыре требования с помощью строки Requirement::. Чтобы создать индекс документа для этого ABC-файла, ContentsFcn функция в rmicustabcinterface.m извлекает имена требований и вставки @ перед каждым именем.
Для demo_req_1.abc в диалоговом окне «Исходящие связи: управление реактивной струей» перейдите на вкладку «Индекс документа». ContentsFcn функция автоматически генерирует индекс документа.

Для реализации пользовательского типа связи:
Создайте файл функции MATLAB на основе шаблона пользовательского типа связи, как описано в разделе Функции пользовательского типа связи.
Настройте файл пользовательского типа связи, чтобы указать свойства типа связи и пользовательские функции обратного вызова, необходимые для пользовательского типа связи, как описано в разделе Свойства типа связи.
Зарегистрируйте пользовательский тип связи с помощью rmi команда 'register' , как описано в разделе Регистрация типа настраиваемой ссылки.
Помимо ссылок на встроенные типы документов требований, можно зарегистрировать пользовательские типы документов требований с помощью интерфейса управления требованиями (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
После регистрации типа ссылки она отображается в редакторе исходящих ссылок в качестве записи в выпадающем списке Тип документа. Файл в папке предпочтений содержит список зарегистрированных типов ссылок, поэтому пользовательский тип ссылки загружается при каждом запуске MATLAB.
При создании ссылок с использованием пользовательских типов ссылок программа сохраняет имя регистрации и другие свойства ссылок, указанные в файле функции. При попытке перехода к такой ссылке RMI сопоставляет тип ссылки с зарегистрированным списком. Если программа не может найти тип связи, появится сообщение об ошибке.
Удалить тип связи можно с помощью следующей команды MATLAB:
rmi unregister mytargetfilename
После внедрения пользовательских типов связей для RMI, позволяющих устанавливать связи между объектами Simulink и требованиями в приложении управления требованиями (приложении RM), можно реализовать синхронизацию связей между приложением RM и Simulink с помощью функций Simulink Requirements™. Затем ссылки можно просматривать и управлять в среде приложения управления правами, а внесенные изменения распространяются на Simulink.
Сначала в приложении RM создаются суррогатные объекты для представления интересующих объектов Simulink. Затем можно автоматизировать процесс установления связей отслеживания между этими суррогатными объектами и другими элементами, хранящимися в приложении RM, для сопоставления связей, существующих на стороне Simulink. После изменения или создания новых связей в приложении RM можно распространить изменения обратно в Simulink. Вы используете Simulink Requirements для реализации синхронизации ссылок для пользовательских документов требований. Однако эта функциональность зависит от API автоматизации и взаимодействия между процессами, доступных в приложении RM. Для реализации синхронизации связей между приложениями RM и Simulink используются следующие функции Simulink Requirements.
Чтобы получить полный список объектов 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 ® для модели.