원 보간(중심 위치)
펄스는 펑션블록과 지정된 DUT의 파라미터에 따라 2채널에서 출력되므로, 목표 위치 경로는 호로 형성됩니다. 원의 반경은 중심 위치 및 끝 위치를 지정하여 계산됩니다. 지정된 채널의 제어 플래그가 FALSE이고 실행 조건이 TRUE이면 이 채널에서 펄스가 출력됩니다.
입력
펑션블록 활성화(영구 트리거 포함)
절대값 제어 = TRUE, 상대값 제어 = FALSE
TRUE=회전 방향: 역
FALSE=회전 방향: 정
타겟 속도: 두 축의 복합 속도 = 100–20000(100Hz–20kHz)
X-축 목표값 [펄스]: -8388608–8388607
Y-축 목표값 [펄스]: -8388608–8388607
X-축 중심값 [펄스]: -8388608–8388607
Y-축 중심값 [펄스]: -8388608–8388607
채널 구성용 사전 정의된 시스템 DUT: PulseOutput_Channel_Configuration_DUT
채널: 0, 2
출력
적용된 입력 값이 무효인 경우에는 TRUE입니다. 펑션블록 실행이 정지됩니다.
반경 [펄스]
이 비 인라인 명령은 펄스 출력의 도구 명령 일부입니다. 내부에서 사용되는 명령의 자세한 내용은 : F176_PulseOutput_Center
PulseInfo_IsActive를 사용하여 선택한 채널의 제어 플래그가 FALSE인지 확인합니다.
구조체(DUT)를 사용하여 다른 데이터 형식으로 구성된 구조체를 정의할 수 있습니다. DUT는 먼저 DUT 풀에서 정의된 후 POU 헤더의 전역 변수 목록에서 표준 데이터 형식(BOOL, INT 등)으로 처리됩니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
PulseOutput_Center: PulseOutput_Center_FB;
bExecute: BOOL:=FALSE;
bAbsolute: BOOL:=FALSE;
bContinueAfterDone: BOOL:=FALSE;
bCounterclockwise: BOOL:=FALSE;
ChannelConfiguration_X_DUT: PulseOutput_Channel_Configuration_DUT;
bError: BOOL:=FALSE;
diRadius: DINT:=0;
bConfigure: BOOL:=FALSE;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 25 ;
NETWORK_BODY
B(B_CONTACT,,bConfigure,7,1,9,3,);
B(B_F,E_MOVE!,,19,0,25,4,,?DEN?D?AENO?C);
B(B_VARIN,,1,17,2,19,4,);
B(B_F,E_MOVE!,,19,8,25,12,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,17,10,19,12,);
B(B_VAROUT,,ChannelConfiguration_X_DUT.bOutput_Pulse_SignReverse,25,10,27,12,);
B(B_F,E_MOVE!,,19,12,25,16,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,,19,4,25,8,,?DEN?D?AENO?C);
B(B_VARIN,,TRUE,17,6,19,8,);
B(B_VAROUT,,ChannelConfiguration_X_DUT.bOutput_Pulse_SignForward,25,6,27,8,);
B(B_VARIN,,TRUE,17,14,19,16,);
B(B_VAROUT,,ChannelConfiguration_X_DUT.iChannel,25,2,27,4,);
B(B_F,E_MOVE!,,19,16,25,20,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,17,18,19,20,);
B(B_VAROUT,,ChannelConfiguration_X_DUT.bDutyRatio25,25,18,27,20,);
B(B_F,E_MOVE!,,19,20,25,24,,?DEN?D?AENO?C);
B(B_VAROUT,,ChannelConfiguration_X_DUT.bAccelerationSteps60,25,14,27,16,);
B(B_VAROUT,,ChannelConfiguration_X_DUT.bFrequencyRange_191Hz_100kHz,25,22,27,24,);
B(B_VARIN,,TRUE,17,22,19,24,);
L(1,2,7,2);
L(10,2,10,6);
L(10,6,19,6);
L(9,2,10,2);
L(10,2,19,2);
L(10,10,19,10);
L(10,10,10,14);
L(10,6,10,10);
L(10,14,19,14);
L(10,14,10,18);
L(10,18,19,18);
L(10,18,10,22);
L(10,22,19,22);
L(1,0,1,25);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 13 ;
NETWORK_BODY
B(B_FB,PulseOutput_Center_FB!,PulseOutput_Center,14,1,28,13,,?BbExecute?BbAbsolute?BbContinueAfterDone?BbCounterclockwise?BdiTargetSpeed?BdiTargetValue_X?BdiTargetValue_Y?BdiCenterValue_X?BdiCenterValue_Y?BdutChannelConfiguration_X?AbError?AdiRadius);
B(B_VARIN,,bExecute,12,2,14,4,);
B(B_VARIN,,bAbsolute,12,3,14,5,);
B(B_VARIN,,bContinueAfterDone,12,4,14,6,);
B(B_VARIN,,bCounterclockwise,12,5,14,7,);
B(B_VARIN,,15000,12,6,14,8,);
B(B_VARIN,,7000,12,7,14,9,);
B(B_VARIN,,12000,12,8,14,10,);
B(B_VARIN,,500,12,9,14,11,);
B(B_VARIN,,900,12,10,14,12,);
B(B_VARIN,,ChannelConfiguration_X_DUT,12,11,14,13,);
B(B_VAROUT,,bError,28,2,30,4,);
B(B_VAROUT,,diRadius,28,3,30,5,);
L(1,0,1,13);
END_NETWORK_BODY
END_NET_WORK
END_BODY
(* Used DUT parameters *)
ChannelConfiguration_XY_DUT.iChannel := 1;
ChannelConfiguration_XY_DUT.bOutput_Pulse_ForwardTrue := TRUE;
ChannelConfiguration_XY_DUT.bOutput_Pulse_ForwardFalse := FALSE;
ChannelConfiguration_XY_DUT.bAccelerationSteps60 := FALSE;
ChannelConfiguration_XY_DUT.bDutyRatio25 := TRUE;
ChannelConfiguration_XY_DUT.bFrequencyRange_191Hz_100kHz := TRUE;
ChannelConfiguration_XY_DUT.bExecuteInInterruptProgram := FALSE;
(* FB *)
PulseOutput_Center(bExecute := bExecute,
bAbsolute := bAbsolute,
bContinueAfterDone := bContinueAfterDone,
bCounterclockwise := bCounterclockwise,
diTargetSpeed := 15000,
diTargetValue_X := 7000,
diTargetValue_Y := 12000,
diCenterValue_X := 500,
diCenterValue_Y := 900,
dutChannelConfiguration_X_Y := ChannelConfiguration_XY_DUT,
bError => bError,
diRadius => diRadius);