사다리꼴 제어
이 명령은 지정한 DUT의 파라미터에 따라 자동으로 사다리꼴 제어를 수행합니다. 이 채널의 제어 플래그가 FALSE이고 실행 조건이 TRUE이면 지정된 채널에서 펄스가 출력됩니다.
입력
데이터 테이블이 포함된 영역의 시작 어드레스
FP-S, FP-X:
F171_PulseOutput_Trapezoidal_DUT
FP0R:
F171_PulseOutput_Trapezoidal_Type0_DUT
F171_PulseOutput_Trapezoidal_Type1_DUT
펄스 출력 채널:
FP-XH C30 T/P: 0~3
FP-XH C60 T/P: 0~5
FP-S: 0, 2
FP-X R: 0, 1
FP-XC14T: 0, 1, 2
FP-X C30T/C60T: 0, 1, 2, 3
FP0R: 0, 1, 2, 3
다음과 같은 사전 정의된 DUT 사용: F171_PulseOutput_Trapezoidal_DUT.
DUT에서 F168_PulseOutput_Home_DUT 파라미터를 지정할 수 있습니다.
초기 및 최종 속도
타겟 속도
가속/감속 시간
목표값
펄스 출력 제어 플래그
실행 조건
펄스 출력 주파수는 지정된 가속/감속 시간에 따라 변경됩니다.목표 및 초기 속도 간의 차이점은 램프 기울기를 결정합니다.
FP-X: 펄스 출력 명령이 실행되고 펄스가 출력 중이면 해당 채널의 펄스 출력 제어 플래그(예: sys_bIsPulseChannel0Active)는 TRUE입니다. 다른 펄스 출력 명령이 실행되면 이 플래그는 더 이상 TRUE가 아닙니다.
FPS: 고속 카운터 제어 플래그(예: sys_bIsHscChannel0ControlActive)와 펄스 출력 제어 플래그(예: sys_bIsPulseChannel0Active)가 같은 특수 내부 플래그 번호(예: R903A)에 할당됩니다. 따라서 고속 카운터 명령 또는 펄스 출력 명이 실행되면 사용된 채널의 고속 카운터 제어 플래그(예: sys_bIsHscChannel0ControlActive)와 펄스 출력 제어 플래그(예: sys_bIsPulseChannel0Active)는 TRUE입니다. 다른 고속 카운터 명령 또는 펄스 출력 명령이 실행되면 이 플래그는 더 이상 TRUE가 아닙니다.
FPS: 원 보간 제어 명령 F176_PulseOutput_Center를 실행하면 원 보간 제어 플래그(sys_bIsCircularInterpolationActive)가 TRUE로 설정됩니다. 이 플래그 상태는 목표 값에 도달할 때까지 유지됩니다(실행 조건이 TRUE가 아니더라도). 이 시간 동안에는 다른 펄스 출력 명령을 실행할 수 없습니다.
FPS: 펄스 출력 채널에 할당된 모든 고속 카운터를 시스템 레지스터의 "미사용"으로 설정합니다.
FP-X: 시스템 레지스터에서 원하는 채널의 "펄스 출력"을 설정합니다.
위치결정 프로그램에 강제 정지 옵션을 통합하는 것이 좋습니다.
다음과 같은 사전 정의된 DUT 사용: F171_PulseOutput_Trapezoidal_Type0_DUT(최대 속도 = 최초 목표 속도) 또는 F171_PulseOutput_Trapezoidal_Type1_DUT(최대 속도 = 50kHz).
펄스 출력 중에 목표 시간을 변경할 수 있습니다.
두 제어 모드를 사용할 수 있습니다.
형식 0: 최초로 지정된 목표 시간 범위 내에서 속도를 변경할 수 있습니다.
형식 1: 최대 속도(50kHz) 범위 내에서 속도를 변경할 수 있습니다.
DUT에서 F168_PulseOutput_Home_DUT 파라미터를 지정할 수 있습니다.
펄스 출력 특정
초기 및 최종 속도
타겟 속도
가속 시간
감속 시간
목표값
펄스 출력 제어 플래그
실행 조건
감속 정지 요청
형식 0:
타겟 속도와 초기 속도 간의 차이는 가속 램프 기울기로 판별됩니다.타겟 속도와 최종 속도 간의 차이는 감속 램프 기울기로 판별됩니다.
형식 1:
최대 속도 50kHz와 초기 속도 간의 차이는 가속 램프 기울기로 판별됩니다.최대 속도 50kHz와 최종 속도 간의 차이는 감속 램프 기울기로 판별됩니다.
펄스는 듀티 25%를 사용하여 출력됩니다.펄스 출력 방법 "펄스/방향"을 사용하면 방향 신호가 출력된 후에 펄스는 약 300ms로 출력됩니다. 모터 드라이버 특성도 동시에 고려해야 합니다.
감속 정지
감속 정지를 수행하려면 펄스 출력 제어 코드를 저장하는 데이터 레지스터의 비트 5를 FALSE 에서 TRUE로 설정합니다(예: MOVE(16#120, sys_wHscOrPulseControlCode);
).가속 중에 감속 정지가 요청되면 목표 속도에서 동일한 감속 경사로 감속이 수행됩니다.
펄스 출력 중에 목표 속도 변경
형식 1: 최대 속도(50kHz) 범위 내에서 속도를 변경할 수 있습니다.
타겟 속도
목표 속도 1차 변경
목표 속도 2차 변경
가속 시간
가속
감속
감속 시간
펄스 출력 제어 플래그
실행 조건
속도를 변경하려면 실행 조건을 TRUE로 전환합니다.
형식 0:
시작 시의 목표 속도보다 큰 값이 지정되면 시작 시의 목표 속도로 보정됩니다.
형식 1:
목표 속도가 50kHz보다 큰 값으로 설정되면 50kHz로 보정됩니다.
경과 값이 가속 중에 가속 금지 영역 시작 위치(예: sys_diPulseChannel0AccelerationForbiddenAreaStartingPosition)를 교차하면 가속을 수행할 수 없습니다.
감속 속도는 보정된 최종 속도 이하일 수 없습니다.
이 명령을 사용하여 프로그램 온라인 편집을 시작하자마자(즉, RUN 모드에서) 펄스 출력이 정지합니다.
주 프로그램과 인터럽트 프로그램 모두에 같은 채널 코드가 포함된 경우, 두 프로그램을 동시에 실행하지 마십시오.
위치결정 프로그램에 강제 정지 옵션을 통합하는 것이 좋습니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
bMotorSwitch: BOOL:=FALSE;
dutTrapez: F171_PulseOutput_Trapezoidal_DUT:=dwControlCode := 16#1100;
(*Control code:
Digit 3: 1=Duty ratio 25%
Digit 2: 1=Frequency range 48Hz-100kHz
Digit 1: 0=Relative value control
Digit 0: 0=CW/CCW*)
END_VAR
VAR_EXTERNAL
X0_bMotorSwitch: BOOL:=FALSE;
(*at X0*)
END_VAR
VAR
diInitialSpeed: DINT:=100;
diTargetSpeed: DINT:=2000;
diAccelerationTime: DINT:=300;
diTargetValue: DINT:=10000;
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 16 ;
NETWORK_BODY
B(B_CONTACT,,bMotorSwitch,4,1,6,3,R);
B(B_F,E_MOVE!,Instance,17,4,23,8,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,Instance,17,8,23,12,,?DEN?D?AENO?C);
B(B_VAROUT,,dutTrapez.diTargetSpeed,23,6,25,8,);
B(B_VARIN,,diTargetSpeed,15,6,17,8,);
B(B_VAROUT,,dutTrapez.diAccelerationAndDecelerationTime,23,10,25,12,);
B(B_VARIN,,diAccelerationTime,15,10,17,12,);
B(B_F,E_MOVE!,Instance,17,12,23,16,,?DEN?D?AENO?C);
B(B_VAROUT,,dutTrapez.diTargetValue,23,14,25,16,);
B(B_VARIN,,diTargetValue,15,14,17,16,);
B(B_F,E_MOVE!,Instance,17,0,23,4,,?DEN?D?AENO?C);
B(B_VAROUT,,dutTrapez.diInitialAndFinalSpeed,23,2,25,4,);
B(B_VARIN,,diInitialSpeed,15,2,17,4,);
L(7,2,7,6);
L(7,6,7,10);
L(1,2,4,2);
L(6,2,7,2);
L(7,2,17,2);
L(7,6,17,6);
L(7,10,17,10);
L(7,10,7,14);
L(7,14,17,14);
L(1,0,1,16);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_CONTACT,,bMotorSwitch,4,2,6,4,R);
B(B_VARIN,,dutTrapez,14,3,16,5,);
B(B_VARIN,,0,14,4,16,6,);
B(B_F,F171_PulseOutput_Trapezoidal!,Instance,16,1,31,6,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
L(6,3,16,3);
L(1,3,4,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(bMotorSwitch) then
dutTrapez.diInitialAndFinalSpeed:=diInitialSpeed;
dutTrapez.diTargetSpeed:=diTargetSpeed;
dutTrapez.diAccelerationDecelerationTime:=diAccelerationTime;
dutTrapez.diDeviationCounterClearSignalOutputTime:=10;
END_IF;
IF DF(bMotorSwitch) then
F171_PulseOutput_Trapezoidal(s_dutDataTable := dutTrapez,
n_iPulseOutputChannel :=0);
END_IF;