FP_DECODE

16진수 -> 비트 상태로 디코딩

이 FP 명령은 트리거 ENTRUE이면 s1_Start에서 지정한 데이터 콘텐츠를 s2_Control의 콘텐츠에 따라 디코딩합니다. 디코딩 결과는 d_Start에서 시작하는 영역에 저장됩니다.

FP_DECODEFP_ENCODE의 역 명령입니다.

파라미터

입력

s1_Start (WORD)

디코딩할 소스 영역 또는 해당 정수

s2_Control (WORD)

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

출력

d_Start (WORD)

디코딩된 데이터를 저장하는 시작 어드레스(대상)

주석

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

  • s2_Control=16#404

    1.  (1) 소스
    2.  (2) 비트 위치
    3.  (3) 비트 위치 4
    4.  (4) 4개의 비트(비트 4-7, 2진수: 2#0111 또는 10진수: 7)(s1_Start의 비트)가 트리거가 TRUE일 때 디코딩됩니다.
    5.  (5) 대상

      디코딩된 데이터 TRUEd_Start의 비트 위치 7에 저장됩니다.

      비트 7을 제외한 모든 비트는 0으로 채워집니다.

    s1_Start에서 지정한 영역의 nH 비트에서 2^nL 비트 세그먼트의 콘텐츠가 디코딩됩니다(여기서 nL은 디코딩할 비트 수).

    디코딩된 결과는 d_Start에서 지정한 영역부터 시작하여 2^nL 비트 세그먼트에 저장됩니다(여기서 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#0

    0

    16#1

    1

    16#1

    1

    16#2

    2

    16#2

    2

    16#3

    3

    16#3

    3

    16#4

    4

    16#4

    4

    16#5

    5

    16#5

    5

    16#6

    6

    16#6

    6

    16#7

    7

    16#7

    7

    16#8

    8

    16#8

    8

    16#9

    9

    16#A

    10

    16#B

    11

    16#C

    12

    16#D

    13

    16#E

    14

    16#F

    15

  • 비트 수와 디코딩 결과로 발생한 데이터 영역 간의 관계

    디코딩할 바이트 수

    결과에 필요한 데이터 영역

    디코딩된 비트 수(결과)

    1

    1워드

    2비트 1)

    2

    1워드

    4비트 1)

    3

    1워드

    8비트 1)

    4

    1워드

    16비트

    5

    2워드

    32비트

    6

    4워드

    64비트

    7

    8워드

    128비트

    8

    16워드

    256비트

    1) 결과에 필요한 데이터 영역에서 유효하지 않은 비트는 0으로 채워집니다.

  • 디코딩된 데이터의 예

    4비트 데이터를 디코딩할 경우, 디코딩된 결과의 16비트 데이터는 아래와 같이 표시됩니다.

    • 디코딩 조건: s2_Control

    • 시작 비트 위치 0: 16#0

    • 디코딩할 비트 수: 16#4(4비트)

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

    디코딩된 결과

    16진수

    10진수

    16#0000

    0

    0000 0000 0000 0001

    16#0001

    1

    0000 0000 0000 0010

    16#0010

    2

    0000 0000 0000 0100

    16#0011

    3

    0000 0000 0000 1000

    16#0100

    4

    0000 0000 0001 0000

    16#0101

    5

    0000 0000 0010 0000

    16#0110

    6

    0000 0000 0100 0000

    16#0111

    7

    0000 0000 1000 0000

    16#1000

    8

    0000 0001 0000 0000

    16#1001

    9

    0000 0010 0000 0000

    16#1010

    10

    0000 0100 0000 0000

    16#1011

    11

    0000 1000 0000 0000

    16#1100

    12

    0001 0000 0000 0000

    16#1101

    13

    0010 0000 0000 0000

    16#1110

    14

    0100 0000 0000 0000

    16#1111

    15

    1000 0000 0000 0000

에러 플래그

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

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

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

  • 디코딩된 결과에 사용되는 메모리 영역이 제한을 초과하는 경우.

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

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

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

  • 디코딩된 결과에 사용되는 메모리 영역이 제한을 초과하는 경우.

POU 헤더Copy code to clipboard

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

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

POU 본문

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

LD 본문Copy code to clipboard

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,8,1,10,3,);
B(B_VARIN,,wInput_value,11,2,13,4,);
B(B_VARIN,,wControlCode,11,3,13,5,);
B(B_VAROUT,,wConversionResult,21,2,23,4,);
B(B_F,FP_DECODE!,,13,0,21,5,,?DEN?Ds1_Start?Ds2_Control?AENO?Cd_Start);
L(10,2,13,2);
L(1,2,8,2);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문Copy code to clipboard

IF start then
    FP_DECODE(s1_Start := wInput_value, 
              s2_Control := wControlCode, 
              d_Start => wConversionResult);
END_IF;

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