F165_HighSpeedCounter_Cam

FP0Hのカム制御

この命令は、DUT(構造体)のパラメータで指定されたとおり、カム制御を実行します。高速カウンタの経過値に従って最大32の目標値を指定することができます。カム出力ごとに、目標位置はONとOFFの設定値ペアとして設定されます。

経過値が目標位置に一致する度に、割り込みプログラムを実行することもできます。

パラメータ

入力

iHscChannel* (INT)

高速カウンタチャンネル: 0~3

s_dutDataTable (ANY_DUT)

データテーブルが格納されているエリアの先頭アドレス

出力

dutBitOutputs (ANY_DUT)

出力のワードアドレスを含むエリアの先頭アドレス(WRWL、またはWY) (例: BOOL32_OVERLAPPING_DUT)。diNumberOfTargetValuesAndOutputRelaysに設定した値に従って、目標位置の点数を示すサイズ(16または32ビット)を選択します。

解説

  • 入力

    以下のサンプルを参考として、DUTを作成してくださいF165_HighSpeedCounter_Cam_8_Values_OnOff_DUT

    下記のパラメータをDUTに設定します:

  • 出力

    • 目標位置の数が、1–16の場合は、1ワード分を使用します。目標位置の数が、17–32の場合は、2ワード分を使用します。

    • 例:出力アドレスが「内部リレー」に設定されている場合、出力アドレスの先頭ワード番号は「0」に設定されます。また、目標値の数は「32」に設定され、R0からR1Fがカム出力のアドレスとして割り付けられます。

    1.  (1) 経過値が目標位置1に達すると、R0がONまたはOFFになります。
    2.  (2) 経過値が目標位置16に達すると、RFがONまたはOFFになります。
    3.  (3) 経過値が目標位置18に達すると、R11がONまたはOFFになります。
    注記

    出力フラグ(Y)を指定している場合、値は、CPU出力と演算用メモリの両方に出力されます。

    1.  (1) 経過値
    2.  (2) 目標位置1; ON設定値: 1000

      1000~4999 R100: ON

    3.  (3) 目標位置; OFF設定値: 5000
    4.  (4) 目標位置2; ON設定値: 7000

      7000~8999 R101: ON

    5.  (5) 目標位置; OFF設定値: 9000

上限目標値制御

  • F165_HighSpeedCounter_Camを使用して、指定した上限値で制御を実行できます。最大目標値制御および最大目標値を有効/無効にする設定は、データテーブルで指定します。

  • データテーブルは、目標位置の数と指定した最大目標位置設定により12~138ワードの範囲で変わります。

注記

データテーブル終端の上限値は、目標値制御をdwCamControlCodeで(最大値の)16#0010に設定しているときのみ有効です。この設定は、目標値制御が(最大値でなく)16#0000に設定しているときは省略できます。

する

しない

計数範囲

0~目標値

負の最小値~正の最大値

計数範囲を超えた場合の操作

加算:

経過値が目標値を超えると、0にセットされます。

経過値が正の最大値を超えると、負の最小値に戻ります。

減算:

データテーブルのポインタは、最終目標位置から目標位置1の向きへ移動します。

経過値が0を下回ると、目標値にセットされます。

経過値が負の最小値を下回ると、正の最大値に戻ります。

目標位置の指定

出力は、ON設定値とOFF設定値により変わります。

  • OFF設定値 > ON設定値

    経過値がON設定値以上かつOFF設定値未満の場合、対応する出力ビットはONになります。経過値が範囲外の場合、対応するビットはOFFになります。

    加算:

    減算:

    OFF設定値(1) > ON設定値(2)

  • ON設定値 > OFF設定値

    経過値がON設定値未満かつOFF設定値以上の場合、対応する出力ビットはOFFになります。経過値が範囲外の場合、対応するビットはONになります。

    加算:

    減算:

    ON設定値(1) > OFF設定値(2)

  • ON設定値 = OFF設定値

    経過値が範囲外の場合、対応するビットはOFFになります。

    加算:

    減算:

    ON設定値(1) = OFF設定値(2)

