Пользовательские типы ссылок

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

В этом примере вы реализуете пользовательский тип ссылки на гипотетический тип документа, текстовый файл с расширением .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. Щелкните правой кнопкой мыши подсистему Reaction Jet Control и выберите 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. The ContentsFcn функция автоматически генерирует индекс документа.

Реализация пользовательских типов ссылок

Для реализации пользовательского типа ссылки:

  1. Создайте файл функции MATLAB на основе пользовательского шаблона типа ссылки, как описано в разделе «Пользовательские функции типа ссылки».

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

  3. Зарегистрируйте пользовательский тип ссылки с помощью rmi командная 'register' опция, как описано в разделе «Регистрация пользовательского типа ссылки».

Зачем создавать пользовательский тип ссылки?

В дополнение к связыванию со встроенными типами документов требований можно зарегистрировать пользовательские типы документа требований в Requirements Management Interface (RMI). Затем можно создать ссылки требований из модели к этим типам документов.

С помощью пользовательских типов ссылок можно:

  • Ссылка на элементы требования в коммерческом программном обеспечении отслеживания требований

  • Ссылка на собственные системы баз данных

  • Ссылка на типы документа, которые не поддерживаются в RMI

Пользовательский тип ссылки API позволяет вам задать функции MATLAB, которые позволяют связывать вашу модель Simulink и пользовательский тип документа требований. Эти функции также обеспечивают создание новых ссылок и навигацию между моделью и документами.

Например, навигация включает открытие документа потребности и поиск конкретной записи потребности. При клике пользовательской ссылки в меню содержимого связанного объекта в модели Simulink использует функцию навигации пользовательского типа звена, чтобы открыть документ и выделить целевое требование на основе предоставленной реализации. Реализуемая функция навигации использует доступный API для связи с приложением хранения требований.

Как правило, MATLAB запускает команду интерпретатора операционной системы или использует ActiveX® связь для отправки навигационных запросов во внешние приложения.

Кроме того, если ваши требования хранятся как пользовательские варианты текста или HTML файлов, можно использовать встроенный редактор или веб-браузер, чтобы открыть документ требований.

Пользовательские функции Ссылки Type

Чтобы создать файл функции 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® суррогат рабочей книги для модели.