円弧補間(通過位置指定)
DUTに指定されたパラメータの内容に従って、目標位置までの軌跡が円弧となるように、2つのチャンネルからパルスを出力します。円弧の半径は、指定された中心位置と目標位置から計算します。指定したチャンネルの制御中フラグがFALSEで、実行条件がTRUEのとき、指定したチャンネルからパルスが出力します。
入力
パルス出力チャンネル: 0, 2
入出力
データテーブルが格納されているエリアの先頭アドレス
以下のDUTを使用してください。 F176_PulseOutput_Pass_DUT
下記のパラメータをDUTに設定します:
制御コード
合成速度
X軸 目標値
Y軸 目標値
X軸 通過位置
Y軸 通過位置
下記のパラメータは、命令によって計算され、DUTの演算結果格納エリアに格納されます。
半径
:X軸 中心位置
Y軸 中心位置
パルス出力図
(1) |
回転方向:チャンネル0 (x軸)からチャンネル2 (y軸) (両チャンネルで正方向の移動)
|
(2) |
回転方向:チャンネル2 (y軸)からチャンネル0 (x軸) (両チャンネルで正方向の移動)
|
Fv: |
合成速度 | O (Xo,Yo): |
中心位置 |
Fx: |
X軸 速度 | S (Xs,Ys): |
現在位置(開始位置) |
Fy: |
Y軸 速度 | P (Xp,Yp) |
通過位置 |
r: |
半径 | E (Xe,Ye) |
目標位置(最終位置) |
X軸にチャンネル0、Y軸にチャンネル2が割り付けられます。動作モード: アブソリュート
現在位置(q=60°, Xs=5000, Ys=8660)。中心位置O (Xo=0, Yo=0)は参照用として使用されます。目標位置(q=-30°, Xe=8660, Ye=-5000)に到達するまで、速度Fv=2000Hzで、X軸(チャンネル 0)とY軸(チャンネル2)からパルスが出力されます。
この命令の実行条件は、常時実行TRUEとしてください。実行条件がFALSEになるとパルス出力は停止します。
高速カウンタ制御中フラグ(例: sys_bIsHscChannel0ControlActive)とパルス出力制御中フラグ(例: sys_bIsPulseChannel0Active)は、同じ特殊内部フラグの番号に割り付けられています(例: R903A)。従って、高速カウンタ命令またはパルス出力命令が実行されているときは、使用しているチャンネルに対応する、高速カウンタ制御中フラグ(例: sys_bIsHscChannel0ControlActive)とパルス出力制御中フラグ(例: sys_bIsPulseChannel0Active)がTRUEになります。このフラグがTRUEの間は、同じチャンネルに対して、他の高速カウンタ命令、あるいはパルス出力命令を実行することはできません。
円弧補間制御命令F176_PulseOutput_Centerが実行されている間、円弧補間制御フラグ(sys_bIsCircularInterpolationActive)がTRUEになり、目標値に達するまで保持されます(実行条件がTRUEではなくなった場合も)。この間、他のパルス出力命令を実行することはできません。円弧補間動作を再起動するには、強制停止(パルス出力の停止)を実行し、円弧補間制御フラグ(sys_bIsCircularInterpolationActive)をFALSEに設定してください。
動作継続モードで"継続"を選択している場合は、目標値を上書きするために、専用フラグ(sys_bIsCircularInterpolationOverwritingPossible)を使用してください。円弧補間命令が実行されたとき、このフラグは、1スキャンの間 TRUE になります。
各軸の目標値は、-8388608–8388607の範囲内で設定してください。この命令を他のパルス出力命令(例: F171_PulseOutput_Trapezoidal)と組み合わせて使用する場合は、同じ周波数レンジで使用してください。
スキャンタイムが長くなると、円弧補間の精度が悪くなる場合があります。
この命令をRUN中書き替えすることはできません。
通常プログラムと割り込みプログラムの両方に、同じチャンネルについて記述する場合、同時に実行されないようにしてください。
原点復帰に補間機能はないため、各チャンネルに対し、原点復帰を行なう必要があります。
精度を要求される用途にご使用の場合、実機にてご確認ください。
パルス出力に使用するチャンネルの高速カウンタは、システムレジスタで"未使用"を指定してください。
位置決めプログラムの作成にあたっては、強制停止ができるようにプログラミングすることをおすすめします。
高速カウンタ制御フラグとパルス出力制御フラグのステータスは、スキャンが実行されている間に変化します。例えば、受信バイト数が2回以上読み出された場合、1スキャン内で異なる状態が存在することがあります。
(1) |
実行条件 X0 |
(2) |
パルス出力制御中フラグ、チャンネル0 (sys_bIsPulseChannel0Active) |
(3) |
パルス出力制御中フラグ、チャンネル2 (sys_bIsPulseChannel2Active) |
(4) |
円弧補間制御中フラグ (sys_bIsCircularInterpolationActive) |
(5) |
目標値書換可能フラグ(sys_bIsCircularInterpolationOverwritingPossible) |
a |
起動 |
b |
実行条件 FALSE |
c |
目標値一致 |
d |
継続モード起動 |
e |
1スキャン |
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
VAR
Trigger: BOOL:=FALSE;
dutPassData: F176_PulseOutput_Pass_DUT:=dwControlCode := 16#1000,
diSpeed := 2000,
diTargetPos_X := 8660,
diTargetPos_Y := -5000,
diPassPos_X := 9396,
diPassPos_Y := -3420;
(*Control code:
Digit 4: 0=Operation connection mode: stop
Digit 3: 1=Rotation direction: CCW (left)
Digit 2: 0=Fixed
Digit 1: 0=Relative value control
Digit 0: 2=Pulse/direction (Forward FALSE)
*)
@'': @'';
END_VAR
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,,Trigger,4,2,6,4,R);
B(B_VARIN,,dutPassData,10,4,12,6,);
B(B_VARIN,,0,10,3,12,5,);
B(B_F,F176_PulseOutput_Pass!,Instance,12,1,27,6,,?DEN?Hn_iPulseOutputChannel?Ds_dutDataTable?As_dutDataTable?AENO);
L(1,3,4,3);
L(6,3,12,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(Trigger) then
F176_PulseOutput_Pass(n_iPulseOutputChannel := 0,
s_dutDataTable := dutPassData);
END_IF;