プログラム上のご注意

  • あらかじめ、使用するチャンネルの高速カウンタ入力の方法をシステムレジスタに指定してください。

  • 高速カウンタ命令が実行されると、対応するチャンネルの高速カウンタ制御中フラグsys_bIsHscChannel0ControlActiveTRUEになり、このフラグがTRUEの間は、同じチャンネルに対して他の高速カウンタ命令を実行することはできません。

  • この命令は同時に2チャンネル分しか起動することはできません。

  • 命令の実行をキャンセルするには、高速カウンタ制御コード(sys_wHscOrPulseControlCode)を格納するデータレジスタのビット3TRUEにセットします。高速カウンタ制御フラグがFALSEに変化します。高速カウンタ命令の実行を再び有効にするには、ビット3FALSEに戻します。sys_wHscOrPulseControlCodeのビット3TRUEにセットすると、上限値制御も無効になります。上限値制御が停止すると、カム出力は保持され、高速カウンタはカウントを継続します。

  • 命令を有効にする前に高速カウンタの経過値をリセットまたはプリセットします。

  • 命令実行中に制御中のチャンネルの経過値を上書きすると、予期せぬ動作になる場合があります。

  • 主プログラムでこの命令を実行する場合は、各目標位置間の最小移動時間が、1スキャンタイム以上となるように目標位置を設定してください。

  • 割り込みプログラムでこの命令を実行する場合は、隣接した目標値間の最小時間が、割り込みプログラムの最大実行時間より長くなるようにしてください。

  • ハードリセット、ソフトリセットを使用する場合は、目標位置1には、³1の整数値を指定してください。

  • 上限値制御とリセット入力、ソフトウェアリセットを併用する場合は、同時に実行しないようにしてください。

  • ハードウェアリセット、ソフトウェアリセットを高速カウンタ制御中に実行すると、高速カウンタの経過値は0にリセットされます。カム出力に割り付けられた出力は、経過値0に応じた出力になります。

  • 経過値が各目標位置に達するたびに割り込みプログラムINTnを開始することもできます。この操作の場合、割り込みプログラムの有効化は割り込み制御命令ICTLによって許可される必要があります。

エラーフラグ

sys_bIsOperationErrorHold (TRUEになり、TRUEを保持)
  • チャンネルNo.やデータテーブルの設定値が、指定できる範囲外の値のとき
  • システムレジスタに高速カウンタの使用方法が指定されていないとき
  • 目標値>上限目標値のとき

  • 目標値= 0のとき

  • 目標値が、昇順に並んでいないとき

sys_bIsOperationErrorNonHold (1回のスキャンに対してTRUE)
  • チャンネルNo.やデータテーブルの設定値が、指定できる範囲外の値のとき
  • システムレジスタに高速カウンタの使用方法が指定されていないとき
  • 目標値>上限目標値のとき

  • 目標値= 0のとき

  • 目標値が、昇順に並んでいないとき

FP0HのCH0の使用例

DUT

DUT F165_HighSpeedCounter_Cam_8_Values_OnOff_DUTは、あらかじめFP Libraryに定義されており、サンプルとして使用することができます。

グローバル変数リスト

グローバル変数リストでは、プロジェクト内のすべてのPOUからアクセスできる変数を宣言します。

POUヘッダCopy code to clipboard

POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。POUヘッダは全プログラム言語で使用できます。

	VAR
		bEnable: BOOL:=FALSE;
		dutF165FP0H_CH0: F165_HighSpeedCounter_Cam_8_Values_OnOff_DUT;
	END_VAR
	VAR_EXTERNAL
		g_dutCamControl_WY0: BOOL32_OVERLAPPING_DUT;
	END_VAR

POUボディ

変数bEnableTRUEにセットされたとき、ファンクションが実行されます。

LDボディCopy code to clipboard

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,F165_HighSpeedCounter_Cam!,,14,0,28,5,,?DEN?HiHscChannel?Ds_dutDataTable?AENO?CdutBitOutputs);
B(B_VARIN,,0,12,2,14,4,);
B(B_VAROUT,,g_dutCamControl_WY0,28,2,30,4,);
B(B_VARIN,,dutF165FP0H_CH0,12,3,14,5,);
L(1,0,1,6);
L(1,2,5,2);
L(7,2,14,2);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディCopy code to clipboard

if (bEnable) then
    F165_HighSpeedCounter_Cam(iHscChannel := 0, s_dutDataTable := dutF165FP0H_CH0,
                              dutBitOutputs => g_dutCamControl_WY0);
end_if;

最終修正日: 2023-11-21このページに関するフィードバックお問い合わせ窓口