Skip to main content

SM_Drive_PosControlを使用したコントローラーの位置制御

を参照してください PosControl.project のインストールディレクトリにあるサンプルプロジェクト CODESYS..\CODESYS SoftMotion\Examples

ほとんどの場合、サーボ制御がドライブの位置制御、および電力制御と回転速度制御を引き継ぎます。ただし、コントローラが軸の位置制御を引き継ぐユースケースがあります。この例は、速度制御されたデバイス(たとえば、位置フィードバックを備えた周波数変換器)がどのように位置制御されるかを示しています。 CODESYS SoftMotion

要件は、設定された速度によって制御され、現在の位置を返すデバイスです。この例では、10Vアナログ出力端子EL4031が、周波数変換器の速度設定値として使用される信号とともに使用されます。エンコーダ端子EL5101は位置フィードバックに使用されます。

SM_Drive_PosControlによる軸位置の制御

  1. タイプの位置制御軸を追加します SM_Drive_PosControl 未満 SoftMotion一般軸プール デバイスツリー内。

  2. アナログ端子(EL4031)とエンコーダ(EL5101)の端子をデバイスツリーに追加します。

    デバイスツリー:

    _sm_img_example_poscontrol_1.png

    ヒント

    フィールドバスデバイスのデバイスの説明は、製造元からダウンロードしてインストールする必要があります。

  3. を開きます SM_Drive_PosControl エディターでデバイスを指定し、一般パラメーターModuloを値で指定します 360.0全般的 タブ。

  4. クリック スケーリング/マッピング タブ。モーター回転あたりの増分数は、エンコーダーのデータシートから取得されます。この例では、 4096 増分(1)は1モーター回転です。アプリケーションで角度度を操作しているため、値を指定します 360 (2) アプリケーションの単位

    設定:

    _sm_img_example_poscontrol_2.png
  5. に切り替えます SoftMotionドライブ:位置制御ループ タブをクリックして、次のパラメータを指定します。

    • D 2.0

      デッドタイムは、受信した実際の位置(エンコーダ)が軸の設定位置に位相シフトされるサイクル数を決定します。デッドタイムは、適用されるコンポーネントによって異なり、試行錯誤によって決定する必要があります。

    • Kp 0.0

      比例定数は、位置誤差(設定位置と実際の位置の偏差)を掛けて、後で設定速度に加算する係数です。次に、この値をに設定します 0。値は後で実験的に決定します。

    • Bit width: 16

      実際の値のビット幅は、使用するコンポーネントに応じて受信され、16、24、または32ビット値として設定できます。値をに設定します 16 使用されたコンポーネントが次のように位置を生成するため UINT

    • _cds_icon_option_deactivated.pngmax

      位置エラー監視スイッチはオフのままにします。必要に応じて、再びオンに切り替えることができます。チェックボックスを選択し、最大許容ラグを指定します。運転中にこの値を超えると、軸はエラー状態になります。

    • δ/δt

      パラメータの値は1であり、非常に特殊な場合にのみ変更する必要があります。設定速度と位置の導出との関係を定義します。値の範囲は0から1です。

      0:の値 fSetVelocity ソースとして使用されます。

      1:設定位置の数値微分をソースとして使用します。

    制御ループ:

    _sm_img_example_poscontrol_3.png
  6. 次に、アクチュエータに送信される速度値を設定します。この目的のために、アプリケーション単位での最大速度と、転送されたデータの対応する生の値を知る必要があります。この例では、最大速度は値の出力によって達成されます 16#7FFF、これは毎秒10回転の速度に対応します。これは、設定によると、毎秒3600度にも相当します。

    設定:

    _sm_img_example_poscontrol_5.png

入力と出力への変数のマッピング

軸データを含む変数をI / Oモジュールにマップします。軸の利用可能な循環データは、データ構造にあります inout。この接続は、プログラムまたは直接のいずれかで、入出力デバイスのデバイスエディタで確立できます。

  1. 出力(設定速度)をEL4031デバイスに接続します。エディターでデバイスを開き、をクリックします EtherCAT I / Oマッピング タブ。変数を割り当てます out.iSetVelocity 軸の出力への。 32ビット出力の場合、 out.diSetVelocity 使用されている。

    マッピング:

    _sm_img_example_poscontrol_7.png
  2. 位置入力も同様に行ってください。エディターでEL5101デバイスを開き、位置入力値をに設定します。 in.wActPosition。 32ビット入力の場合、値を次のように設定します。 in.dwActPosition。マッピング:

    _sm_img_example_poscontrol_8.png
  3. 制御イネーブル、クイックストップ、およびリミットスイッチを操作するために、 SMC_PosControlInput ドライブの値によって定義する必要があります。の出力 SMC_PosControlOutput ドライブに送信する必要があります(以下の説明を参照)。たとえば、ドライブがクイックストップをサポートしていない場合は、 SM_Drive_PosControl.in.bDriveStartRealState := TRUE 設定する必要があり、 SM_Drive_PosControl.out.bDriveStart 無視できます。この例では、 bDriveStartRealStatebRegulatorRealState アプリケーションで設定する必要があります。

SM_Drive_PosControl.in.bDriveStartRealState := TRUE;
SM_Drive_PosControl.in.bRegulatorRealState := TRUE;

システムのデッドタイムの決定

次に、軸を使用してオンラインモードを設定し、制御パラメータを設定します。

重要

