今回のシリーズは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:
最初は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の軸を入れるところです。
- INPUT
- Enable
- INPUT
- Bool
- TRUEになることでTechnology objectを有効します。
- INPUT
- StartMode
- INPUT
- DINT
- 該当する軸は位置決め可能かどうかを決めます。
0=無効、1=有効
- INPUT
- 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”に従って停止します。
- 0=Emergency stop
- INPUT
- Status
- OUTPUT
- Bool
- 1=有効中
- OUTPUT
- Busy
- OUPUT
- Bool
- 1=実行中
- OUPUT
- Error
- OUTPUT
- Bool
- 1=エラーあり
- OUTPUT
- ErrorID
- OUTPUT
- WORD
- エラーの内容
- OUTPUT
実装
まず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の軸を入れるところです。
- INPUT
- JogFoward
- INPUT
- Bool
- 1=軸を正回転する
- INPUT
- JogBackward
- INPUT
- Bool
- 1=軸を反回転する
- INPUT
- Velocity
- INPUT
- LReal
- Jog速度
- INPUT
- Acceleration・Deceleration
- INPUT
- LReal
- 加速度・減速度
- INPUT
- Jerk
- INPUT
- LReal
- 自分もそこまで理解できないのでSkip
- INPUT
- PositionControlled
- INPUT
- Bool
- 自分もそこまで理解できないのでSkip
- INPUT
- InVelocity
- OUTPUT
- Bool
- 軸は速度設定値に到達
- OUTPUT
- CommandAborted
- OUTPUT
- Bool
- 1=このJobは他のJobによって中断させた
- OUTPUT
- Busy
- OUPUT
- Bool
- 1=実行中
- OUPUT
- Error
- OUTPUT
- Bool
- 1=エラーあり
- OUTPUT
- ErrorID
- OUTPUT
- WORD
- エラーの内容
- OUTPUT
実装
MC_MoveJogを呼び出します。
Instance DBは適当でー
MC_Powerとあまりわかりませんが、Jogを正回転するときは反回転を回すコマンド出してないのかCheckしたりのInterlockと、MC_Powerでちゃんと軸を有効しないとコマンド実行しませせんよ~のようなことだけです。
実際に動かしてみるとInVelocity・Busyはちゃんとコマンド実行してるときにONしてFeedbackくれるとわかります。
最後に
軸のErrorWord・速度・現在値など見る場所を教えます。
Technology objects>軸>右クリック>Open DB editor。
そうすると一覧ができます。
はーい、お疲れ様です。