F165_HighSpeedCounter_Cam

FP0R의 캠 제어

이 명령은 고속 카운터의 최대 목표 값 31개를 사용하여 지정한 DUT의 파라미터에 따라 캠 제어를 수행합니다. 경과 값이 목표 값 중 하나와 일치할 때마다 인터럽트 프로그램을 실행할 수 있습니다.

파라미터

입력

iHscChannel* (INT)

고속 카운터 채널: 0–5

s_dutDataTable (ANY_DUT)

데이터 테이블이 포함된 영역의 시작 어드레스

샘플: F165_HighSpeedCounter_Cam_8_Values_DUT

출력

dutBitOutputs (ANY_DUT)

출력 워드 어드레스가 포함된 영역의 시작 어드레스(WR)(예: BOOL32_OVERLAPPING_DUT). diNumberOfTargetValuesAndOutputRelays를 사용하여 번호 설정에 따라 크기(16 또는 32비트)를 선택합니다.

주석

샘플과 같은 다음 DUT를 사용하여 자체 DUT 만들기: F165_HighSpeedCounter_Cam_8_Values_DUT

DUT에서 F168_PulseOutput_Home_DUT 파라미터를 지정할 수 있습니다.

  • 제어 코드

  • 출력의 워드 어드레스

  • 목표값 수

  • 목표값1

  • ...

  • 목표값n

  • 최대 목표값

y

고속 카운터 경과 값

14000

최대 목표값

(1)

실행 조건

10000

목표값4

(2)

고속카운터 제어 플래그

8000

목표값3

(3)

출력0-4

4000

목표값2

2000

목표값1

  • 경과 값이 목표 값 영역 n-n+1(증가 계산) 또는 n+1-n(감소 계산)에 있을 때마다 해당 출력 nTRUE입니다.

  • 위 예에서는 최대 목표 값 제어가 활성화되었습니다. 경과 값이 최대 목표 값에 도달하면 경과 값은 0으로 초기화되고 계산이 다시 시작합니다.

  • 중첩 DUT(예: BOOL32_OVERLAPPING_DUT)에서 출력의 워드 어드레스를 지정하고 dutBitOutputs에서 이 DUT를 적용합니다.

  • 최대 목표 값 31개를 지정할 수 있습니다.

  • 목표 값은 오름차순으로 정렬되어야 합니다. 두 번 사용될 수 있는 값은 없습니다.

  • 명령이 시작되면 모든 출력은 FALSE이고(TRUE로 전환된 출력 0 제외) 목표 값 1보다 작은 경과 값을 제공합니다. 그렇지 않으면 목표 값 영역에 해당하는 출력은 TRUE로 전환됩니다. 예: 현재 값이 목표 값 2 = -4000과 목표 값 3 = +4000 사이이면 출력 2TRUE입니다. 다음 예에서는 최대 목표 값 제어가 비활성화되었습니다. 경과 값이 마지막 목표 값에 도달하면 계산은 계속 되고 경과 값은 0으로 초기화되지 않습니다.

y

고속 카운터 경과 값

8000

목표값4

(1)

실행 조건

4000

목표값3

(2)

고속카운터 제어 플래그

-4000

목표값2

(3)

출력0-4

-10000

목표값1

INT0

인터럽트 프로그램 0

최대 목표값 제어

  • 이 명령은 최대 목표 값에 도달하면 최대 목표 값 제어를 통해 실행되어 경과 값을 0으로 초기화합니다. 최대 목표 값 제어는 F165_HighSpeedCounter_Cam_8_Values_DUT 제어 코드에서 활성화될 수 있습니다. 최대 목표 값 제어를 사용하지 않고 리셋 입력 또는 소프트웨어 리셋을 통해 경과 값을 초기화할 수도 있습니다.

  • 최대 목표 값 제어를 수행하려면 양의 정수를 모든 목표 값에 지정해야 합니다.

  • 최대 목표 값 제어를 사용하여 증가 또는 감소 계산:

y

고속 카운터 경과 값

14000

최대 목표값

(1)

실행 조건

10000

목표값4

(2)

고속카운터 제어 플래그

8000

목표값3

(3)

출력0-4

4000

목표값2

2000

목표값1

개요:

최대 목표 값 제어:

유효

무효(참고 참조)

증가 계산 중:

데이터 테이블의 포인터는 목표 값 1에서 마지막 목표 값으로 이동합니다.

