F171_PulseOutput_Trapezoidal

台形制御

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

入力

s_dutDataTable (DUT)

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

  • FP-SFP-X:

    F171_PulseOutput_Trapezoidal_DUT

  • FP0R:

    F171_PulseOutput_Trapezoidal_Type0_DUT

    F171_PulseOutput_Trapezoidal_Type1_DUT

n_iPulseOutputChannel(10進定数)

パルス出力チャンネル:

FP-XH C30 T/P: 0~3

FP-XH C60 T/P: 0~5

FP-S0, 2

FP-X R0, 1

FP-XC14T0, 1, 2

FP-X C30T/C60T0, 1, 2, 3

FP0R0, 1, 2, 3

FP-SigmaFP-Xに関する説明

以下のDUTを使用してください。 F171_PulseOutput_Trapezoidal_DUT

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

  • 制御コード
  • 初速
  • 目標速度
  • 加減速時間
  • 目標値
  • パルス停止
パルス出力図
  1. 初速

  2. 目標速度

  3. 加減速時間

  4. 目標値

  5. パルス出力制御中フラグ

  6. 実行条件

指定した加減速時間で、パルス出力周波数が変化します。目標速度と初速の差で傾斜が決まります。

  • 通常プログラムと割り込みプログラムの両方に、同じチャンネルについて記述する場合、同時に実行されないようにしてください。
  • FP-X: パルス出力命令が実行され、パルスが出力されている間は、対応するチャンネルのパルス出力命令制御中フラグ(例: sys_bIsPulseChannel0Active)がTRUEになります。このフラグがTRUEのときは、他のパルス出力命令を実行することはできません。

  • FPS: 高速カウンタ制御中フラグ(例: sys_bIsHscChannel0ControlActive)とパルス出力制御中フラグ(例: sys_bIsPulseChannel0Active)は、同じ特殊内部フラグの番号に割り付けられています(例: R903A)。従って、高速カウンタ命令またはパルス出力命令が実行されているときは、使用しているチャンネルに対応する、高速カウンタ制御中フラグ(例: sys_bIsHscChannel0ControlActive)とパルス出力制御中フラグ(例: sys_bIsPulseChannel0Active)がTRUEになります。このフラグがTRUEの間は、同じチャンネルに対して、他の高速カウンタ命令、あるいはパルス出力命令を実行することはできません。

  • FPS: 円弧補間制御命令F176_PulseOutput_Centerが実行されている間、円弧補間制御フラグ(sys_bIsCircularInterpolationActive)がTRUEになり、目標値に達するまで保持されます(実行条件がTRUEではなくなった場合も)。この間、他のパルス出力命令を実行することはできません。

  • RUN中書き替えを行った場合、パルス出力は停止します。ただし、プログラム変更部分のダウンロードが完了すると、書き替え前の動作を継続します。
  • FPSパルス出力に使用するチャンネルの高速カウンタは、システムレジスタで"未使用"を指定してください。

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

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

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

FP0Rに関する説明

以下のDUTを使用してください。 F171_PulseOutput_Trapezoidal_Type0_DUT (最大速度=目標速度)またはF171_PulseOutput_Trapezoidal_Type1_DUT (最大速度= 50kHz)。

目標速度は、パルス出力中に変更することができます。

2種類の制御方法があります。

  • タイプ 0: 最初に指定した目標速度の範囲内で変更することができます。

  • タイプ1最大速度(50kHz)までの範囲内で変更することができます。

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

  • 制御コード
  • 初速
  • 目標速度
  • 加速時間
  • 減速時間
  • 目標値

パルス出力図

  1. 初速

  2. 目標速度

  3. 加速時間

  4. 減速時間

  5. 目標値

  6. パルス出力制御中フラグ

  7. 実行条件

  8. 減速停止要求

  • タイプ 0:

    目標速度と初速度の差で、加速時の傾斜が決まります。目標速度と最終速度の差で、減速時の傾斜が決まります。

  • タイプ1:

    50kHzの最大速度と初速度の差で、加速時の傾斜が決まります。50kHzの最大速度と最終速度の差で、減速時の傾斜が決まります。

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

減速停止

