Main Content

이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.

finishedTraversal

클래스: ModelAdvisor.EdittimeCheck
네임스페이스: ModelAdvisor

blockDiscovered 메소드 이후에 실행할 편집 시 검사 알고리즘 지정

R2022a 이후

구문

violation = finishedTraversal(obj)

설명

violation = finishedTraversal(obj)blockDiscovered 메서드가 사용자가 편집 중인 모델 또는 하위 시스템의 동일한 수준에 있는 블록을 순회한 후에 호출되는 알고리즘을 지정하기 위한 것입니다. 편집 시 검사 개체 objTraversalType 속성에 edittimecheck.TraversalTypes.ACTIVEGRAPH 값을 지정할 때 이 방법을 사용합니다. 이 메소드는 편집 시 검사 알고리즘인 violation을 위반하는 블록을 반환합니다.

편집 시 검사는 blockDiscovered 방법의 일부로 수집한 데이터에 대해 수행해야 하는 작업을 지정하려면 finishedTraversal 방법을 사용합니다. 예를 들어, 블록이 20개가 넘는 하위 시스템에 플래그를 지정하는 편집 시 검사를 정의한다고 가정해 보겠습니다. 이 시나리오에서 blockDiscovered 방법은 하위 시스템의 각 블록을 탐색하고 블록 수를 계산합니다. 그런 다음 finishedTraversal 메서드가 호출되고 하위 시스템에 20개 이상의 블록이 포함되어 있으면 편집 시 검사 위반이 생성됩니다.

입력 인수

모두 확장

편집 시 검사 객체로, ModelAdvisor.EdittimeCheck 클래스에서 파생된 클래스의 객체로 지정됩니다.

출력 인수

모두 확장

편집 시 검사를 위반하는 블록으로, ModelAdvisor.ResultDetail 객체 또는 ModelAdvisor.ResultDetail 객체 배열로 반환됩니다.

속성

Accessprotected

메소드의 속성에 대해 알아보려면 Method Attributes를 참조하세요.

예제

모두 확장

하위 시스템 내에서 트리거 블록의 위치를 ​​확인하는 사용자 정의 편집 시 검사를 만듭니다. 이 검사에는 하위 시스템의 블록 위치를 확인한 후 위반 정보를 지정해야 하기 때문에 finishedTraversal 방법이 필요합니다.

Model Advisor 점검을 시도해 보려면 모델을 구하세요.

openExample('AdvisorCustomizationExample')

Model with edit-time check violations

모델을 작업 폴더에 저장합니다. 모델을 닫습니다.

사용자 정의 편집 시 검사를 등록하려면 sl_customization 함수를 생성하세요. sl_customization 함수는 사용자 정의 관리자 개체라는 하나의 인수를 허용합니다. 사용자 정의 검사를 등록하려면 addModelAdvisorCheckFcn 방법을 사용하십시오. 이 메소드에 대한 입력은 검사 정의 함수에 대한 핸들입니다. 이 예에서는 defineCheck가 검사 정의 기능입니다. sl_customization 함수를 생성하고 작업 폴더에 저장합니다.

function sl_customization(cm)
cm.addModelAdvisorCheckFcn(@defineCheck);

검사 정의 기능을 만듭니다. 함수 내에서 ModelAdvisor.Check 객체를 생성하고 Check ID를 입력 인수로 지정합니다. 그런 다음 ModelAdvisor.Check TitleCallbackHandle 속성을 지정합니다. CallbackHandle 속성은 편집 시 검사를 정의하기 위해 생성하는 클래스의 이름입니다. 이 예에서 MyEditTimeChecks은 패키지 이름이고 TriggerBlockPosition는 클래스 이름입니다. 그런 다음 Model Advisor의 새 폴더에 검사를 게시합니다. 이 예에서 폴더 이름은 DEMO: Edit-time Checks입니다. 이 예에서는 defineCheck 함수를 만들고 여기에 아래 코드를 포함합니다. defineCheck 함수를 작업 폴더에 저장합니다.

function defineCheck
rec= ModelAdvisor.Check("advisor.edittimecheck.TriggerBlock");
rec.Title = 'Check that Trigger block position is higher than other blocks';
rec.CallbackHandle = 'MyEditTimeChecks.TriggerBlockPosition';
mdladvRoot.publish(rec,'DEMO: Edit Time Checks');

