홈 복귀
이 명령은 지정한 DUT의 파라미터에 따라 원점복귀를 수행합니다. 이 채널의 제어 플래그가 FALSE이고 실행 조건이 TRUE이면 지정된 채널에서 펄스가 출력됩니다.
입력
데이터 테이블이 포함된 영역의 시작 어드레스
펄스 출력: 0 또는 1
드라이브 시스템 전원이 켜진 후 내부 위치 값(경과 값)과 축의 기계적 위치 간의 차이가 있습니다. 사전에 이 차이를 결정할 수 없습니다. 내부 값은 축의 실제 위치 값과 동기화되어야 합니다. 위치 값이 알려진 참조점(원점)에서 등록된 상태에서 이는 원점복귀의 수단으로 완료됩니다. 원점 복귀 명령 실행 중에 펄스는 원점 입력이 활성화될 때까지 계석 출력됩니다. I/O 할당은 사용한 채널에서 결정됩니다. 홈 위치에 가까워지면 이동을 감속하려면 원점근방 입력을 지정하고 펄스 출력 제어 코드(sys_wHscOrPulseControlCode)를 저장하는 특수 데이터 레지스터의 비트 4를 TRUE로 설정하고 다시 FALSE로 설정합니다. 원점 복귀 중의 경과 값 영역 값은 현재 값과 다릅니다. 복귀가 완료되면 경과 값은 0으로 변경됩니다.
두 가지 다른 작동 모드 중 하나를 선택합니다.
형식 1: 원점근방 입력 유무, 선언 유무 또는 선언 완료 여부와 관계없이 원점입력이 효과적입니다.
원점근방 입력 없음:
원점근방 입력 있음:
형식 2: 선언(원점근방 입력으로 시작)이 완료된 후에만 원점입력이 효과적입니다.
DUT에서 F168_PulseOutput_Home_DUT 파라미터를 지정할 수 있습니다. F168_PulseOutput_Home_DUT
제어 코드
초기 및 최종 속도
타겟 속도
가속/감속 시간
펄스 정지(고정)
펄스 출력 주파수는 지정된 가속/감속 시간에 따라 변경됩니다.
목표 및 초기 속도 간의 차이점은 램프 기울기를 결정합니다.
펄스 출력 채널에 할당된 모든 고속 카운터를 시스템 레지스터의 "미사용"으로 설정합니다.
프로그램이 RUN 모드에서 편집되면 펄스 출력이 정지하지만 프로그램 변경 후 다시 시작되어 다운로드됩니다.
고속 카운터 제어 플래그(예: sys_bIsHscChannel0ControlActive)와 펄스 출력 제어 플래그(예: sys_bIsPulseChannel0Active)가 같은 특수 내부 플래그 번호(예: R903A)에 할당됩니다. 따라서 고속 카운터 명령 또는 펄스 출력 명이 실행되면 사용된 채널의 고속 카운터 제어 플래그(예: sys_bIsHscChannel0ControlActive)와 펄스 출력 제어 플래그(예: sys_bIsPulseChannel0Active)는 TRUE입니다. 다른 고속 카운터 명령 또는 펄스 출력 명령이 실행되면 이 플래그는 더 이상 TRUE가 아닙니다.
원점 입력이 발생하더라도 이 명령을 실행하면 펄스 출력이 시작됩니다.
가속 진행 중에 원점근방 입력이 활성화되면 감속이 시작됩니다.
주 프로그램과 인터럽트 프로그램 모두에 같은 채널 코드가 포함된 경우, 두 프로그램을 동시에 실행하지 마십시오.
위치결정 프로그램에 강제 정지 옵션을 통합하는 것이 좋습니다.
고속 카운터 제어 플래그 또는 펄스 출력 제어 플래그 상태는 스캔이 실행 중인 동안에 변경될 수 있습니다. 예를 들어, 수신된 바이트 수를 읽으면 스캔 1회에 다른 상태가 두 개 이상 있을 수 있습니다.
FP0 호환 모드에서 FP0R을 실행하려면 FP0 프로그램을 FP0R에 다운로드하면 됩니다. 다음 제한 사항을 참조해 주십시오.
FP0R은 경과 값과 목표 값에 대해 부호가 있는 32-비트 데이터를 지원하고, FP0은 부호가 있는 24-비트 데이터를 지원합니다. FP0 호환 모드에서 데이터가 FP0 범위를 초과하더라도 계산과 펄스 출력은 계속 실행됩니다.
듀티는 명령 설정에 관계없이 항상 25%입니다. 펄스 출력 방법 "펄스/방향"을 사용하면 방향 신호가 출력된 후에 펄스는 약 300ms로 출력됩니다. 모터 드라이버 특성도 동시에 고려해야 합니다.
FP0R은 "계산 없음" 설정을 지원하지 않습니다. 대신 FP0 펄스 출력 명령으로 수행되는 증분 계산은 "계산 없음"으로 설정됩니다.
최대 펄스 출력 주파수는 10000Hz입니다.
펄스 출력 명령이 보통 출력으로 사용 중인 출력을 사용하지 않는지 확인합니다.
PLC 기종(C10, C14, C16, C32 및 T32)이 정확히 일치하면 FP0 프로그램이 FP0 호환 모드에서만 실행될 수 있습니다. F32 형식 FP0R에서는 FP0 호환 모드를 사용할 수 없습니다.
채널 및 펄스 출력 번호
채널 번호 | 펄스 출력 | 펄스 출력 방법 |
0 |
Y0 |
펄스 |
Y2 |
방향 | |
1 |
Y1 |
펄스 |
Y3 |
방향 |
사용한 메모리 영역의 시스템 변수. 괄호 안의 값은 FP0 T32에 유효합니다.
설명 |
시스템 변수 |
|
---|---|---|
펄스 출력: 채널의 제어 플래그 |
0 |
sys_bIsPulseChannel0Active |
1 |
sys_bIsPulseChannel1Active |
|
펄스 출력: 채널의 경과 값 |
0 |
sys_diPulseChannel0ElapsedValue |
1 |
sys_diPulseChannel1ElapsedValue |
|
펄스 출력: 채널의 목표 값 |
0 |
sys_diPulseChannel0TargetValue |
1 |
sys_diPulseChannel1TargetValue |
|
고속카운터 또는 펄스 출력 제어코드 |
sys_wHscOrPulseControlCode |
채널 번호 | 원점입력 |
0 |
X0 |
1 |
X1 |
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR_EXTERNAL
X0_bMotorSwitch: BOOL:=FALSE;
(*at X0*)
END_VAR
VAR
dutHome: F168_PulseOutput_Home_DUT:=wControlCode := 16#102,
iInitialAndFinalSpeed := 0,
iTargetSpeed := 0,
iAccelerationAndDecelerationTime := 0;
iInitialAndFinalSpeed: INT:=3000;
iTargetSpeed: INT:=7000;
iAccelerationTime: INT:=300;
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 13 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,4,2,6,4,R);
B(B_F,E_MOVE!,Instance,17,1,23,5,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.iAccelerationAndDecelerationTime,23,3,25,5,);
B(B_F,E_MOVE!,Instance,17,5,23,9,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.iInitialAndFinalSpeed,23,7,25,9,);
B(B_F,E_MOVE!,Instance,17,9,23,13,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.iTargetSpeed,23,11,25,13,);
B(B_VARIN,,iAccelerationTime,15,3,17,5,);
B(B_VARIN,,iInitialAndFinalSpeed,15,7,17,9,);
B(B_VARIN,,iTargetSpeed,15,11,17,13,);
L(1,3,4,3);
L(6,3,17,3);
L(8,3,8,11);
L(8,11,17,11);
L(8,7,17,7);
L(1,0,1,13);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,4,1,6,3,R);
B(B_F,F168_PulseOutput_Home!,Instance,11,0,24,5,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dutHome,9,2,11,4,);
B(B_VARIN,,0,9,3,11,5,);
L(1,2,4,2);
L(6,2,11,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(X0_bMotorSwitch) then
dutHome.iInitialAndFinalSpeed:=iInitialAndFinalSpeed
dutHome.iTargetSpeed:=iTargetSpeed
dutHome.iAccelerationAndDecelerationTime:=iAccelerationTime
END_IF;
IF DF(X0_bMotorSwitch) then
F168_PulseOutput_Home(s_dutDataTable := dutHome,
n_iPulseOutputChannel :=0);
END_IF;