台形制御
この命令は、指定したDUTのパラメータの内容に従って、自動的に台形制御を実行します。指定したチャンネルの制御中フラグがFALSEで、実行条件がTRUEのとき、指定したチャンネルからパルスが出力します。
入力
データテーブルが格納されているエリアの先頭アドレス
FP-S、FP-X:
F171_PulseOutput_Trapezoidal_DUT
FP0R:
F171_PulseOutput_Trapezoidal_Type0_DUT
F171_PulseOutput_Trapezoidal_Type1_DUT
パルス出力チャンネル:
FP-XH C30 T/P: 0~3
FP-XH C60 T/P: 0~5
FP-S: 0, 2
FP-X R: 0, 1
FP-XC14T: 0, 1, 2
FP-X C30T/C60T: 0, 1, 2, 3
FP0R: 0, 1, 2, 3
以下のDUTを使用してください。 F171_PulseOutput_Trapezoidal_DUT
下記のパラメータをDUTに設定します:
初速
目標速度
加減速時間
目標値
パルス出力制御中フラグ
実行条件
指定した加減速時間で、パルス出力周波数が変化します。目標速度と初速の差で傾斜が決まります。
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ではなくなった場合も)。この間、他のパルス出力命令を実行することはできません。
FPS:パルス出力に使用するチャンネルの高速カウンタは、システムレジスタで"未使用"を指定してください。
FP-X: 使用するチャンネルに対応するシステムレジスタには "パルス出力" を指定してください。
位置決めプログラムの作成にあたっては、強制停止ができるようにプログラミングすることをおすすめします。
以下のDUTを使用してください。 F171_PulseOutput_Trapezoidal_Type0_DUT (最大速度=目標速度)またはF171_PulseOutput_Trapezoidal_Type1_DUT (最大速度= 50kHz)。
目標速度は、パルス出力中に変更することができます。
2種類の制御方法があります。
タイプ 0: 最初に指定した目標速度の範囲内で変更することができます。
タイプ1:最大速度(50kHz)までの範囲内で変更することができます。
下記のパラメータをDUTに設定します:
パルス出力図
初速
目標速度
加速時間
減速時間
目標値
パルス出力制御中フラグ
実行条件
減速停止要求
タイプ 0:
目標速度と初速度の差で、加速時の傾斜が決まります。目標速度と最終速度の差で、減速時の傾斜が決まります。
タイプ1:
50kHzの最大速度と初速度の差で、加速時の傾斜が決まります。50kHzの最大速度と最終速度の差で、減速時の傾斜が決まります。
パルスは、デューティ25%で出力します。"PLS+SIGN"方式でパルス出力する場合、方向出力がONになったあと、約300ms後にパルス出力を開始します。モータドライバの特性を考慮しています。
減速停止
減速停止を行うには、パルス出力制御コードが格納されているデータレジスタのビット5をFALSE からTRUEにしてください(例: MOVE(16#120, sys_wHscOrPulseControlCode);
)。加速中に減速停止要求があった場合、目標速度からと同じ傾きで減速します。
パルス出力中の速度変更について
タイプ1:最大速度(50kHz)までの範囲内で変更することができます。
目標速度
目標速度変更 1回目
目標速度変更 2回目
加速時間
加速時間
減速時間
減速時間
パルス出力制御中フラグ
実行条件
速度変更を行う場合は、実行条件をTRUEに保持してください。
タイプ0:
起動時の目標速度よりも大きい値が指定された場合、起動時の目標速度に補正されます。
タイプ1:
目標速度に50kHzより大きい値が指定された場合、50kHzに補正されます。
経過値が加速禁止領域開始位置(システム変数: sys_diPulseChannel0AccelerationForbiddenAreaStartingPosition)を超えている場合は、加速されません。
減速時の速度は、補正最終速度までしか下げることができません。
この命令を使用しているプログラムをオンライン(RUNモード)で編集し始めるとすぐに、パルス出力は停止します。
通常プログラムと割り込みプログラムの両方に、同じチャンネルについて記述する場合、同時に実行されないようにしてください。
位置決めプログラムの作成にあたっては、強制停止ができるようにプログラミングすることをおすすめします。
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
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
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;