ModelAdvisor.EdittimeCheck 추상 기본 클래스에서 파생되는 클래스를 만듭니다. 이 예에서는 TriggerBlockPosition.m라는 클래스 파일을 만듭니다. 아래 코드를 TriggerBlockPosition.m 파일에 복사하세요. 그런 다음 +MyEditTimeChecks라는 폴더를 만들고 해당 폴더에 TriggerBlockPosition.m 파일을 저장합니다. 클래스는 패키지 이름과 동일한 이름을 가진 폴더에 있어야 합니다.

TriggerBlockPosition 클래스는 세 가지 메서드를 정의합니다. TriggerBlockPosition, blockDiscovered, finishedTraversal. TriggerBlockPosition 메서드는 CheckIdTraversalType 속성을 설정합니다. 이 검사는 Trigger 블록과 동일한 하위 시스템에 있는 다른 블록을 검사해야 하기 때문에 edittimecheck.TraversalTypes.ACTIVEGRAPH의 순회 유형을 갖습니다. blockDiscovered 방법은 하위 시스템 내에서 Trigger 블록의 위치를 ​​확인합니다. finishedTraversal 방법은 이러한 Trigger 블록의 위치가 하위 시스템의 다른 블록보다 높은지 확인합니다.

classdef TriggerBlockPosition < ModelAdvisor.EdittimeCheck
    properties
        TriggerBlock = [];
        position = [];
    end
 
 methods
        % Set Check ID and traversal type.
        function obj=TriggerBlockPosition(checkId)
            obj=obj@ModelAdvisor.EdittimeCheck(checkId);
            obj.traversalType = edittimecheck.TraversalTypes.ACTIVEGRAPH;
        end
 
        function violation = blockDiscovered(obj, blk)
            violation = [];
            if strcmp(get_param(blk,'BlockType'),'TriggerPort')
                obj.TriggerBlock = blk;
            else
                h = get_param(blk,'Position');
                obj.position = [obj.position, h(2)];
            end
        end
 
        function violation = finishedTraversal(obj)
            violation = [];
            if isempty(obj.TriggerBlock) 
                return;
            end
            triggerPosition = get_param(obj.TriggerBlock,'Position');
            if min(obj.position) < triggerPosition(2)
                violation = ModelAdvisor.ResultDetail;
                ModelAdvisor.ResultDetail.setData(violation,'SID',...
                Simulink.ID.getSID(obj.TriggerBlock)); 
                violation.CheckID = obj.checkId;
                violation.title = 'Trigger Block Position';
                violation.Description = 'Trigger Block should be top block in subsystem'; 
                violation.ViolationType = 'Warning'; 
            end
            obj.TriggerBlock = [];
            obj.position =[]; 
        end 
    end
end

Model Advisor를 새로 고쳐 경로에 대한 새로운 검사로 캐시를 업데이트합니다.

Advisor.Manager.refresh_customizations

AdvisorCustomizationExample 모델을 엽니다.

모델링 탭을 클릭하고 Model Advisor > Configuration Editor를 선택하거나 명령 프롬프트에 다음 명령을 입력하여 Model Advisor 구성 편집기를 엽니다.

Simulink.ModelAdvisor.openConfigUI;

사용자 정의 편집 시 검사로 구성된 사용자 정의 구성을 만듭니다. 구성을 my_config2.json로 저장합니다. Model Advisor 구성 편집기를 닫습니다. 사용자 정의 구성을 my_config2.json 파일로 설정합니다.

ModelAdvisor.setModelConfiguration('AdvisorCustomizationExample', ''my_config2.json');

모델링 탭을 클릭하고 Model Advisor > Edit Time 확인을 선택하여 편집 시 검사를 활성화합니다. 구성 매개변수 대화 상자가 열리면 편집 시 검사 매개변수를 선택합니다. 또는 명령 프롬프트에 다음 명령을 입력할 수 있습니다.

edittime.setAdvisorChecking('AdvisorCustomizationExample','on');

편집 시간 경고를 보려면 노란색으로 강조 표시된 블록을 클릭하세요.

증폭기 하위 시스템에서 Trigger 블록은 하위 시스템의 최상위 블록이므로 편집 시 경고를 생성하지 않습니다. 트리거 블록을 다른 블록 아래로 이동하면 편집 시간 경고가 생성됩니다.

버전 내역

R2022a에 개발됨