exponenta event banner

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

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

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

    Откроется редактор исходящих связей.

  7. Щелкните Создать, чтобы добавить новую ссылку требования. Выпадающий список Тип документа теперь содержит ABC file (for demonstration) вариант.

  8. Задать для типа документа значение ABC file (for demonstration) и перейдите к matlabroot\toolbox\slvnv\rmidemos\demo_req_1.abc файл. В браузере отображаются только файлы с .abc расширение.

  9. Для определения определенного местоположения в документе потребности используйте поле Местоположение.

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

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

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

    Примечание

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

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

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

  11. В поле Описание введите Altitude Hold, чтобы определить требование по имени.

  12. Нажмите кнопку «Применить».

  13. Убедитесь, что Altitude Hold необходимые ссылки на подсистему управления реактивной струей. Щелкните правой кнопкой мыши подсистему и выберите Требования > 1. «Удержание высоты».

Создание индекса документа

Индекс документа - это список всех требований данного документа. Для создания индекса документа MATLAB использует файловые функции ввода-вывода для считывания содержимого документа требований в переменную MATLAB. RMI извлекает список позиций потребности.

Пример документа потребности, demo_req_1.abc, определяет четыре требования с помощью строки Requirement::. Чтобы создать индекс документа для этого ABC-файла, ContentsFcn функция в rmicustabcinterface.m извлекает имена требований и вставки @ перед каждым именем.

Для demo_req_1.abc в диалоговом окне «Исходящие связи: управление реактивной струей» перейдите на вкладку «Индекс документа». ContentsFcn функция автоматически генерирует индекс документа.

Внедрение пользовательских типов ссылок

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

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

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

  3. Зарегистрируйте пользовательский тип связи с помощью 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 ® для модели.