FP_ENCODE

비트 상태 인코딩 -> 16진수

이 FP 명령은 트리거 ENTRUE이면 s1_Start에서 지정한 데이터 콘텐츠를 s2_Control의 콘텐츠에 따라 인코딩합니다. 인코딩 결과는 지정된 비트 위치에서 시작하여 d_Start에서 지정한 16비트 대상 영역에 저장됩니다. 인코딩 결과에 대해 지정된 영역의 잘못된 비트는 0으로 채워집니다.

FP_ENCODEFP_DECODE의 역 명령입니다.

파라미터

입력

s1_Start (WORD)

인코딩할 시작 16비트 영역(소스)

s2_Control (WORD)

비트 위치 시작을 지정하는 제어 데이터 및 인코딩할 비트 수

출력

d_Start (WORD)

인코딩 데이터 저장을 위한 16비트 영역(대상)

주석

  • 변수 s1_Start, s2_Controld_Start의 데이터 형식은 같아야 합니다.

  • : s2_Control=16#0005

    16#

    0

    0

    0

    5

     

    인코딩할 비트 수: 25= 32비트

    인코딩할 데이터의 시작 비트 위치: 비트 위치 0

    1.  (1) 소스
    2.  (2) 비트 위치
    3.  (3) 16#0005에서 지정한 32비트
    4.  (4) 32비트 데이터의 8번째 비트는 TRUE입니다.
    5.  (5) 대상

      인코딩된 결과 8(10진수)은 트리거 ENTRUE이면 d_Start에 저장됩니다.

    6.  (6) 시작 비트 위치
    7.  (7) 비트 위치 8–15는 0으로 채워집니다.
    8.  (8) 인코딩된 결과: 8

    프로세스 설명

    s1_Start에서 지정한 영역의 시작 부분에 있는 2^nL비트 세그먼트의 콘텐츠가 인코딩됩니다(여기서 nL은 인코딩할 비트 수임).

    인코딩된 결과는 nH비트로 지정된 비트에서 시작하는 8개 비트로 10진수 데이터로 저장됩니다(여기서 nH는 변환 시작 비트). 결과로 지정된 영역에서 유효하지 않은 비트는 0으로 채워집니다.

    s2_Control에 대한 설명

    s2_Control은 대상 데이터의 시작 비트 위치와 인코딩할 비트 수를 16진수 데이터를 사용하여 지정합니다.

    1.  (1) 16비트 데이터
    2.  (2) 비트 수 0–15

    "-"로 표시된 비트는 유효하지 않습니다.

     

    설정값

    16#0–16#F

    (3)

    인코딩된 대상 데이터의 시작 비트 위치

     

    설정값

    16#0–16#8

    (4)

    인코딩된 비트 수

    16#0

    0

     

    16#1

    2

    16#1

    1

    16#2

    4

    16#2

    2

    16#3

    8(1바이트)

    16#3

    3

    16#4

    16(1워드)

    16#4

    4

    16#5

    32(2워드)

    16#5

    5

    16#6

    64(4워드)

    16#6

    6

    16#7

    128(8워드)

    16#7

    7

    16#8

    256(16워드)

    16#8

    8

    16#9

    9

    16#A

    10

    16#B

    11

    16#C

    12

    16#D

    13

    16#E

    14

    16#F

    15

    인코딩된 예

    16비트 데이터(nL=4)를 인코딩할 경우, 인코딩 결과는 아래와 같이 표시됩니다.

    인코딩할 데이터(4비트)

    인코딩된 결과

    16진수

    10진수

    0000 0000 0000 0001

    16#0000

    0

    0000 0000 0000 0010

    16#0001

    1

    0000 0000 0000 0100

    16#0010

    2

    0000 0000 0000 1000

    16#0011

    3

    0000 0000 0001 0000

    16#0100

    4

    0000 0000 0010 0000

    16#0101

    5

    0000 0000 0100 0000

    16#0110

    6

    0000 0000 1000 0000

    16#0111

    7

    0000 0001 0000 0000

    16#1000

    8

    0000 0010 0000 0000

    16#1001

    9

    0000 0100 0000 0000

    16#1010

    10

    0000 1000 0000 0000

    16#1011

    11

    0001 0000 0000 0000

    16#1100

    12

    0010 0000 0000 0000

    16#1101

    13

    0100 0000 0000 0000

    16#1110

    14

    1000 0000 0000 0000

    16#1111

    15

에러 플래그

sys_bIsOperationErrorHold(TRUE로 전환되어 TRUE로 유지됨)
  • 인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.

  • 1 £ nL £ 8인 경우. 여기서 nL은 인코딩/디코딩할 비트 수임.

  • 1 £ nH + nL £ 16인 경우. 여기서 nH는 변환 시작 비트이고 nL은 인코딩/디코딩할 비트 수임.

  • 인코딩할 데이터가 모두 0인 경우.

sys_bIsOperationErrorNonHold(스캔 1회에 대해 TRUE로 전환)
  • 인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.

  • 1 £ nL £ 8인 경우. 여기서 nL은 인코딩/디코딩할 비트 수임.

  • 1 £ nH + nL £ 16인 경우. 여기서 nH는 변환 시작 비트이고 nL은 인코딩/디코딩할 비트 수임.

  • 인코딩할 데이터가 모두 0인 경우.

POU 헤더

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

	VAR
		bStart: BOOL:=FALSE;
			(*activates the function*)
		wInput_value: WORD:=2#0000000001000000;
		wControlCode: WORD:=16#0003;
			(*specifies the encodation*)
		wOutput_value: WORD:=0;
			(*result after a 0->1 leading
edge from start:
2#0000000000000110*)
	END_VAR

POU 본문

변수 bStartTRUE로 설정되면 펑션이 실행됩니다.

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,,bStart,6,1,8,3,);
B(B_VARIN,,wInput_value,10,2,12,4,);
B(B_VARIN,,wControlCode,10,3,12,5,);
B(B_VAROUT,,wOutput_value,20,2,22,4,);
B(B_F,FP_ENCODE!,,12,0,20,5,,?DEN?Ds1_Start?Ds2_Control?AENO?Cd_Start);
L(1,2,6,2);
L(8,2,12,2);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

IF bStart then
    FP_ENCODE(s1_Start := wInput_value, 
              s2_Control := wControlCode, 
              d_Start => wOutput_value);
END_IF;

최종 수정일: 2023-04-13이 페이지에 대한 피드백Panasonic 직통 전화