減速停止を行うには、パルス出力制御コードが格納されているデータレジスタのビット5FALSE からTRUEにしてください(例: MOVE(16#120, sys_wHscOrPulseControlCode);)。加速中に減速停止要求があった場合、目標速度からと同じ傾きで減速します。

パルス出力中の速度変更について

タイプ1最大速度(50kHz)までの範囲内で変更することができます。

  1. 目標速度

  2. 目標速度変更 1回目

  3. 目標速度変更 2回目

  4. 加速時間

  5. 加速時間

  6. 減速時間

  7. 減速時間

  8. パルス出力制御中フラグ

  9. 実行条件

速度変更を行う場合は、実行条件をTRUEに保持してください。

  • タイプ0:

    起動時の目標速度よりも大きい値が指定された場合、起動時の目標速度に補正されます。

  • タイプ1:

    目標速度に50kHzより大きい値が指定された場合、50kHzに補正されます。

経過値が加速禁止領域開始位置(システム変数: sys_diPulseChannel0AccelerationForbiddenAreaStartingPosition)を超えている場合は、加速されません。

  • 減速時の速度は、補正最終速度までしか下げることができません。

  • この命令を使用しているプログラムをオンライン(RUNモード)で編集し始めるとすぐに、パルス出力は停止します。

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

  • パルス出力命令が実行され、パルスが出力されている間は、対応するチャンネルのパルス出力命令制御中フラグ(例: sys_bIsPulseChannel0Active)がTRUEになります。このフラグがTRUEのときは、他のパルス出力命令を実行することはできません。
  • 減速停止が要求されている間は、命令を起動することはできません。
  • 動作を停止したあと、リセットするには、実行条件を一旦FALSEとし、再度TRUEにしてください。
  • 位置決めパラメータが変更されていない場合、2回目の命令実行は、高速に起動されます。出力処理の設定(パルス出力または計算のみ)の変更は、この動作に影響しません。
  • 位置決めプログラムの作成にあたっては、強制停止ができるようにプログラミングすることをおすすめします。

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

POUヘッダ

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

	VAR
		bMotorSwitch: BOOL:=FALSE;
		dutTrapez: F171_PulseOutput_Trapezoidal_DUT:=dwControlCode := 16#1100;
			(*Control code:
Digit 3: 1=Duty ratio 25%
Digit 2: 1=Frequency range 48Hz-100kHz
Digit 1: 0=Relative value control
Digit 0: 0=CW/CCW*)
	END_VAR
	VAR_EXTERNAL
		X0_bMotorSwitch: BOOL:=FALSE;
			(*at X0*)
	END_VAR
	VAR 
		diInitialSpeed: DINT:=100;
		diTargetSpeed: DINT:=2000;
		diAccelerationTime: DINT:=300;
		diTargetValue: DINT:=10000;
		@'': @'';
	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 := 16 ;
        NETWORK_BODY
B(B_CONTACT,,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,,dutTrapez.diTargetSpeed,23,6,25,8,);
B(B_VARIN,,diTargetSpeed,15,6,17,8,);
B(B_VAROUT,,dutTrapez.diAccelerationAndDecelerationTime,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,,dutTrapez.diTargetValue,23,14,25,16,);
B(B_VARIN,,diTargetValue,15,14,17,16,);
B(B_F,E_MOVE!,Instance,17,0,23,4,,?DEN?D?AENO?C);
B(B_VAROUT,,dutTrapez.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 := 6 ;
        NETWORK_BODY
B(B_CONTACT,,bMotorSwitch,4,2,6,4,R);
B(B_VARIN,,dutTrapez,14,3,16,5,);
B(B_VARIN,,0,14,4,16,6,);
B(B_F,F171_PulseOutput_Trapezoidal!,Instance,16,1,31,6,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
L(6,3,16,3);
L(1,3,4,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

IF DF(bMotorSwitch) then
  dutTrapez.diInitialAndFinalSpeed:=diInitialSpeed;
  dutTrapez.diTargetSpeed:=diTargetSpeed;
  dutTrapez.diAccelerationDecelerationTime:=diAccelerationTime;
  dutTrapez.diDeviationCounterClearSignalOutputTime:=10;
END_IF;
IF DF(bMotorSwitch) then
  F171_PulseOutput_Trapezoidal(s_dutDataTable := dutTrapez,
        n_iPulseOutputChannel :=0);
END_IF;

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