軸が制御不能になる可能性があることに注意してください。したがって、対応する安全対策を講じる必要があります。

次に、位置制御なしで軸を操作してみてください。fKp はすでに0.0に設定されており、スケーリング設定が検証されています。軸をに切り替えます MC_Power 開始します MC_MoveVelocity。軸は、プログラムされた速度1 U / sで移動します。偏差の場合は、それに応じてスケーリングを修正する必要があります。

  1. 動きを終了します。 MC_MoveRelative、トレース機能を開始します。

  2. 設定位置と実際の位置との時間差を測定して、システムのデッドタイムを決定します。

    MC_MoveRelative、最大速度と大きな加速度を設定します。でサンプリングトレースを開始します MC_MoveRelative。次に、設定位置の開始移動と実際の位置の最初の反応との間の時間差を決定します。

    痕跡:

    _sm_img_example_poscontrol_6.png
  3. デッドタイムを決定するには D、この時間差をサイクルタイム (D = 時差/サイクルタイム) で割ります。 ソフトモーションドライブ:ポジションコントロール タブをクリックし、次の制御ループでこの値を指定します。 D

  4. ここで、 fKp. の正しい設定を決定してみよう。これを行うには、ウォッチリストの変数 <drive>.controller.fKp の値を変更する。

    セット fKp 小さい数値 (例:0.0001) にして、少しずつ値を増やしていきます。各変化の挙動をサンプリングトレースで確認します。変動を検出するとすぐに上限に達したことになります。次に、の値を下げてください。 fKp 約 10% ずつ上げて指定してください ソフトモーションドライブ:ポジションコントロール コントロールループ内のタブ Kp

    これで、軸を使用できます。

機能ブロック:SMC_PosControlInput

図書館: SM3_Drive_PosControl

2. 入力(VAR_INPUT)

名前

データ・タイプ

初期値

説明

bLimitPos

BOOL

正方向のリミットスイッチ(有限軸のみ)

以来 SoftMotion バージョン 4.12.0.0 では、リミットスイッチモニタリングはデフォルトで有効になっています。古いバージョンでは、設定して手動で有効にする必要があります。 bHWLimitEnableTRUE。これは通常、対応するパラメータ番号を記述することによって行われます 1206 という手段で MC_WriteBoolParameter

TRUE:リミットスイッチ未作動

FALSE:リミットスイッチ作動

bLimitNeg

BOOL

マイナス方向のリミットスイッチ

TRUE:リミットスイッチ未作動

FALSE:リミットスイッチ作動

wActPosition

WORD

16ビット値としての現在位置(実際の位置)

dwActPosition

DWORD

32ビット値としての現在位置(実際の位置)

bExternalError

BOOL

外部エラー

bRegulatorRealState

BOOL

TRUE:制御されている軸

bDriveStartRealState

BOOL

FALSE:軸の Quick Stop

dwEncoderCounterModulo

DWORD

0

bDelayActivation

BOOL

TRUE: に限って bDelayActivationTRUESM3_Drive_PosControl 通信状態に切り替わらない 100

ユースケース:値はで保持されます TRUE 適用されたエンコーダが有効な位置値を生成するまで。



機能ブロック:SMC_PosControlOutput

図書館: SM3_Drive_PosControl

3. 出力(VAR_OUTPUT)

名前

データ・タイプ

初期値

説明

bRegulatorOnIn

BOOL

TRUE:軸を制御する必要があります。

bDriveStart

BOOL

FALSE:軸はクイックストップを実行する必要があります。

diSetVelocity

DINT

速度を設定する

iSetVelocity

INT

速度を設定する



機能ブロック:SMC_SetPosControlParams

図書館: SM3_Drive_PosControl

のパラメータを変更します SM3_Drive_PosControl

4. 入力(VAR_INPUT)

名前

データ・タイプ

初期値

説明

Axis

AXIS_REF_POSCONTROL

軸リファレンス

bExecute

BOOL

TRUE:機能ブロックの実行を有効化します

fKp

LREAL

-1

ラグの比例ゲイン

0未満の値は無視されます。

fPartVelPilotControl

LREAL

-1

速度制御の係数 fSetPosition

0:速度パイロット制御なし。 1:の直接出力 fSetVelocity。 0未満の値は無視されます。

fDeadTime

LREAL

-1

間のサイクルのタイムラグ fSetPositionfActPositioin

この値は0であってはなりません。0未満の値は無視されます。

fMaxPositionDiff

LREAL

-1

最大位置遅れ

0は、最大位置遅れのチェックを無効にします。 0未満の値は無視されます。



5. 出力(VAR_OUTPUT)

名前

データ・タイプ

初期値

説明

bDone

BOOL

機能ブロックの実行が終了しました。

bError

BOOL

TRUE:機能ブロックでエラーが発生しました。

ErrorID

SMC_ERROR

エラーの識別



2.

軸ドライブのパラメータ SM_Drive_PosControl 設定されています。

PROGRAM PLC_PRG
VAR
        fbSetPosControlParams : SMC_SetPosControlParams;
END_VAR

fbSetPosControlParams.fKp := 1;
fbSetPosControlParams.fPartVelPilotControl :=0;
fbSetPosControlParams.fDeadTime :=0.1;
fbSetPosControlParams.fMaxPositionDiff :=1;

fbSetPosControlParams(Axis:= SM_Drive_PosControl, bExecute:= TRUE);