경과 값이 최대 목표 값에 도달한 경우:

  • 포인터는 목표 값 1을 반환

  • 출력 0TRUE로 전환

  • 경과 값을 0으로 설정

경과 값이 마지막 목표 값에 도달한 경우:

  • 포인터는 목표 값 1을 반환

  • 출력 0TRUE로 전환

  • 경과 값은 계속 증가하고 링 카운터의 최솟값에서 다시 시작

감소 계산 중:

데이터 테이블의 포인터는 마지막 목표에서 대상 목표 값 1으로 이동합니다.

경과 값이 값 -1에 도달한 경우:

  • 포인터는 마지막 목표 값을 반환

  • 마지막 목표 값 영역에 해당하는 출력은 TRUE로 전환

  • 경과 값을 최대 목표 값으로 설정

경과 값이 값 -1에 도달한 경우:

  • 포인터는 목표 값 n을 반환

  • 마지막 목표 값 영역에 해당하는 출력은 TRUE로 전환

  • 경과 값은 계속 감소하고 링 카운터의 최댓값에서 다시 시작

주석

리셋 입력 또는 소프트웨어 리셋이 사용되지 않음

하드웨어 리셋 연산

채널

하드웨어 리셋 입력

0

X2

1

2

X5

3

인터럽트 연산

경과 값이 목표 값과 일치하면 인터럽트 프로그램이 실행됩니다. 작업 목록에 입력된 모든 인터럽트가 자동으로 활성화됩니다. 특수 인터럽트 프로그램 번호는 각 채널 번호에 할당됩니다.

채널

0

1

2

3

4

5

인터럽트 프로그램

0

1

3

4

6

7

일반 프로그래밍 정보

  • 시스템 레지스터에서 원하는 채널의 고속 카운터 입력을 선택합니다.

  • 고속 카운터 명령이 실행되면 사용한 채널의 고속 카운터 제어 플래그(예: sys_bIsHscChannel0ControlActive)는 TRUE로 전환됩니다. 같은 채널을 사용하여 다른 고속 카운터 명령을 실행하면 제어 플래그는 더 이상 TRUE가 아닙니다.

  • 명령 실행을 취소하려면 고속 카운터 제어 코드(sys_wHscOrPulseControlCode)를 저장하는 데이터 레지스터의 비트 3TRUE로 설정합니다. 그러면 고속 카운터 제어 플래그는 FALSE로 변경됩니다. 고속 카운터 명령 실행을 다시 활성화하려면 비트 3FALSE로 초기화합니다.

  • 명령 실행 중에 사용된 채널의 경과 값을 다시 쓰면 예상치 못한 연산이 발생할 수 있습니다.

  • 인접 목표 값 간의 시간 범위가 1ms보다 큰 지 확인합니다.

  • 명령이 주 프로그램에서 실행되면 인접 목표 값 사이의 최소 시간 범위가 스캔 시간보다 큰 지 확인합니다.

  • 명령이 인터럽트 프로그램에서 실행되면 인접 목표 값 사이의 최소 시간 범위가 인터럽트 프로그램의 최대 실행 시간보다 큰 지 확인합니다.

  • 최대 두 채널에서 이 명령을 동시에 실행할 수 있습니다.

  • 리셋 입력 또는 소프트웨어 리셋을 사용하고 있는 경우, 목표 값 1이 정수이고 ³1인지 확인합니다.

  • 최대 목표 값 제어가 초기화 입력 또는 소프트웨어 입력과 함께 사용되는 경우, 동시에 사용하지 마십시오.

  • 고속 카운터 제어 플래그 또는 펄스 출력 제어 플래그 상태는 스캔이 실행 중인 동안에 변경될 수 있습니다. 예를 들어, 수신된 바이트 수를 읽으면 스캔 1회에 다른 상태가 두 개 이상 있을 수 있습니다.

에러 플래그

sys_bIsOperationErrorHold(TRUE로 전환되어 TRUE로 유지됨)
  • 채널 번호 또는 데이터 테이블 값이 허용 범위를 벗어나는 경우
  • 고속 카운터가 시스템 레지스터에 설정되지 않은 경우
  • 목표 값 > 최대 목표 값인 경우.

  • 목표 값= 0인 경우.

  • 목표 값은 오름차순으로 정렬되지 않은 경우

sys_bIsOperationErrorNonHold(스캔 1회에 대해 TRUE로 전환)
  • 채널 번호 또는 데이터 테이블 값이 허용 범위를 벗어나는 경우
  • 고속 카운터가 시스템 레지스터에 설정되지 않은 경우
  • 목표 값 > 최대 목표 값인 경우.

  • 목표 값= 0인 경우.

  • 목표 값은 오름차순으로 정렬되지 않은 경우

