Типы настраиваемой ссылки

Создайте пользовательский тип ссылки требований

В этом примере вы реализуете тип настраиваемой ссылки к гипотетическому типу документа, текстовому файлу с дополнительным .abc. В рамках этого документа элементы требования идентифицированы со специальной текстовой строкой, Requirement::, сопровождаемый одиночным пробелом и затем элементом требования в кавычках (").

Вы создадите индекс документа, перечисляющий все элементы требования. При навигации от модели Simulink® до документа требований документ открывается в Редакторе MATLAB® линии требования, чтобы вы хотели.

Создать тип требования настраиваемой ссылки:

  1. Запишите функцию, которая реализует тип настраиваемой ссылки, и сохраните его на пути MATLAB.

    В данном примере файлом является rmicustabcinterface.m, содержа функцию, rmicustabcinterface, это реализует файлы ABC, поставляющиеся с вашей установкой.

  2. Чтобы просмотреть эту функцию, в посдказке 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 = [];
  3. Чтобы указать настраиваемую ссылку вводят ABC, вводят следующую команду MATLAB:

    rmi register rmicustabcinterface

    Тип файла ABC появляется на Исходящем Редакторе Ссылок выпадающий список типов документа.

  4. Создайте текстовый файл с .abc расширение, содержащее несколько элементов требования, отмечено Requirement:: строка.

    Для вашего удобства файл в качестве примера поставляется с вашей установкой. Файлом в качестве примера является matlabroot\toolbox\slvnv\rmidemos\demo_req_1.abc. demo_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"
  5. Откройте следующую модель в качестве примера:

  6. Щелкните правой кнопкой по Струйной подсистеме Управления Реакцией и выберите Requirements> Open Outgoing Links dialog.

    Исходящий Редактор Ссылок открывается.

  7. Нажмите New, чтобы добавить новую ссылку требования. Document type выпадающий список теперь содержит ABC file (for demonstration) опция.

  8. Установите Document type на ABC file (for demonstration) и просмотрите к matlabroot\toolbox\slvnv\rmidemos\demo_req_1.abc файл. Браузер показывает только файлы с .abc расширение.

  9. Чтобы задать конкретное местоположение в документе требований, используйте поле Location.

    В этом примере, rmicustabcinterface функция задает два типа разделителей местоположения для ваших требований:

    • > — Номер строки в файле

    • @ — Названный элемент, такой как закладка, функция или привязка к HTML

    Примечание

    rmi страница с описанием описывает другие типы разделителей местоположения требований.

    Выпадающий список Location содержит эти два типа разделителей местоположения каждый раз, когда вы устанавливаете Document type на ABC file (for demonstration).

  10. Выберите Line number. Введите номер 26, который соответствует номеру строки для Altitude Hold требование в demo_req_1.abc.

  11. В поле Description введите Altitude Hold, идентифицировать требование по наименованию.

  12. Нажмите Apply.

  13. Проверьте что 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 функция генерирует индекс документа автоматически.

Реализуйте типы настраиваемой ссылки

Реализовывать тип настраиваемой ссылки:

  1. Создайте файл функции MATLAB на основе шаблона типа настраиваемой ссылки, как описано в Функциях Типа Настраиваемой ссылки.

  2. Настройте файл типа настраиваемой ссылки, чтобы задать свойства типа ссылки и пользовательские функции обратного вызова, требуемые для типа настраиваемой ссылки, как описано в Link Type Properties.

  3. Укажите тип настраиваемой ссылки с помощью 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® для модели.