SM_Drive_PosControlを使用したコントローラーの位置制御
を参照してください PosControl.project
のインストールディレクトリにあるサンプルプロジェクト CODESYS 下 ..\CODESYS SoftMotion\Examples
。
ほとんどの場合、サーボ制御がドライブの位置制御、および電力制御と回転速度制御を引き継ぎます。ただし、コントローラが軸の位置制御を引き継ぐユースケースがあります。この例は、速度制御されたデバイス(たとえば、位置フィードバックを備えた周波数変換器)がどのように位置制御されるかを示しています。 CODESYS SoftMotion。
要件は、設定された速度によって制御され、現在の位置を返すデバイスです。この例では、10Vアナログ出力端子EL4031が、周波数変換器の速度設定値として使用される信号とともに使用されます。エンコーダ端子EL5101は位置フィードバックに使用されます。
SM_Drive_PosControlによる軸位置の制御
タイプの位置制御軸を追加します
SM_Drive_PosControl
未満 SoftMotion一般軸プール デバイスツリー内。アナログ端子(EL4031)とエンコーダ(EL5101)の端子をデバイスツリーに追加します。
デバイスツリー:
ヒント
フィールドバスデバイスのデバイスの説明は、製造元からダウンロードしてインストールする必要があります。
を開きます
SM_Drive_PosControl
エディターでデバイスを指定し、一般パラメーターModuloを値で指定します360.0
に 全般的 タブ。クリック スケーリング/マッピング タブ。モーター回転あたりの増分数は、エンコーダーのデータシートから取得されます。この例では、
4096
増分(1)は1モーター回転です。アプリケーションで角度度を操作しているため、値を指定します360
(2) アプリケーションの単位。設定:
に切り替えます SoftMotionドライブ:位置制御ループ タブをクリックして、次のパラメータを指定します。
D 2.0
デッドタイムは、受信した実際の位置(エンコーダ)が軸の設定位置に位相シフトされるサイクル数を決定します。デッドタイムは、適用されるコンポーネントによって異なり、試行錯誤によって決定する必要があります。
Kp 0.0
比例定数は、位置誤差(設定位置と実際の位置の偏差)を掛けて、後で設定速度に加算する係数です。次に、この値をに設定します
0
。値は後で実験的に決定します。Bit width: 16
実際の値のビット幅は、使用するコンポーネントに応じて受信され、16、24、または32ビット値として設定できます。値をに設定します
16
使用されたコンポーネントが次のように位置を生成するためUINT
。max
位置エラー監視スイッチはオフのままにします。必要に応じて、再びオンに切り替えることができます。チェックボックスを選択し、最大許容ラグを指定します。運転中にこの値を超えると、軸はエラー状態になります。
δ/δt
パラメータの値は1であり、非常に特殊な場合にのみ変更する必要があります。設定速度と位置の導出との関係を定義します。値の範囲は0から1です。
0
:の値fSetVelocity
ソースとして使用されます。1
:設定位置の数値微分をソースとして使用します。
制御ループ:
次に、アクチュエータに送信される速度値を設定します。この目的のために、アプリケーション単位での最大速度と、転送されたデータの対応する生の値を知る必要があります。この例では、最大速度は値の出力によって達成されます
16#7FFF
、これは毎秒10回転の速度に対応します。これは、設定によると、毎秒3600度にも相当します。設定:
入力と出力への変数のマッピング
軸データを含む変数をI / Oモジュールにマップします。軸の利用可能な循環データは、データ構造にあります in
と out
。この接続は、プログラムまたは直接のいずれかで、入出力デバイスのデバイスエディタで確立できます。
出力(設定速度)をEL4031デバイスに接続します。エディターでデバイスを開き、をクリックします EtherCAT I / Oマッピング タブ。変数を割り当てます
out.iSetVelocity
軸の出力への。 32ビット出力の場合、out.diSetVelocity
使用されている。マッピング:
位置入力も同様に行ってください。エディターでEL5101デバイスを開き、位置入力値をに設定します。
in.wActPosition
。 32ビット入力の場合、値を次のように設定します。in.dwActPosition
。マッピング:制御イネーブル、クイックストップ、およびリミットスイッチを操作するために、
SMC_PosControlInput
ドライブの値によって定義する必要があります。の出力SMC_PosControlOutput
ドライブに送信する必要があります(以下の説明を参照)。たとえば、ドライブがクイックストップをサポートしていない場合は、SM_Drive_PosControl.in.bDriveStartRealState := TRUE
設定する必要があり、SM_Drive_PosControl.out.bDriveStart
無視できます。この例では、bDriveStartRealState
とbRegulatorRealState
アプリケーションで設定する必要があります。
SM_Drive_PosControl.in.bDriveStartRealState := TRUE; SM_Drive_PosControl.in.bRegulatorRealState := TRUE;
システムのデッドタイムの決定
次に、軸を使用してオンラインモードを設定し、制御パラメータを設定します。
重要
軸が制御不能になる可能性があることに注意してください。したがって、対応する安全対策を講じる必要があります。
次に、位置制御なしで軸を操作してみてください。fKp
はすでに0.0に設定されており、スケーリング設定が検証されています。軸をに切り替えます MC_Power
開始します MC_MoveVelocity
。軸は、プログラムされた速度1 U / sで移動します。偏差の場合は、それに応じてスケーリングを修正する必要があります。
動きを終了します。
MC_MoveRelative
、トレース機能を開始します。設定位置と実際の位置との時間差を測定して、システムのデッドタイムを決定します。
の
MC_MoveRelative
、最大速度と大きな加速度を設定します。でサンプリングトレースを開始しますMC_MoveRelative
。次に、設定位置の開始移動と実際の位置の最初の反応との間の時間差を決定します。痕跡:
デッドタイムを決定するには
D
、この時間差をサイクルタイム (D = 時差/サイクルタイム) で割ります。 ソフトモーションドライブ:ポジションコントロール タブをクリックし、次の制御ループでこの値を指定します。D
。ここで、
fKp
. の正しい設定を決定してみよう。これを行うには、ウォッチリストの変数<drive>.controller.fKp
の値を変更する。セット
fKp
小さい数値 (例:0.0001) にして、少しずつ値を増やしていきます。各変化の挙動をサンプリングトレースで確認します。変動を検出するとすぐに上限に達したことになります。次に、の値を下げてください。fKp
約 10% ずつ上げて指定してください ソフトモーションドライブ:ポジションコントロール コントロールループ内のタブKp
。これで、軸を使用できます。
機能ブロック:SMC_PosControlInput
図書館: SM3_Drive_PosControl
名前 | データ・タイプ | 初期値 | 説明 |
---|---|---|---|
|
| 正方向のリミットスイッチ(有限軸のみ) 以来 SoftMotion バージョン 4.12.0.0 では、リミットスイッチモニタリングはデフォルトで有効になっています。古いバージョンでは、設定して手動で有効にする必要があります。
| |
|
| マイナス方向のリミットスイッチ
| |
|
| 16ビット値としての現在位置(実際の位置) | |
|
| 32ビット値としての現在位置(実際の位置) | |
|
| 外部エラー | |
|
|
| |
|
|
| |
|
|
| |
|
|
ユースケース:値はで保持されます |
機能ブロック:SMC_PosControlOutput
図書館: SM3_Drive_PosControl
名前 | データ・タイプ | 初期値 | 説明 |
---|---|---|---|
|
|
| |
|
|
| |
|
| 速度を設定する | |
|
| 速度を設定する |
機能ブロック:SMC_SetPosControlParams
図書館: SM3_Drive_PosControl
のパラメータを変更します SM3_Drive_PosControl
軸
名前 | データ・タイプ | 初期値 | 説明 |
---|---|---|---|
|
| 軸リファレンス | |
|
|
| |
|
| -1 | ラグの比例ゲイン 0未満の値は無視されます。 |
|
| -1 | 速度制御の係数 0:速度パイロット制御なし。 1:の直接出力 |
|
| -1 | 間のサイクルのタイムラグ この値は0であってはなりません。0未満の値は無視されます。 |
|
| -1 | 最大位置遅れ 0は、最大位置遅れのチェックを無効にします。 0未満の値は無視されます。 |
名前 | データ・タイプ | 初期値 | 説明 |
---|---|---|---|
|
| 機能ブロックの実行が終了しました。 | |
|
|
| |
|
| エラーの識別 |
軸ドライブのパラメータ 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);