JMP 버전에서 JSL 사용하기 15.2.0. JSL 코드는 스크립트 이름이 'Control Charts'인 첨부된 테이블에 포함됩니다.
다양한 위상 그룹화 및 '위치' 조건에 대한 사용자 지정 그래픽 스크립트를 통해 사양 제한(LSL, Target, USL)을 추가하려고 할 때 중첩 루프의 동작으로 어려움을 겪고 있습니다.내 중첩 루프는 현재 각 차트/단계/여기서 조건이 각각의 제한을 받는 대신 생성된 모든 관리도에 마지막 차트에 대한 사양 제한을 적용합니다.
올바른 방향으로 조금 이동해 주셔서 감사합니다!
토드
Todd, JMP/JSL은 보다 일반적인 프로그래밍 언어와 비교할 때 약간 이상합니다. 특히 모든 범위 제어를 직접 수행해야 합니다.
나는 당신이 다루고있는 것을 보여주는 예가 있습니다. 아래 스크립트가 다음을 생성 할 것이라고 생각할 수도 있습니다. "빨간색" 그 다음에 "파란색" 그래픽 스크립트에 삼각형이 있지만 대신 두 개의 파란색 삼각형만 생성됩니다.
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
framebox = rbiv[frame box( 1 )];
/**** Make a red triangle??? ****/
color = "Red";
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( color );
Polygon( [60, 72, 57], [75, 120, 120] );
);
/**** Make a blue triangle??? ****/
color = "Blue";
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( color );
Polygon( [60, 72, 57], [85, 130, 130] );
);
이것은 JSL이 범위를 처리하는 방식 때문에 발생합니다. <<그래픽 스크립트 추가() 함수는 평가되지 않은 명령문 세트로 추가됩니다(실제로는 평가되지 않은 접착제() 기능). 내부에 존재하는 모든 변수 <<그래픽 스크립트 추가() 스크립트가 평가될 것입니다 실행 중에만 스크립트의.그래픽 스크립트가 실행 중일 때(기억하십시오. 프레임 박스 창의 표시 트리에 포함됨) 각 변수를 해결해야 합니다.범위 확인 규칙에 따르면 현지 범위(있는 경우), 여기 범위(있는 경우), 다음 글로벌 범위 -- 이 범위에서 찾을 수 없으면 다음으로 대체됩니다. 비어 있는() 값.
따라서 스크립트는 프레임 박스 메인 스크립트 내부에 있지만 나중에 실행됩니다.이 나중 시점에서 색상 변수는 "파란색" , 따라서 두 삼각형 모두 파란색입니다.
이 문제를 해결하는 방법은 관심 있는 변수를 해결하는 것입니다. 추가할 때 실행할 때가 아니라 그래픽 스크립트.이렇게 하려면 다음을 사용하십시오. 평가( 평가 Expr() ) 여기에 표시된 대로 방법론입니다.
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
framebox = rbiv[frame box( 1 )];
/**** Make a red triangle!!! ****/
color = "Red";
Eval( Eval Expr(
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( Expr( color ) );
Polygon( [60, 72, 57], [75, 120, 120] );
);
) );
/**** Make a blue triangle!!! ****/
color = "Blue";
Eval( Eval Expr(
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( Expr( color ) );
Polygon( [60, 72, 57], [85, 130, 130] );
);
) );
내 모든 변수에 대해 이 방법을 사용해야 합니다. <<그래픽 스크립트 추가() 그 당시의 값을 유지하기 위한 기능 <<그래픽 스크립트 추가() 불렸다.