シーメンス#Technology objectsでMotion Control-1

今回のシリーズはSiemensのTechnology Objectを通じてMotion Controlを実現します。

のTechnologyObjectはPLCOPENの標準に準じるPLC OPENのMotion Controlライブラリです。つまりーメーカーよって使ってのPLCが違っても、もし該当するPLCがPLC OPENのMotion ControlライブラリがSupportすれば、プログラムをそのまま(100%ではいえないですが)流用できます。

このPLC OPENライブラリは様々なFunction Blockを用意し、それらのBlocksを使ってプ簡単にMotion Control実現します。

例えばMC_PowerならDriveをEnableするBlock、MC_MoveJogなら軸をJogで動かすBlocksなど、です。

参考Link:

https://plcopen.org/technical-activities/motion-control
https://www.fa.omron.co.jp/product/special/sysmac/plcopen/feature3.html

最初はTIA(Siemensのエンジニアツール)を使ってHardware Configurationから、Driveの電源ONする>Jogを動かすまでやりたいと考えています。

Hardware Configuration

最初は新規プロジェクトを作って、CPUを追加します。

CPU1511-PNを使用します。

Technology Objectを使うっていうのは、つまりCPUの演算能力でMotion制御を実現させます。なので、CPUでは無限に軸を増やすことができません。

CPUのデータシートにはちゃんと乗ってて、例えば下図はCPU1511-PNのものですが、Montion Control Resourcesは800があり、一つのSpeed軸では40 Resourcesをを消費します。なので800-40残りは760になります。

ですが、じゃめっちゃ増やせるじゃないですか?だと思われるかもしれませんが、実は下にもPosition Axis(位置決め軸)は4ms周期で制御したいの場合は5軸まで、8ms周期内なら10軸までなども書いています。(しかも理想値)

正確に計算したい場合はSizer・TIA Selection Toolを使ってください。

次は軸を追加します。横にS120を入れます。

PLC_1とProfinetでつながるように設定します。

S120をクリックし、DO_SERVOをひっばります。

次はSubmodulesを選んで、Telegram105をひっばります。

それでOKです。

次はTechnology Objectを追加します。

PLC_1>Technology objects>Add new objectします。

Position Axisとして使いたいのでTO_PositioningAxisを選んでOK。

軸を追加したらこのような画面が出てきます。

Xが出てるところ”Hardware interface”をクリックします。

次はDriveのTabクリックし…のボタンをクリックし、ProfinetSystemの中にある、先S120に追加したSERVOを選んで、OK。

そうすると、一気に全部緑のCheck markになります。

よくやる設定

Encoderの種類Incremental・Absolute・Cyclic absoluteどっちなのか。それによってFunction Block MC_HOME(原点)使うときにパラメータがわかります。

Ref Speedなど

Data exchange with the driveのTabに2のCheckを入れる、Driveから自動的データを吸い上げます。

Encoderのデータ交換もそうです。

分解率・Gear比など

Topology 設定

コンパイルしたら、エラーが出てきます。Topology が設定してませんのエラーが出てきて、SiemensでTechnology objectsを使用するときどこのPortがどこにつながるのか明確に設定するう必要があります。

まずTopology viewをクリックします。

実際に図面に合わせて設定する必要がありますが、いまはとりあえず適度につながります。

こうになりますね。

まぁ、実際MouseをPortの近くに置くとこれはPort何番目のか出てきますので。

これでコンパイルエラーなしだと思います。

プログラム

PLC_OPENのFunction Blockはその一つの特徴はInterfaceは大体似ててます。これから今回使ってるFunction Blockを紹介するときにわかると思います。

MC_Power

このFunction Blockを使ってTechnology objectsを有効します。

  • Axis
    • INPUT
      • TO_Axis
      • Technology objects
    • ここはTechnology objectsの軸を入れるところです。
  • Enable
    • INPUT
      • Bool
    • TRUEになることでTechnology objectを有効します。
  • StartMode
    • INPUT
      • DINT
    • 該当する軸は位置決め可能かどうかを決めます。
      0=無効、1=有効
  • StopMode
    • INPUT
      • INT
    • Technology objectsが無効するときどう止めるかを決めます。
      • 0=Emergency stop
        即停止です。
      • 1=Immediate stop
        ただちに停止し、Setpoint=0でAxisはDriveの設定によって止まり方変わります。
      • 2=Stop with maximum dynamic values
        Driveは”Technology object > Configuration > Extended parameters > Dynamic limits”に従って停止します。
  • Status
    • OUTPUT
      • Bool
      • 1=有効中
  • Busy
    • OUPUT
      • Bool
      • 1=実行中
  • Error
    • OUTPUT
      • Bool
      • 1=エラーあり
  • ErrorID
    • OUTPUT
      • WORD
      • エラーの内容

実装

まずMC_PowerというFunction Blocksを入れます。

Instance DBは適当でよいです。今回はOB1の中にやってるのは新しいDBを作るしかありません。

簡単な割付します。

Axisのところは最初に追加したS120の軸を入れます。

CPUにプログラムダウンロードし、M0.0のEnable信号入れたらStatusがONになってることがわかります。それでPositioningAxis_1が有効しましたのことがわかります。

MC_MoveJog

このFunction Blockを使って軸をJog-Modeで動かすことができます。

  • Axis
    • INPUT
      • TO_Axis
      • Technology objects
    • ここはTechnology objectsの軸を入れるところです。
  • JogFoward
    • INPUT
      • Bool
      • 1=軸を正回転する
  • JogBackward
    • INPUT
      • Bool
      • 1=軸を反回転する
  • Velocity
    • INPUT
      • LReal
      • Jog速度
  • Acceleration・Deceleration
    • INPUT
      • LReal
      • 加速度・減速度
  • Jerk
    • INPUT
      • LReal
      • 自分もそこまで理解できないのでSkip
  • PositionControlled
    • INPUT
      • Bool
      • 自分もそこまで理解できないのでSkip
  • InVelocity
    • OUTPUT
      • Bool
      • 軸は速度設定値に到達
  • CommandAborted
    • OUTPUT
      • Bool
      • 1=このJobは他のJobによって中断させた
  • Busy
    • OUPUT
      • Bool
      • 1=実行中
  • Error
    • OUTPUT
      • Bool
      • 1=エラーあり
  • ErrorID
    • OUTPUT
      • WORD
      • エラーの内容

実装

MC_MoveJogを呼び出します。

Instance DBは適当でー

MC_Powerとあまりわかりませんが、Jogを正回転するときは反回転を回すコマンド出してないのかCheckしたりのInterlockと、MC_Powerでちゃんと軸を有効しないとコマンド実行しませせんよ~のようなことだけです。

実際に動かしてみるとInVelocity・Busyはちゃんとコマンド実行してるときにONしてFeedbackくれるとわかります。

最後に

軸のErrorWord・速度・現在値など見る場所を教えます。

Technology objects>軸>右クリック>Open DB editor。

そうすると一覧ができます。

はーい、お疲れ様です。

Footer_Basic

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする