F170_PulseOutput_PWM

PWM出力

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

パラメータ

入力

s_dutDataTable (F170_PulseOutput_PWM_DUT)

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

n_iPulseOutputChannel (INT)

パルス出力: 0または1

解説

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

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

    • 周波数

    • デューティ比

      方形波のパルス幅とパルス周期の比。パルス幅が1msで、パルス周期が4msのパルス列の場合、デューティー比は0.25または25%となります。

プログラム上のご注意

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

  • パルス出力に使用するチャンネルの高速カウンタは、システムレジスタで「未使用」を指定してください。

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

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

  • デューティ比については、特に最小および最大付近では出力遅れのため、設定した比率とは値が異なります。

  • デューティ比は、スキャン毎に変更することができます。(変更内容は、次のパルス出力後から有効になります。)周波数の設定は、命令実行開始時のみ有効になります。

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

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

FP0RのFP0互換モードを使用する場合

FP0互換モードでFP0Rを使用する場合、FP0のプログラムをFP0Rにダウンロードすることができます。

出力とシステム変数の割り付け(FP0, FP-e用)

チャンネルとパルス出力番号

チャンネルNo. パルス出力 パルス出力方式

0

Y0

パルス

Y2

方向

1

Y1

パルス

Y3

方向

メモリエリアとして使用するシステム変数. カッコ内は、FP0 T32の場合の値を示します。

内容

システム変数

パルス出力: 制御中フラグチャンネル

0

sys_bIsPulseChannel0Active

1

sys_bIsPulseChannel1Active

パルス出力: 経過値チャンネル

0

sys_diPulseChannel0ElapsedValue

1

sys_diPulseChannel1ElapsedValue

パルス出力: 目標値チャンネル

0

sys_diPulseChannel0TargetValue

1

sys_diPulseChannel1TargetValue

高速カウンタ / パルス出力制御コード

sys_wHscOrPulseControlCode

グローバル変数リスト

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

DUT

DUT F170_PulseOutput_PWM_DUTは、あらかじめFP Library内に定義されています。

POUヘッダ

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

	VAR_EXTERNAL
		X6_bEnablePWM: BOOL:=FALSE;
	END_VAR
	VAR 
		dutPWMControl: F170_PulseOutput_PWM_DUT;
			(*iFrequencyValue := 1: f=2.0Hz, T=502.5ms;*)
		iPulseWidthModulationDuty: INT:=500;
			(*500=50% duty*)
		@'': @'';
	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 := 5 ;
        NETWORK_BODY
B(B_F,E_MOVE!,Instance,15,1,21,5,,?DEN?D?AENO?C);
B(B_VARIN,,iPulseWidthModulationDuty,13,3,15,5,);
B(B_VAROUT,,dutPWMControl.iPulseWidthModulationDuty,21,3,23,5,);
B(B_CONTACT,,X6_bEnablePWM,4,2,6,4,);
L(6,3,15,3);
L(1,3,4,3);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,X6_bEnablePWM,4,2,6,4,);
B(B_F,F170_PulseOutput_PWM!,Instance,13,1,26,6,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dutPWMControl,11,3,13,5,);
B(B_VARIN,,2,11,4,13,6,);
L(1,3,4,3);
L(6,3,13,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

IF (X6_bEnablePWM) then
    dutPWMControl.iPulseWidthModulationDuty:=iPulseWidthModulationDuty;
END_IF;
IF (X6_bEnablePWM) then
    F170_PulseOutput_PWM(s_dutDataTable := dutPWMControl, 
    n_iPulseOutputChannel := 2);
END_IF;

ILボディ

関連トピック

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