홈 복귀
이 명령은 지정한 DUT의 파라미터에 따라 원점복귀를 수행합니다. 이 채널의 제어 플래그가 FALSE이고 실행 조건이 TRUE이면 지정된 채널에서 펄스가 출력됩니다.
입력
데이터 테이블이 포함된 영역의 시작 어드레스
펄스 출력 채널:0-3
드라이브 시스템 전원이 켜진 후 내부 위치 값(경과 값)과 축의 기계적 위치 간의 차이가 있습니다. 사전에 이 차이를 결정할 수 없습니다. 내부 값은 축의 실제 위치 값과 동기화되어야 합니다. 위치 값이 알려진 참조점(원점)에서 등록된 상태에서 이는 원점복귀의 수단으로 완료됩니다.원점 복귀 명령 실행 중에 펄스는 원점 입력이 활성화될 때까지 계석 출력됩니다. I/O 할당은 사용한 채널에서 결정됩니다.홈 위치에 가까워지면 이동을 감속하려면 원점근방 입력을 지정하고 펄스 출력 제어 코드(sys_wHscOrPulseControlCode)를 저장하는 특수 데이터 레지스터의 비트 4를 TRUE로 설정하고 다시 FALSE로 설정합니다.원점 복귀가 완료되면 편차 카운터 클리어 출력을 TRUE로 설정할 수 있습니다.
두 가지 다른 작동 모드 중 하나를 선택합니다.
형식 0:
원점근방 입력 유무, 선언 유무 또는 선언 완료 여부와 관계없이 원점입력이 효과적입니다.
원점근방 입력 없음:
|
원점근방 입력 있음:
|
형식 1: 선언(원점근방 입력으로 시작)이 완료된 후에만 원점입력이 효과적입니다.
다음과 같은 사전 정의된 DUT 사용: 2023-03-15F177_PulseOutput_Home_Type0_DUT 또는 F177_PulseOutput_Home_Type1_DUT
DUT에서 F168_PulseOutput_Home_DUT 파라미터를 지정할 수 있습니다.
제어 코드
초기 속도
타겟 속도
가속 시간
감속 시간
크립 속도
편차 카운트 클리어 신호(출력 시간)
펄스 출력 특정
펄스 출력 주파수가 특정 가속 시간 및 특정 감속 시간에 따라 변경됩니다.
목표 및 초기 속도 간의 차이점은 램프 기울기를 결정합니다.
펄스는 듀티 25%를 사용하여 출력됩니다.
펄스 출력 방법 "펄스/방향"을 사용하면 방향 신호가 출력된 후에 펄스는 약 300ms로 출력됩니다. 모터 드라이버 특성도 동시에 고려해야 합니다.
일반 프로그래밍 정보
시스템 레지스터에서 원하는 채널의 "펄스 출력"을 설정합니다.
원점 입력이 발생하더라도 이 명령을 실행하면 펄스 출력이 시작됩니다.
가속 진행 중에 원점근방 입력이 활성화되면 감속이 시작됩니다.
편차 카운터 클리어 신호는 PLC 기종별로 전용 출력 번호에 할당됩니다.
주 프로그램과 인터럽트 프로그램 모두에 같은 채널 코드가 포함된 경우, 두 프로그램을 동시에 실행하지 마십시오.
펄스 출력 명령이 실행되고 펄스가 출력 중이면 해당 채널의 펄스 출력 제어 플래그(예: sys_bIsPulseChannel0Active)는 TRUE입니다. 다른 펄스 출력 명령이 실행되면 이 플래그는 더 이상 TRUE가 아닙니다.
프로그램이 RUN 모드에서 편집되면 펄스 출력이 정지하지만 프로그램 변경 후 다시 시작되어 다운로드됩니다.
위치결정 프로그램에 강제 정지 옵션을 통합하는 것이 좋습니다.
고속 카운터 제어 플래그 또는 펄스 출력 제어 플래그 상태는 스캔이 실행 중인 동안에 변경될 수 있습니다. 예를 들어, 수신된 바이트 수를 읽으면 스캔 1회에 다른 상태가 두 개 이상 있을 수 있습니다.
FP0R C16
채널 번호 |
편차 카운터 클리어 출력 |
원점입력 |
0 | Y6 | X4 |
1 | Y7 | X5 |
2 | – | X6 |
3 | – | X7 |
X4–X7 입력을 고속 카운터 입력 또는 원점 입력으로 사용할 수 있습니다.
Y6과 Y7을 채널 3의 펄스 출력 또는 채널 0과 1의 편차 카운터 클리어 출력으로 사용할 수 있습니다.
FP0R C32, T32, F32
채널 번호 |
편차 카운터 클리어 출력 |
원점입력 |
0 | Y8 | X4 |
1 | Y9 | X5 |
2 | YA | X6 |
3 | YB | X7 |
X4–X7 입력을 고속 카운터 입력 또는 원점 입력으로 사용할 수 있습니다.
글로벌 변수 리스트에서 프로젝트의 모든 POU에서 액세스할 수 있는 변수를 정의합니다.
DUT F177_PulseOutput_Home_Type1_DUT는 [FP library]에서 사전 정의됩니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR_EXTERNAL
X0_bMotorSwitch: BOOL:=FALSE;
(*at X0*)
END_VAR
VAR
diInitialSpeed: DINT:=1000;
diTargetSpeed: DINT:=5000;
diAccelerationTime: DINT:=3000;
diDecelerationTime: DINT:=3000;
diCreepSpeed: DINT:=5000;
dutHomeType1: F177_PulseOutput_Home_Type1_DUT:=dwControlCode := 16#0012,
diInitialSpeed := 0,
diTargetSpeed := 0,
diAccelerationTime := 0,
diDecelerationTime := 0,
diCreepSpeed := 0;
(*For ControlCode (16#0012):
1 = Forward
2 = Pulse/Sign forward on*)
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 24 ;
NETWORK_BODY
B(B_CONTACT,,X0_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,,dutHomeType1.diTargetSpeed,23,6,25,8,);
B(B_VARIN,,diTargetSpeed,15,6,17,8,);
B(B_VAROUT,,dutHomeType1.diAccelerationTime,23,10,25,12,);
B(B_VARIN,,diAccelerationTime,15,10,17,12,);
B(B_F,E_MOVE!,Instance,17,20,23,24,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diDeviationCounterClearSignalOutputTime,23,22,25,24,);
B(B_VARIN,,0,15,22,17,24,);
B(B_F,E_MOVE!,Instance,17,0,23,4,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diInitialSpeed,23,2,25,4,);
B(B_VARIN,,diInitialSpeed,15,2,17,4,);
B(B_F,E_MOVE!,Instance,17,12,23,16,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diDecelerationTime,23,14,25,16,);
B(B_VARIN,,diDecelerationTime,15,14,17,16,);
B(B_F,E_MOVE!,Instance,17,16,23,20,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diCreepSpeed,23,18,25,20,);
B(B_VARIN,,diCreepSpeed,15,18,17,20,);
L(7,2,7,6);
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,6,7,10);
L(7,10,7,22);
L(7,22,17,22);
L(7,14,17,14);
L(7,18,17,18);
L(1,0,1,24);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 12 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,8,5,10,7,R);
B(B_VARIN,,dutHomeType1,15,6,17,8,);
B(B_VARIN,,0,15,7,17,9,);
B(B_COMMENT,,Example for home position return,1,2,18,4,);
B(B_F,F177_PulseOutput_Home!,Instance,17,4,30,9,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
L(10,6,17,6);
L(1,6,8,6);
L(1,0,1,12);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(X0_bMotorSwitch) then
dutHomeType1.diInitialSpeed:=diInitialSpeed;
dutHomeType1.diTargetSpeed:=diTargetSpeed;
dutHomeType1.diAccelerationTime:=diAccelerationTime;
dutHomeType1.diDecelerationTime:=diDecelerationTime;
dutHomeType1.diCreepSpeed:=diCreepSpeed;
dutHomeType1.diDeviationCounterClearSignalOutputTime:=0;
END_IF;
(*Example for home position return*)
IF DF(X0_bMotorSwitch) then
F177_PulseOutput_Home(s_dutDataTable := dutHomeType1,
n_iPulseOutputChannel := 0);
END_IF;