原点復帰
入力
データテーブルが格納されているエリアの先頭アドレス
パルス出力チャンネル:
FP-S: 0,2
FP-X R: 0,1
FP-XC14T: 0,1,2
FP-X C30T/C60T: 0,1,2,3
位置決めシステムに電源を入れた際、内部の位置データ(経過値)と実際の機械的な軸位置との間には差異があります。この差異はあらかじめ決めることはできません。これらの位置データは、各軸の実際の位置に合わせる必要があります。その動作は、原点位置で位置データを登録する原点復帰によって実行されます。原点復帰命令の実行中、原点入力が有効になるまで、継続してパルスが出力されます。I/O割り付けは、使用するチャンネルによって変わります。原点近傍位置で減速動作をさせるためには、原点近傍入力に割り付けられているパルス出力制御コード(sys_wHscOrPulseControlCode) (特殊データレジスタ)のビット4をTRUEにセットしたあと、再び、FALSEに戻してください。原点復帰が完了したときに、偏差カウンタクリア信号出力をTRUEにセットすることができます。原点復帰中の経過値エリアの値は、実際の値とは異なります。原点復帰が完了すると、経過値は0になります。
2つの動作モードからいずれかを選択してください:
タイプ1:原点入力は、原点近傍入力の有無、減速中、減速が完了しているか否かに関わらず有効となります。
原点近傍入力を使用しない場合:
原点近傍入力を使用する場合:
タイプ2:このモードでは、(原点近傍入力より開始された)減速動作が完了している場合のみ、原点入力が有効になります。
以下のDUTを使用してください。
F171_PulseOutput_Home_DUT
下記のパラメータをDUTに設定します:
制御コード
初速
目標速度
加減速時間
偏差カウンタクリア信号
パルス出力図
指定した加減速時間で、パルス出力周波数が変化します。
目標速度と初速の差で傾斜が決まります。
プログラム上のご注意
原点入力が入っている状態でも、この命令が実行されるとパルス出力を開始します。
加速途中に原点近傍入力が有効になった場合は、減速動作を開始します。
通常プログラムと割り込みプログラムの両方に、同じチャンネルについて記述する場合、同時に実行されないようにしてください。
偏差カウンタクリア信号は、それぞれのPLC機種により指定された番号に割り付けられています。
RUN中書き替えを行った場合、パルス出力は停止します。ただし、プログラム変更部分のダウンロードが完了すると、書き替え前の動作を継続します。
FP-X:パルス出力命令が実行され、パルスが出力されている間は、対応するチャンネルのパルス出力命令制御中フラグ(例: sys_bIsPulseChannel0Active)がTRUEになります。このフラグがTRUEのときは、他のパルス出力命令を実行することはできません。
FPS: 高速カウンタ制御中フラグ(例: sys_bIsHscChannel0ControlActive)とパルス出力制御中フラグ(例: sys_bIsPulseChannel0Active)は、同じ特殊内部フラグの番号に割り付けられています(例: R903A)。従って、高速カウンタ命令またはパルス出力命令が実行されているときは、使用しているチャンネルに対応する、高速カウンタ制御中フラグ(例: sys_bIsHscChannel0ControlActive)とパルス出力制御中フラグ(例: sys_bIsPulseChannel0Active)がTRUEになります。このフラグがTRUEの間は、同じチャンネルに対して、他の高速カウンタ命令、あるいはパルス出力命令を実行することはできません。
FPS: パルス出力に使用するチャンネルの高速カウンタは、システムレジスタで"未使用"を指定してください。
FP-X: 使用するチャンネルに対応するシステムレジスタには "パルス出力" を指定してください。
FPS: 円弧補間制御命令F176_PulseOutput_Centerが実行されている間、円弧補間制御フラグ(sys_bIsCircularInterpolationActive)がTRUEになり、目標値に達するまで保持されます(実行条件がTRUEではなくなった場合も)。この間、他のパルス出力命令を実行することはできません。
位置決めプログラムの作成にあたっては、強制停止ができるようにプログラミングすることをおすすめします。
高速カウンタ制御フラグとパルス出力制御フラグのステータスは、スキャンが実行されている間に変化します。例えば、受信バイト数が2回以上読み出された場合、1スキャン内で異なる状態が存在することがあります。
チャンネルNo. |
偏差カウンタクリア出力 |
原点入力 |
0 | Y2 | X2 |
2 | Y5 | X5 |
パルス出力機能は、パルス入出力カセット(AFPX-PLS)が装着されている場合のみ使用することができます。
チャンネルNo. |
偏差カウンタクリア出力 |
原点入力 |
0 | ||
(カセット取付部1) | Y102 | X102 |
1 | ||
(カセット取付部2) | ||
(C30/60Rのみ) | Y202 | X202 |
チャンネルNo. |
偏差カウンタクリア出力 |
原点入力 |
0 | Y4またはY8 | X4 |
1 | Y5またはY9 | X5 |
2 | – | X6 |
3 (C30/60Rのみ) | – | X7 |
グローバル変数リストでは、プロジェクト内のすべてのPOUからアクセスできる変数を宣言します。
DUT F171_PulseOutput_Home_DUTは、あらかじめFP Library内に定義されています。
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
VAR_EXTERNAL
X0_bMotorSwitch: BOOL:=FALSE;
(*at X0*)
END_VAR
VAR
dutHome: F171_PulseOutput_Home_DUT:=dwControlCode := 16#1125;
(*Control code:
Digit 3: 1= Duty ratio 25%
Digit 2: 1= Frequency range 48Hz-100kHz
Digit 1: 2 =Operation mode type 1
Ditig 0: 5= CCW + deviation counter clear signal*)
diInitialSpeed: DINT:=100;
diTargetSpeed: DINT:=2000;
diAccelerationTime: DINT:=300;
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 16 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,4,1,6,3,R);
B(B_F,E_MOVE!,Instance,17,4,23,8,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,Instance,17,8,23,12,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.diTargetSpeed,23,6,25,8,);
B(B_VARIN,,diTargetSpeed,15,6,17,8,);
B(B_VAROUT,,dutHome.diAccelerationDecelerationTime,23,10,25,12,);
B(B_VARIN,,diAccelerationTime,15,10,17,12,);
B(B_F,E_MOVE!,Instance,17,12,23,16,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.diDeviationCounterClearSignalOutputTime,23,14,25,16,);
B(B_VARIN,,10,15,14,17,16,);
B(B_F,E_MOVE!,Instance,17,0,23,4,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.diInitialAndFinalSpeed,23,2,25,4,);
B(B_VARIN,,diInitialSpeed,15,2,17,4,);
L(7,2,7,6);
L(7,6,7,10);
L(1,2,4,2);
L(6,2,7,2);
L(7,2,17,2);
L(7,6,17,6);
L(7,10,17,10);
L(7,10,7,14);
L(7,14,17,14);
L(1,0,1,16);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,6,3,8,5,R);
B(B_VARIN,,dutHome,15,4,17,6,);
B(B_VARIN,,0,15,5,17,7,);
B(B_F,F171_PulseOutput_Home!,Instance,17,2,30,7,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_COMMENT,,Example for home position return,1,1,18,2,);
L(1,4,6,4);
L(8,4,17,4);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(X0_bMotorSwitch) then
dutHome.diInitialAndFinalSpeed:=diInitialSpeed;
dutHome.diTargetSpeed:=diTargetSpeed;
dutHome.diAccelerationDecelerationTime:=diAccelerationTime;
dutHome.diDeviationCounterClearSignalOutputTime:=10;
END_IF;
(*Example for home position return*)
IF DF(X0_bMotorSwitch) then
F171_PulseOutput_Home(s_dutDataTable := dutHome,
n_iPulseOutputChannel :=0);
END_IF;