이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
ModelAdvisor.EdittimeCheck 클래스
네임스페이스: ModelAdvisor
설명
ModelAdvisor.EdittimeCheck
추상 기본 클래스에서 클래스를 파생하여 사용자 정의 편집 시 검사를 생성합니다. 사용자 정의 편집 시 검사를 생성하려면 추상 기본 클래스에서 파생되는 MATLAB® 클래스를 생성합니다. 그런 다음 클래스에 대한 핸들을 포함하는 검사 정의 함수를 만들고 sl_customization
함수를 사용하여 사용자 정의 편집 시 검사를 등록합니다.
ModelAdvisor.EdittimeCheck
클래스는 handle
클래스입니다.
속성
checkID
— 확인용 식별자
string
검사 식별자로, 문자열로 지정됩니다. 정의 확인 기능의 일부로 생성한 ModelAdvisor.Check
클래스를 사용하여 이 속성을 설정합니다. checkID
속성은 검사에 대한 영구 고유 식별자를 지정합니다.
예: "advisor.edittime.inoutnamelength"
속성:
GetAccess | 보호됨 |
SetAccess | 보호됨 |
TraversalType
— Model Advisor가 편집 시 검사를 실행하는 방법
edittimecheck.TraversalTypes.BLKITER
| edittimecheck.TraversalTypes.ACTIVEGRAPH
Model Advisor가 다음 값 중 하나로 지정된 편집 시 검사를 실행하는 방법은 다음과 같습니다.
edittimecheck.TraversalTypes.BLKITER
— 새로 추가된 블록과 편집한 블록에 대해 검사가 실행됩니다. 이러한 편집에는 블록 이름, 유형 및 매개변수 값에 대한 변경 사항이 포함됩니다.edittimecheck.TraversalTypes.ACTIVEGRAPH
— 새로 추가된 블록, 편집한 블록 및 편집했거나 새로 추가한 블록과 동일한 수준의 및 기타 블록에 대해 검사가 실행됩니다. 검사에서 사용자가 편집 중인 모델의 전체 하위 시스템 또는 수준을 확인해야 하는 경우 이 순회 유형 속성을 지정합니다. 예를 들어, Trigger 블록이 하위 시스템의 최상위 블록인지 확인하기 위해 이 순회 유형을 지정합니다. 왜냐하면 검사에서는 이 결정을 내리기 위해 하위 시스템 내의 다른 블록을 조사해야 하기 때문입니다.
예: eddittimecheck.TraversalTypes.BLKITER
속성:
GetAccess | 보호됨 |
SetAccess | 보호됨 |
메서드
보호된 방법
blockDiscovered | 편집 시 검사를 위반하는 블록을 식별하기 위한 알고리즘 지정 |
finishedTraversal | blockDiscovered 메소드 이후에 실행할 편집 시 검사 알고리즘 지정 |
fix | 편집 시 체크 블록 위반을 수정하기 위한 알고리즘 지정 |
예제
가져오기 및 내보내기 블록에 대한 사용자 정의 편집 시 검사 생성
출력 데이터 유형에 따라 Inport 및 Outport 블록에 특정 색상이 있는지 확인하는 사용자 정의 편집 시 검사를 만듭니다.
Model Advisor 점검을 시도하려면 모델을 구하십시오.
openExample('AdvisorCustomizationExample')
모델을 작업 폴더에 저장합니다. 모델을 닫습니다.
사용자 정의 편집 시 검사를 등록하려면 sl_customization
함수를 생성하세요. sl_customization
함수는 사용자 정의 관리자 개체라는 하나의 인수를 허용합니다. 사용자 정의 검사를 등록하려면 addModelAdvisorCheckFcn
방법을 사용하십시오. 이 메소드에 대한 입력은 검사 정의 함수에 대한 핸들입니다. 이 예에서는 defineCheck
가 검사 정의 기능입니다. sl_customization
함수를 생성하고 작업 폴더에 저장합니다.
function sl_customization(cm)
cm.addModelAdvisorCheckFcn(@defineCheck);
검사 정의 기능을 만듭니다. 함수 내에서 ModelAdvisor.Check
객체를 생성하고 Check ID를 입력 인수로 지정합니다. 그런 다음 ModelAdvisor.Check
Title
및 CallbackHandle
속성을 지정합니다. CallbackHandle
속성은 편집 시 검사를 정의하기 위해 생성하는 클래스의 이름입니다. 이 예에서 MyEditTimeChecks
은 패키지 이름이고 PortColor
은 클래스 이름입니다. 그런 다음 Model Advisor의 새 폴더에 검사를 게시합니다. 이 예에서 폴더 이름은 DEMO: Edit-time Checks입니다. 이 예에서는 defineCheck
함수를 만들고 여기에 아래 코드를 포함합니다. defineCheck
함수를 작업 폴더에 저장합니다.
function defineCheck rec = ModelAdvisor.Check("advisor.edittimecheck.PortColor"); rec.Title = 'Check color of Inport and Outport blocks'; rec.CallbackHandle = 'MyEditTimeChecks.PortColor'; mdladvRoot = ModelAdvisor.Root; mdladvRoot.publish(rec,'DEMO: Edit-time Checks');
ModelAdvisor.EdittimeCheck
추상 기본 클래스에서 파생되는 클래스를 만듭니다. 이 예에서는 PortColor.m
라는 클래스 파일을 만듭니다. 아래 코드를 PortColor.m
파일에 복사하세요. 그런 다음 +MyEditTimeChecks
이라는 폴더를 만들고 해당 폴더에 PortColor.m
파일을 저장합니다. 클래스는 패키지 이름과 동일한 이름을 가진 폴더에 있어야 합니다.
PortColor
클래스는 세 가지 메서드를 정의합니다. PortColor
, blockDiscovered
, fix
. PortColor
메서드는 CheckId
및 TraversalType
속성을 설정합니다. 이 검사는 새로 추가 및 편집된 블록을 검사해야 하지만 편집되거나 새로 추가된 블록과 동일한 하위 시스템 또는 모델에서 영향을 받는 블록을 검사할 필요가 없기 때문에 edittimecheck.TraversalTypes.BLKITER
의 순회 유형을 갖습니다. blockDiscovered
방법에는 Inport 및 Outport 블록의 색상을 확인하는 알고리즘이 포함되어 있습니다. fix
방법은 올바른 색상이 없는 블록을 업데이트합니다.
classdef PortColor < ModelAdvisor.EdittimeCheck % Check that ports conform to software design standards for background color. % % Background Color Data Types % orange Boolean % green all floating-point % cyan all integers % Light Blue Enumerations and Bus Objects % white auto % methods % Set the Check ID and traversal type. function obj=PortColor(checkId) obj=obj@ModelAdvisor.EdittimeCheck(checkId); obj.traversalType = edittimecheck.TraversalTypes.BLKITER; end % Specify the edit-time check algorithm using the blockDiscovered method. function violation = blockDiscovered(obj, blk) violation = []; % To check when this check gets called, insert a breakpoint here. if strcmp(get_param(blk,'BlockType'),'Inport') || strcmp(get_param(blk,'BlockType'),'Outport') dataType = get_param(blk,'OutDataTypeStr'); currentBgColor = get_param(blk,'BackgroundColor'); if strcmp(dataType,'boolean') if ~strcmp(currentBgColor, 'orange') % Create a violation object using the ModelAdvisor.ResultDetail class. violation = ModelAdvisor.ResultDetail; ModelAdvisor.ResultDetail.setData(violation,'SID',Simulink.ID.getSID(blk)); violation.CheckID = obj.checkId; violation.Description = 'Inport/Outport blocks with Boolean outputs should be orange.'; violation.title = 'Port Block Color'; violation.ViolationType = 'Warning'; end elseif any(strcmp({'single','double'},dataType)) if ~strcmp(currentBgColor, 'green') violation = ModelAdvisor.ResultDetail; ModelAdvisor.ResultDetail.setData(violation,'SID',Simulink.ID.getSID(blk)); violation.CheckID = obj.checkId; violation.Description = 'Inport/Outport blocks with floating-point outputs should be green.'; violation.title = 'Port Block Color'; violation.ViolationType = 'Warning'; end elseif any(strcmp({'uint8','uint16','uint32','int8','int16','int32'}, dataType)) if ~strcmp(currentBgColor, 'cyan') violation = ModelAdvisor.ResultDetail; ModelAdvisor.ResultDetail.setData(violation,'SID',Simulink.ID.getSID(blk)); violation.CheckID = obj.checkId; violation.Description = 'Inport/Outport blocks with integer outputs should be cyan.'; violation.title = 'Port Block Color'; violation.ViolationType = 'Warning'; end elseif contains(dataType,'Bus:') if ~strcmp(currentBgColor, 'lightBlue') violation = ModelAdvisor.ResultDetail; ModelAdvisor.ResultDetail.setData(violation,'SID',Simulink.ID.getSID(blk)); violation.CheckID = obj.checkId; violation.Description = 'Inport/Outport blocks with bus outputs should be light blue.'; violation.title = 'Port Block Color'; violation.ViolationType = 'Warning'; end elseif contains(dataType,'Enum:') if ~strcmp(currentBgColor, 'lightBlue') violation = ModelAdvisor.ResultDetail; ModelAdvisor.ResultDetail.setData(violation,'SID',Simulink.ID.getSID(blk)); violation.CheckID = obj.checkId; violation.Description = 'Inport/Outport blocks with enumeration outputs should be light blue.'; violation.title = 'Port Block Color'; violation.ViolationType = 'Warning'; end elseif contains(dataType, 'auto') if ~strcmp(currentBgColor, 'white') violation = ModelAdvisor.ResultDetail; ModelAdvisor.ResultDetail.setData(violation,'SID',Simulink.ID.getSID(blk)); violation.CheckID = obj.checkId; violation.Description = 'Inport/Outport blocks with auto outputs should be white.'; violation.title = 'Port Block Color'; violation.ViolationType = 'Warning'; end end end end % Optionally, provide a fix for the violation object. function success = fix(obj, violation) success = false; dataType = get_param(violation.Data,'OutDataTypeStr'); if strcmp(dataType,'boolean') set_param(violation.Data,'BackgroundColor','orange'); elseif any(strcmp({'single','double'},dataType)) set_param(violation.Data,'BackgroundColor','green'); elseif any(strcmp({'uint8','uint16','uint32','int8','int16','int32'}, dataType)) set_param(violation.Data,'BackgroundColor','cyan'); elseif contains(dataType,'Bus:') || contains(dataType,'Enum:') set_param(violation.Data,'BackgroundColor','lightBlue'); elseif contains(dataType,'auto') set_param(violation.Data,'BackgroundColor','white'); end success = true; end end end
Model Advisor를 새로 고쳐 경로에 대한 새로운 검사로 캐시를 업데이트합니다.
Advisor.Manager.refresh_customizations
AdvisorCustomizationExample
모델을 엽니다.
모델링 탭을 클릭하고 Model Advisor > Configuration Editor를 선택하거나 명령 프롬프트에 다음 명령을 입력하여 Model Advisor 구성 편집기를 엽니다.
Simulink.ModelAdvisor.openConfigUI;
사용자 정의 편집 시 검사로 구성된 사용자 정의 구성을 만듭니다. 구성을 my_config.json
로 저장합니다. Model Advisor 구성 편집기를 닫습니다. 사용자 정의 구성을 my_config.json
파일로 설정합니다.
ModelAdvisor.setModelConfiguration('AdvisorCustomizationExample', 'my_config.json');
모델링 탭을 클릭하고 Model Advisor > Edit-Time Checks를 선택하여 편집 시 검사를 활성화합니다. 구성 매개변수 대화 상자가 열리고 편집 시 검사 매개변수를 선택합니다. 또는 명령 프롬프트에 다음 명령을 입력할 수 있습니다.
edittime.setAdvisorChecking('AdvisorCustomizationExample','on');
편집 시간 경고를 보려면 노란색으로 강조 표시된 블록을 클릭하세요.
모델의 최상위 수준에서 두 개의 Inport 블록은 int32
의 출력 데이터 유형을 갖습니다. 청록색이어야 하기 때문에 편집 시 경고가 표시됩니다. Outport 블록은 자동
데이터 유형이 있고 흰색이므로 위반을 생성하지 않습니다.
편집 시간 경고를 수정하려면 편집 시 검사 경고 창에서 수정를 클릭하세요.
버전 내역
R2022a에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)