FP0Hのカム制御
この命令は、DUT(構造体)のパラメータで指定されたとおり、カム制御を実行します。高速カウンタの経過値に従って最大32の目標値を指定することができます。カム出力ごとに、目標位置はONとOFFの設定値ペアとして設定されます。
経過値が目標位置に一致する度に、割り込みプログラムを実行することもできます。
入力
高速カウンタチャンネル: 0~3
データテーブルが格納されているエリアの先頭アドレス
出力
出力のワードアドレスを含むエリアの先頭アドレス(WR、WL、またはWY) (例: BOOL32_OVERLAPPING_DUT)。diNumberOfTargetValuesAndOutputRelaysに設定した値に従って、目標位置の点数を示すサイズ(16または32ビット)を選択します。
入力
以下のサンプルを参考として、DUTを作成してください:F165_HighSpeedCounter_Cam_8_Values_OnOff_DUT
下記のパラメータをDUTに設定します:
制御コード
出力のワードアドレス
:目標位置の数
(F165_HighSpeedCounter_Target_Values_OnOff_DUTからON/OFF設定値)
上限値
設定範囲:1–2147483646 (16#1–16#7FFFFFFE)
出力
目標位置の数が、1–16の場合は、1ワード分を使用します。目標位置の数が、17–32の場合は、2ワード分を使用します。
例:出力アドレスが「内部リレー」に設定されている場合、出力アドレスの先頭ワード番号は「0」に設定されます。また、目標値の数は「32」に設定され、R0からR1Fがカム出力のアドレスとして割り付けられます。
出力フラグ(Y)を指定している場合、値は、CPU出力と演算用メモリの両方に出力されます。
例
1000~4999 R100: ON
7000~8999 R101: ON
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_bIsHscChannel0ControlActiveがTRUEになり、このフラグがTRUEの間は、同じチャンネルに対して他の高速カウンタ命令を実行することはできません。
この命令は同時に2チャンネル分しか起動することはできません。
命令の実行をキャンセルするには、高速カウンタ制御コード(sys_wHscOrPulseControlCode)を格納するデータレジスタのビット3をTRUEにセットします。高速カウンタ制御フラグがFALSEに変化します。高速カウンタ命令の実行を再び有効にするには、ビット3をFALSEに戻します。sys_wHscOrPulseControlCodeのビット3をTRUEにセットすると、上限値制御も無効になります。上限値制御が停止すると、カム出力は保持され、高速カウンタはカウントを継続します。
命令を有効にする前に高速カウンタの経過値をリセットまたはプリセットします。
命令実行中に制御中のチャンネルの経過値を上書きすると、予期せぬ動作になる場合があります。
主プログラムでこの命令を実行する場合は、各目標位置間の最小移動時間が、1スキャンタイム以上となるように目標位置を設定してください。
割り込みプログラムでこの命令を実行する場合は、隣接した目標値間の最小時間が、割り込みプログラムの最大実行時間より長くなるようにしてください。
ハードリセット、ソフトリセットを使用する場合は、目標位置1には、³1の整数値を指定してください。
上限値制御とリセット入力、ソフトウェアリセットを併用する場合は、同時に実行しないようにしてください。
ハードウェアリセット、ソフトウェアリセットを高速カウンタ制御中に実行すると、高速カウンタの経過値は0にリセットされます。カム出力に割り付けられた出力は、経過値0に応じた出力になります。
経過値が各目標位置に達するたびに割り込みプログラムINTnを開始することもできます。この操作の場合、割り込みプログラムの有効化は割り込み制御命令ICTLによって許可される必要があります。
目標値>上限目標値のとき
目標値= 0のとき
目標値が、昇順に並んでいないとき
目標値>上限目標値のとき
目標値= 0のとき
目標値が、昇順に並んでいないとき
DUT F165_HighSpeedCounter_Cam_8_Values_OnOff_DUTは、あらかじめFP Libraryに定義されており、サンプルとして使用することができます。
グローバル変数リストでは、プロジェクト内のすべてのPOUからアクセスできる変数を宣言します。
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
変数bEnableがTRUEにセットされたとき、ファンクションが実行されます。
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
if (bEnable) then
F165_HighSpeedCounter_Cam(iHscChannel := 0, s_dutDataTable := dutF165FP0H_CH0,
dutBitOutputs => g_dutCamControl_WY0);
end_if;