FP_ENCODE

エンコードビットステート -> Hex

このFP命令は、トリガENTRUEのとき、s2_Controlで指定された内容に従って、s1_Startで指定されたデータ内容をエンコードします。演算結果は、指定されたビット位置を先頭とするd_Startで指定された16ビット格納先エリアに格納されます。エンコードされた結果に指定された領域内の無効なビットは、ゼロで埋められます。

FP_ENCODEは、FP_DECODEの逆命令です。

パラメータ

入力

s1_Start (WORD)

エンコードされる16ビットエリアの先頭(ソース)

s2_Control (WORD)

エンコードされるデータの先頭ビット位置とビット数を指定するコントロールデータ

出力

d_Start (WORD)

エンコードされたデータを格納する16ビットエリア(格納先)

解説

  • 変数s1_Starts2_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) 格納先

      トリガENTRUEの場合に、エンコードされた結果8(10進)はd_Startに格納されます。

    6.  (6) 先頭ビット位置
    7.  (7) ビット位置8~15はゼロで埋められます。
    8.  (8) エンコード結果:8

    演算の説明

    s1_Startで指定されるエリアの先頭にある2^nLビットセグメントの内容がエンコードされます(nLはエンコードするビット数)。

    エンコードされた結果は、nHビットとして指定されるビットから始まる8ビットに10進データとして格納されます(nHは変換開始ビット)。結果用に指定されたエリア内の無効ビットは、ゼロで埋められます。

    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を保持)
  • インデックス修飾時にエリアを超えたとき

  • エンコード/デコードされるビット長nL1 £ nL £ 8の場合

  • 変換開始ビットnHとエンコード/デコードされるビット長nL1 £ nH + nL £ 16の場合

  • エンコードするデータがすべてゼロであるとき。

sys_bIsOperationErrorNonHold (1回のスキャンに対してTRUE)
  • インデックス修飾時にエリアを超えたとき

  • エンコード/デコードされるビット長nL1 £ nL £ 8の場合

  • 変換開始ビットnHとエンコード/デコードされるビット長nL1 £ nH + nL £ 16の場合

  • エンコードするデータがすべてゼロであるとき。

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このページに関するフィードバックお問い合わせ窓口