선형 보간
펄스는 펑션블록과 지정된 DUT의 파라미터에 따라 2채널에서 출력되므로, 목표 위치 경로는 직선으로 형성됩니다. 지정된 채널의 제어 플래그가 FALSE이고 실행 조건이 TRUE이면 이 채널에서 펄스가 출력됩니다.
입력
실행 조건은 다음과 같을 수 있습니다.
엣지 트리거 포함
속도 변경이 필요한 경우 영구.
절대값 제어 = TRUE, 상대값 제어 = FALSE
초기 및 최종 속도: 합성 속도 = 1~50000(1Hz~50kHz)
타겟 속도: 합성 속도 = 1~50000(1Hz~50kHz)
가속/감속 시간 (FPS, FP-X): 0ms~32767ms
가속 시간(F171_PulseOutput_Trapezoidal): 0ms~32767ms
감속 시간(F171_PulseOutput_Trapezoidal): 0ms~32767ms
X-축 목표값[펄스]-8388608~8388607
Y-축 목표값[펄스]-8388608~8388607
출력
적용된 입력 값이 무효인 경우에는 TRUE입니다. 펑션블록 실행이 정지됩니다.
전역 정수 MC_PulseOutput_Library_Basic_bCheckInputs가 TRUE로 설정된 경우에만 설정합니다.
X-축 초기값 및 최종 속도[Hz]
X-축 타겟 속도[Hz]
Y-축 초기값 및 최종 속도[Hz]
Y-축 타겟 속도[Hz]
이 비 인라인 명령은 펄스 출력의 도구 명령 일부입니다. 내부에서 사용되는 명령의 자세한 내용은 :F175_PulseOutput_Linear
PulseInfo_IsActive를 사용하여 선택한 채널의 제어 플래그가 FALSE인지 확인합니다.
구조체(DUT)를 사용하여 다른 데이터 형식으로 구성된 구조체를 정의할 수 있습니다. DUT는 먼저 DUT 풀에서 정의된 후 POU 헤더의 전역 변수 목록에서 표준 데이터 형식(BOOL, INT 등)으로 처리됩니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
PulseOutput_Linear: PulseOutput_Linear_FB;
bExecute: BOOL:=FALSE;
bAbsolute: BOOL:=FALSE;
ChannelConfiguration_XY_DUT: PulseOutput_Channel_Configuration_DUT;
bError: BOOL:=FALSE;
rInitialAndFinalSpeed_X: REAL:=0;
rTargetSpeed_X: REAL:=0;
rInitialAndFinalSpeed_Y: REAL:=0;
rTargetSpeed_Y: REAL:=0;
AdditionalOutputs_DUT: PulseOutput_Linear_AdditionalOutputs_DUT;
bConfigureDUT: 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 := 31 ;
NETWORK_BODY
B(B_CONTACT,,bConfigureDUT,6,1,8,3,);
B(B_F,E_MOVE!,,17,0,23,4,,?DEN?D?AENO?C);
B(B_VARIN,,1,15,2,17,4,);
B(B_F,E_MOVE!,,17,8,23,12,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,15,10,17,12,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bOutput_Pulse_ForwardFalse,23,10,25,12,);
B(B_F,E_MOVE!,,17,12,23,16,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,,17,4,23,8,,?DEN?D?AENO?C);
B(B_VARIN,,TRUE,15,6,17,8,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bOutput_Pulse_ForwardTrue,23,6,25,8,);
B(B_VARIN,,TRUE,15,14,17,16,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.iChannel,23,2,25,4,);
B(B_F,E_MOVE!,,17,16,23,20,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,15,18,17,20,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bDutyRatio25,23,18,25,20,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bAccelerationSteps60,23,14,25,16,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bFrequencyRange_191Hz_100kHz,23,22,25,24,);
B(B_VARIN,,TRUE,15,22,17,24,);
B(B_F,E_MOVE!,,17,20,23,24,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,,17,24,23,28,,?DEN?D?AENO?C);
B(B_VARIN,,TRUE,15,26,17,28,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bExecuteInInterrupt,23,26,25,28,);
L(8,2,17,2);
L(12,18,17,18);
L(12,14,17,14);
L(12,10,17,10);
L(12,6,17,6);
L(12,2,12,18);
L(12,18,12,22);
L(12,22,17,22);
L(12,22,12,26);
L(12,26,17,26);
L(1,2,6,2);
L(1,0,1,31);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 12 ;
NETWORK_BODY
B(B_FB,PulseOutput_Linear_FB!,PulseOutput_Linear,15,1,33,12,,?BbExecute?BbAbsolute?BdiInitialAndFinalSpeed?BdiTargetSpeed?BdiAccelerationTime?BdiDecelerationTime?BdiTargetValue_X?BdiTargetValue_Y?BdutChannelConfiguration_X_Y?AbError?ArInitialAndFinalSpeed_X?ArTargetSpeed_X?ArInitialAndFinalSpeed_Y?ArTargetSpeed_Y?AdutAdditionalOutputs);
B(B_VARIN,,bExecute,13,2,15,4,);
B(B_VARIN,,bAbsolute,13,3,15,5,);
B(B_VARIN,,600,13,4,15,6,);
B(B_VARIN,,12000,13,5,15,7,);
B(B_VARIN,,300,13,6,15,8,);
B(B_VARIN,,600,13,7,15,9,);
B(B_VARIN,,1000,13,8,15,10,);
B(B_VARIN,,2000,13,9,15,11,);
B(B_VARIN,,ChannelConfiguration_XY_DUT,13,10,15,12,);
B(B_VAROUT,,bError,33,2,35,4,);
B(B_VAROUT,,rInitialAndFinalSpeed_X,33,3,35,5,);
B(B_VAROUT,,rTargetSpeed_X,33,4,35,6,);
B(B_VAROUT,,rInitialAndFinalSpeed_Y,33,5,35,7,);
B(B_VAROUT,,rTargetSpeed_Y,33,6,35,8,);
B(B_VAROUT,,AdditionalOutputs_DUT,33,7,35,9,);
L(1,0,1,12);
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.bExecuteInInterrupt := FALSE;
(* FB *)
PulseOutput_Linear(bExecute := bExecute,
bAbsolute := bAbsolute,
diInitialAndFinalSpeed := 600,
diTargetSpeed := 12000,
diAccelerationTime := 300,
diDecelerationTime := 600,
diTargetValue_X := 150000,
diTargetValue_Y := 10000,
dutChannelConfiguration_X_Y := ChannelConfiguration_XY_DUT,
bError => bError,
diInitialAndFinalSpeed_X => diInitialAndFinalSpeed_X,
diTargetSpeed_X => diTargetSpeed_X,
diInitialAndFinalSpeed_Y => diInitialAndFinalSpeed_Y,
diTargetSpeed_Y => diTargetSpeed_Y,
dutAdditionalOutputs => AdditionalOutputs_DUT);