최대 목표 값 제어 예

DUT

DUT F165_HighSpeedCounter_Cam_8_Values_DUTFP Library에서 사전 정의되고 샘플로 사용될 수 있습니다.

글로벌 변수

글로벌 변수 리스트에서 프로젝트의 모든 POU에서 액세스할 수 있는 변수를 정의합니다.

POU 헤더

이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다.모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.

	VAR
		bStartCam: BOOL:=FALSE;
		dut_F165_CAM_Example1: F165_Cam_Example1_4_Values_DUT;
	END_VAR
	VAR_EXTERNAL
		WR0_bits_F165_CAM_Examples: BOOL16_OVERLAPPING_DUT;
	END_VAR

POU 본문

변수 bStartCamTRUE로 변환되면 함수가 실행됩니다.

LD 본문

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_CONTACT,,sys_bIsFirstScan,5,2,7,4,);
B(B_F,E_MOVE!,Instance,14,1,20,5,,?DEN?D?AENO?C);
B(B_VARIN,,0,12,3,14,5,);
B(B_VAROUT,,sys_diHscChannel0ElapsedValue,20,3,22,5,);
B(B_COMMENT,,Reset the elapsed value,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,3);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_F,F165_HighSpeedCounter_Cam!,Instance,14,1,28,6,,?DEN?HiHscChannel?Ds_dutDataTable?AENO?CdutBitOutputs);
B(B_VARIN,,0,12,3,14,5,);
B(B_VARIN,,dut_F165_CAM_Example1,12,4,14,6,);
B(B_VAROUT,,WR1_dut_CAM1,28,3,30,5,);
B(B_CONTACT,,bStartCam,5,2,7,4,R);
B(B_COMMENT,,Start the cam control,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

IF (sys_bIsFirstScan) then
    sys_diHscChannel0ElapsedValue:=0;
END_IF;
IF DF(bStartCam) then
    F165_HighSpeedCounter_Cam(iHscChannel := 0, 
      s_dutDataTable := dut_F165_CAM_Example1, 
      dutBitOutputs => WR0_bits_F165_CAM_Examples);
END_IF;

최대 타겟 값 제어 없는 예제

DUT

DUT F165_HighSpeedCounter_Cam_8_Values_DUTFP Library에서 사전 정의되고 샘플로 사용될 수 있습니다.

POU 헤더

VAR
		bStartCam: BOOL:=FALSE;
		dut_F165_CAM_Example2: F165_Cam_Example2_4_Values_DUT;
	END_VAR
	VAR_EXTERNAL
		WR0_bits_F165_CAM_Examples: BOOL16_OVERLAPPING_DUT;
	END_VAR

POU 본문

변수 bStartCamTRUE로 설정되면 함수가 실행됩니다.

LD 본문

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_CONTACT,,sys_bIsFirstScan,5,2,7,4,);
B(B_F,E_MOVE!,Instance,14,1,20,5,,?DEN?D?AENO?C);
B(B_VARIN,,0,12,3,14,5,);
B(B_VAROUT,,sys_diHscChannel0ElapsedValue,20,3,22,5,);
B(B_COMMENT,,Reset the elapsed value,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,3);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_F,F165_HighSpeedCounter_Cam!,Instance,14,1,28,6,,?DEN?HiHscChannel?Ds_dutDataTable?AENO?CdutBitOutputs);
B(B_VARIN,,0,12,3,14,5,);
B(B_VARIN,,dut_F165_CAM_Example2,12,4,14,6,);
B(B_VAROUT,,WR0_bits_F165_CAM_Examples,28,3,30,5,);
B(B_CONTACT,,bStartCam,5,2,7,4,R);
B(B_COMMENT,,Start the cam control,1,0,21,1,);
L(7,3,14,3);
L(1,3,5,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

IF (sys_bIsFirstScan) then
    sys_diHscChannel0ElapsedValue:=0;
END_IF;
IF DF(bStartCam) then
    F165_HighSpeedCounter_Cam(iHscChannel := 0, 
      s_dutDataTable := dut_F165_CAM_Example2, 
      dutBitOutputs => WR0_bits_F165_CAM_Examples);
END_IF;

최종 수정일: 2022-06-29이 페이지에 대한 피드백Panasonic 직통 전화