F177_PulseOutput_Home

原点復帰

この命令は、指定したDUTのパラメータの内容に従って、原点復帰を実行します。指定したチャンネルの制御中フラグがFALSEで、実行条件がTRUEのとき、指定したチャンネルからパルスが出力します。

パラメータ

入力

s_dutDataTable (F177_PulseOutput_Home_Type0_DUT)または (F177_PulseOutput_Home_Type1_DUT)

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

n_iPulseOutputChannel*(10進定数)

パルス出力チャンネル: 0~3

解説

位置決めシステムに電源を入れた際、内部の位置データ(経過値)と実際の機械的な軸位置との間には差異があります。この差異はあらかじめ決めることはできません。これらの位置データは、各軸の実際の位置に合わせる必要があります。その動作は、原点位置で位置データを登録する原点復帰によって実行されます。原点復帰命令の実行中、原点入力が有効になるまで、継続してパルスが出力されます。I/O割り付けは、使用するチャンネルによって変わります。原点近傍位置で減速動作をさせるためには、原点近傍入力に割り付けられているパルス出力制御コード(sys_wHscOrPulseControlCode) (特殊データレジスタ)のビット4TRUEにセットしたあと、再び、FALSEに戻してください。原点復帰が完了したときに、偏差カウンタクリア信号出力をTRUEにセットすることができます。

2つの動作モードからいずれかを選択してください:

  • タイプ0:

    原点入力は、原点近傍入力の有無、減速中、減速が完了しているか否かに関わらず有効となります。

    原点近傍入力を使用しない場合:

    1.  (1) 初速度
    2.  (2) 目標速度
    3.  (3) -
    4.  (4) 原点入力: TRUE

    原点近傍入力を使用する場合:

    1.  (1) 初速度
    2.  (2) 目標速度
    3.  (3) 原点近傍入力: TRUE
    4.  (4) 原点入力: TRUE
    5.  (5) クリープ速度
    6.  (6) 常時、原点入力が有効になります。
  • タイプ1:このモードでは、(原点近傍入力より開始された)減速動作が完了している場合のみ、原点入力が有効になります。

    1.  (1) 初速度
    2.  (2) 目標速度
    3.  (3) 原点近傍入力: TRUE
    4.  (4) 原点入力: TRUE
    5.  (5) クリープ速度
    6.  (6) 原点入力は、減速後にのみ有効となります。

以下のDUTを使用してください。 F177_PulseOutput_Home_Type0_DUTまたはF177_PulseOutput_Home_Type1_DUT

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

  • 制御コード

  • 初速度

  • 目標速度

  • 加速時間

  • 減速時間

  • クリープ速度

  • 偏差カウンタクリア信号(出力時間)

パルス出力図

  • 指定した加速時間と減速時間によって、パルス出力周波数が変化します。

  • 目標速度と初速の差で傾斜が決まります。

  • パルスは、デューティ25%で出力します。

  • "PLS+SIGN"方式でパルス出力する場合、方向出力がONになったあと、約300ms後にパルス出力を開始します。モータドライバの特性を考慮しています。

プログラム上のご注意

  • 使用するチャンネルに対応するシステムレジスタには "パルス出力" を指定してください。

  • 原点入力が入っている状態でも、この命令が実行されるとパルス出力を開始します。

  • 加速途中に原点近傍入力が有効になった場合は、減速動作を開始します。

  • 偏差カウンタクリア信号は、それぞれのPLC機種により指定された番号に割り付けられています。

  • 通常プログラムと割り込みプログラムの両方に、同じチャンネルについて記述する場合、同時に実行されないようにしてください。

  • パルス出力命令が実行され、パルスが出力されている間は、対応するチャンネルのパルス出力命令制御中フラグ(例: sys_bIsPulseChannel0Active)がTRUEになります。このフラグがTRUEのときは、他のパルス出力命令を実行することはできません。

  • RUN中書き替えを行った場合、パルス出力は停止します。ただし、プログラム変更部分のダウンロードが完了すると、書き替え前の動作を継続します。

  • 位置決めプログラムの作成にあたっては、強制停止ができるようにプログラミングすることをおすすめします。

  • 高速カウンタ制御フラグとパルス出力制御フラグのステータスは、スキャンが実行されている間に変化します。例えば、受信バイト数が2回以上読み出された場合、1スキャン内で異なる状態が存在することがあります。

偏差カウンタクリア出力と原点入力(FP0R用)

  • FP0R C16

    チャンネルNo.

    偏差カウンタクリア出力

    原点入力

    0 Y6 X4
    1 Y7 X5
    2 X6
    3 X7
    注記
    • 入力X4–X7は、高速カウンタ入力または原点入力のいずれか一方の機能しか使用できません。

    • Y6Y7は、CH3のパルス出力、または、CH0、CH1の偏差カウンタクリア信号出力のいずれかの一方の機能しか使用できません。

  • FP0R C32, T32, F32

    チャンネルNo.

    偏差カウンタクリア出力

    原点入力

    0 Y8 X4
    1 Y9 X5
    2 YA X6
    3 YB X7
    注記

    入力X4–X7は、高速カウンタ入力または原点入力のいずれか一方の機能しか使用できません。

グローバル変数リスト

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

DUT

DUT F177_PulseOutput_Home_Type1_DUTは、あらかじめ「FP library」内に定義されています。

POUヘッダ

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

	VAR_EXTERNAL
		X0_bMotorSwitch: BOOL:=FALSE;
			(*at X0*)
	END_VAR
	VAR 
		diInitialSpeed: DINT:=1000;
		diTargetSpeed: DINT:=5000;
		diAccelerationTime: DINT:=3000;
		diDecelerationTime: DINT:=3000;
		diCreepSpeed: DINT:=5000;
		dutHomeType1: F177_PulseOutput_Home_Type1_DUT:=dwControlCode := 16#0012,
diInitialSpeed := 0,
diTargetSpeed := 0,
diAccelerationTime := 0,
diDecelerationTime := 0,
diCreepSpeed := 0;
			(*For ControlCode (16#0012):
1 = Forward 
2 = Pulse/Sign forward on*)
		@'': @'';
	END_VAR

LDボディ

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 24 ;
        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,,dutHomeType1.diTargetSpeed,23,6,25,8,);
B(B_VARIN,,diTargetSpeed,15,6,17,8,);
B(B_VAROUT,,dutHomeType1.diAccelerationTime,23,10,25,12,);
B(B_VARIN,,diAccelerationTime,15,10,17,12,);
B(B_F,E_MOVE!,Instance,17,20,23,24,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diDeviationCounterClearSignalOutputTime,23,22,25,24,);
B(B_VARIN,,0,15,22,17,24,);
B(B_F,E_MOVE!,Instance,17,0,23,4,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diInitialSpeed,23,2,25,4,);
B(B_VARIN,,diInitialSpeed,15,2,17,4,);
B(B_F,E_MOVE!,Instance,17,12,23,16,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diDecelerationTime,23,14,25,16,);
B(B_VARIN,,diDecelerationTime,15,14,17,16,);
B(B_F,E_MOVE!,Instance,17,16,23,20,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diCreepSpeed,23,18,25,20,);
B(B_VARIN,,diCreepSpeed,15,18,17,20,);
L(7,2,7,6);
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,6,7,10);
L(7,10,7,22);
L(7,22,17,22);
L(7,14,17,14);
L(7,18,17,18);
L(1,0,1,24);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 12 ;
        NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,8,5,10,7,R);
B(B_VARIN,,dutHomeType1,15,6,17,8,);
B(B_VARIN,,0,15,7,17,9,);
B(B_COMMENT,,Example for home position return,1,2,18,4,);
B(B_F,F177_PulseOutput_Home!,Instance,17,4,30,9,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
L(10,6,17,6);
L(1,6,8,6);
L(1,0,1,12);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

IF DF(X0_bMotorSwitch) then
  dutHomeType1.diInitialSpeed:=diInitialSpeed;
  dutHomeType1.diTargetSpeed:=diTargetSpeed;
  dutHomeType1.diAccelerationTime:=diAccelerationTime;
  dutHomeType1.diDecelerationTime:=diDecelerationTime;
  dutHomeType1.diCreepSpeed:=diCreepSpeed;
  dutHomeType1.diDeviationCounterClearSignalOutputTime:=0;
END_IF;
(*Example for home position return*)
IF DF(X0_bMotorSwitch) then
  F177_PulseOutput_Home(s_dutDataTable := dutHomeType1, 
    n_iPulseOutputChannel := 0);
END_IF;

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