Siemens#SINA_SPEEDを使ってDriveを制御する

これはSiemensのDrive制御する紹介の第二回です。前回はSiemens社のStarterというソフトをどう扱うのか簡単に説明しました。Commissioning PanelでDriveを直接動かす方法も教えました。それはすごく大事です。
試運転するにはいきなりプログラム走らせてDrive動かすのは大体無理です。そのときも色々回りをみてものがぶつかってるかどうか?そもそも回れるか?もし回れないときはどんな問題なのかをクリアしないといけません。
そしてCommissioning Panelでもの回すことができ、今度はProgramで回ろうとしても全然動かないのあればそれはプログラムの問題です!とはっきりわかりますし。

Siemens#StarterでDriveを試運転する

SINA_SPEEDとTelegram1

ここでまず書きたいののは、そもそもTelegramってなんですか?ってことですね。
SiemensのTelegramはPLCとSINAMICSのドライブの間に通信するだめに使われてるもので異なるアプリケーションで違うTelegramを使うです。普通には:

  • Profidriveの標準Telegram(Telegram1)
  • Siemens Telegram(Telegram111)
  • ProfiSafeを使うときのTelegram(Telegram30)
  • Free telegram(Userがカスタマイズする)

もしSinamicsでBasic Positionを使うにはTelegram111を使う必要。
もしSinamicsで簡単な速度制御だけならTelegram1だけでもいい。
Siemens社がそれを簡単に制御できるのLibraryを提供しています。

  • 速度制御ならSINA_SPEED。
  • 位置決めならSINA_POS。
  • パラメータ読み取りならSINA_PARA。

って感じですね。もちろんすべてのTelegramの詳細をManualみてくださいね。

ライブラリインストール

image.png

自分使ってるTIAバージョンに合わせてDownloadしてください。

image.png

Zipを解凍したらDriveLib.msiがあり、タプルクリックしセットアップします。

image.png

Library>Drive_Lib_S7_1200_1500>Master copies>03_SINAMICS>SINA_SPEEDをProgram blocksへ引っ貼ります。

Hardware設定

次はHardware構成を追加します。G120を使い、Telegram1を使用します。

TIA

image.png

G120を追加します。

image.png

Not assignedのところクリックしPLC_1.PROFINET interface_1をクリックします。
そうすることによってPLCとG120がProfinetで繋がります。

image.png

Profinetでデバイスを繋がりするにはデバイス名・IP両方も必要です。ここでまず1の目アイコンを押してIP表示し、2と3でIPとデバイス名を図面合わせて設定してください。

image.png

G120をタブルクリックしSubmodules>Standard telegram 1,PZD 2/2を引っ貼ります。

Starter

image.png

Fieldbusをクリックします。

右のこのような画面が出てきます。

image.png

1.PLCとDriveの通信Protocol、Ethernet・Profinetを選びます。
2.いま表示されてるのはDriveが送るデータか、Driveがもらうデータかの選択。すべてDrive側からを基準にします。
3.Safey Profisafeを使うならここでTelegram30を選びます。
4.DriveとPLCの間に通信するのはProfinetで選択しましたが、ではどんなTelegramをするか?をここ設定できます。今回は回すだけなのでTelegram1にします。
5.設定したTelegramに該当する交換のデータ一覧。

Telegram1説明

image.png

それでもう少し話しましょう。これはTelegram1がPLCとDrive実際交換してるデータ。


STW1

image.png

ZSW1

image.png

そしてSTW1のところをクリックしますと、右側に小さいなPopupが出てきます。
そこで同じくSTW1の16Bitデータがどんな意味を持っているかわかります。Onlineにすると該当する信号がOnしてるかどうかもわかります。

image.png

次はNSOLL_Aを見てみましょう。
いまはNSOLL_A(PLCからもらったWordデータ)がp1070[0]とつながっています。
では青い四角を押してFurther interconnectionsを押してみましょう。

image.png

右側はこのような画面出てきます。P1070[0]の隣に小さいなCheckbox入れてますね。そしてP1070[0]はSpeed Setpointです。

image.png

P1070の説明:

image.png

同じの考え方で、今回はDriveをPLCに送るもの見てみましょう。
1.Transmit directionを選択します。
2.ZSW1をクリックします。
Popupが出てきて、DriveからPLCへ送る16Bitデータがどんなデータが見えます。

image.png

みんなさん少し疑問がありませんか?少なくても私はじゃこのReadyは実際どこから取ってるの?って聞きたくなりますよね。先のPopupのところMouse iconを持っていくと、r2053[0]が見えますね!それはメモリ2053番って意味です。
r=読み込みだけ
p=書き込み可能、つまりパラメータ。
つまり、r2089[0]からデータを取ってそのままr2053[0]へ転送するって意味ですね。

image.png

この2089がなにか知りたいなら、Expert listをクリックします。

image.png

Parametersの下あるAllのところに2089入れてEnter押します。

image.png

話戻りますと、r63[0]がDriveの現在Speedでこの現在SpeedはNIST_Aに繋がります。
Word format、PZD2です。

image.png

そうすると2089は実際なんなのか見えます。

image.png

もう一つのみかた:Diagnostics>Interconnections

image.png

ここでもStatusなど見えますよ~

image.png

プログラム

image.png

いままたTIAに戻ります。SINA_SPEEDを詳しく見ましょう。これはSINA_SPEEDの構造です。SINA_SPEEDの中にDPWR_DAT(Profinetデバイスへ書き込むの命令)とDPRD_DAT(Profinetデバイスへ読み込みの命令)があり、Function BlockなのでMemoryがインスタメモリも必要です。

SINA_SPEED

image.png

こちらはSINA_SPEEDのFunction Blockです。

Input

  • EnableAxis(Bool)
    • Driveを開始・停止する。(Drive Control Word1のBit0に割り付けます)
  • AckError(Bool)
    • Driveのエラーをリセットする(Drive Control Word1のBit7に割り付けます)
  • SpeedSp(Real)
    • Speed設定(1/min)
  • RefSpeed(Real)
    • MotorのMax Speed(この設定はp2000と一致する必要あります)
  • ConfigAxis(Word):Driveの他のControl Wordを設定するもの。(p2090)
    • Bit1:OFF2
    • Bit2:OFF3
    • Bit3:Enable Operation
    • Bit4:Enable Ramp-Function Generator
    • Bit5:Continue Ramp up Function Generator
    • Bit6:Enable Speed Setpoint
  • HWIDSTW:通信するDriveのハードウェアID
  • HWIDZTW:通信するDriveのハードウェアID

Output

  • AxisEnabled(Bool)
    • Driveが有効してるかどうか
  • Lockout(Bool)
    • Driveが障害されてる
  • ActVelocity(Real)
    • 現在Speed
  • Error(Bool)
    • Driveがエラーあります
  • Status(Word)
    • Drive状態
      • 16#7002:正常
      • 16#8401:Driveはエラーあり
      • 16#8402:Driveが障害されてる
      • 16#8600:DPRD_DAR命令がエラーある
      • 16#8601:DPWR_DAT命令がエラーある
  • Diagld:(Word)通信エラーときの診断

実装

では簡単なプログラムを作ってみましょう。一つのFunction Blockを追加します。名前はG120とつけます。

image.png
image.png

Interface

image.png
NTW1:Driveのリセット
image.png
NTW2:DriveのEnable、もしエラーが発生した場合、リセットしない限りONできません。
image.png
NTW3:RefSpeedだけ。
image.png
NTW4:もしRunコマンドが入ったらSpeed設定値をsina_speedに書き込みます。
image.png

そうじゃない場合は常に0入れます。

NTW5:HWIDをSINA_SPEEDへ転送します。
image.png
NTW6:SINA_SPEEDを呼びだす。
image.png
NTW7:DriveもうEnableしてる状態。
image.png
NTW8:Driveはなにか障害されてる。
image.png
NTW9:現在Speed。
image.png
NTW10:Errorが出てますよ~のFlag。
image.png
NTW11:Statusによってエラーの種類を明確する。
image.png
NTW12:通信エラーなどのときのStatusを取ります。
image.png
NTW13:Error出たらリセットしない限りずっとONしままします。
image.png

HWIOの確認方法

image.png

Device viewを選んで、G120のクリックし、“System constants”を選んで、“XXXXX_Standard_Telegram_1XXX”です。

おまけ1-SINA_SPEEDの中身

SINA_SPEEDの中身はSCL言語で作成されており、私的には4つに部分に分けます。

  • Part1はLine20-36 、InputのConfigAxis、EnableAxis、AckErrorをSTWに割り付けるプログラムです。
  • Part2はLine38-55、Speed設定を割付る部分です。
  • Part3はProfinetデバイスにデータ送信する命令を使うプログラム。
  • Part4はもし送信がエラーないならそのとき処理とProfinetデバイスからデータもらうの命令と、そのデータの処理のプログラムです。
image.png

Part1

image.png

まずEnableAxis,AckErrorがSTW1.%X0とSTW1.%X7に入ります。STW1.%X10はPLCでコントロールするかどうかを設定するです。SINA_SPEED使うことになると、もちろんPLCがコントロールするのは当たり前まえなので、ここで定数“TRUE”を入れます。

image.png
image.png
image.png
image.png
image.png

次は%X0,%X1とかはなんですか?これはSiemensのPLCがWord,Int,Byteなどの変数のBit0、Bit1だけをアクセスするときに使うの機能です。

例えば16#7をWordVariableという変数へ与えます。

そうすると、みんなさんもご存知だと思いますが、Bit0,1,2がONになります。
つまり%X0,%X1,%X2もONになります。

今度逆に%X0,%X1,%X2をONすると、WordVariableの値が16#7になります。

話戻りましょう。Configの変数がDefault値は16#3Fです。つまり:
%X0~%X5がONになります。

image.png

16#3F実際の意味はそれらのOperationを常に使うというこです。
詳細は先のSTWをみてください。

Part2はLine38-55、Speed設定を割付る部分です。

image.png
image.png
image.png

Line39:RefSpeedは0じゃないかをCheckする。どこのプログラム言語も同じですが、値を0に割ってしまうとエラーになりますからね。
Line40:まず頭から?に出てくるのは16384ですね。これはなんの数字?だと思いますね。
まずもう一度StarterからDriveがもらうSpeed設定はどこのパラメータいくのか?p1070ですね。

次はp1070をHelpで見てみましょう。
Maxは4000って書いています。4000Hex=16384Decです!

つまりLine40やってるのは比例計算です。例えば、RefSpeedは2500、いまSpeed設定は1300だとすると、
SpeedSp*(16384.0/RefSpeed)=1300x(16384/2500)=8519。

Line42-48はSpeed設定は16BitのIntの最大値と最小値に超えたかどうかをCheckします。
Line49はデータ型式をWordに変換し、Bufferへ移動します。
Line51-52はもし最小のRefSpeedが0だったらSpeed設定値も0に書き込みます。
Line54-55はSTW1とSpeed設定をデータ送信Bufferへ移動します。

Part3はProfinetデバイスにデータ送信する命令を使うプログラム。

image.png

ここで命令の説明を割愛します。
命令の実行結果をpiRetSFCへ転送、WordからINTに変換しDiagIdに格納します。

Part4はデータもらうのプログラムです。

image.png

かなり長いのでさらに分けて説明します。

Part1

image.png

先データ送信の命令を使ってたとき実行結果piRetSFC を0かどうかを比較します。
もし0じゃないならなにかの通信エラーなので処理しません。

Part2

image.png

もしpiRetSFCが0のであれば通信問題なしのことで、DPRD_DATの命令を使ってDriveからデータをもらいます。
そしてまた命令の実行結果をpiRetSFCへ転送、WordからINTに変換しDiagIdに格納します。(なぜpiRetSFC二回も比較するのはよくわかりませんが…)

Part3

image.png

またかなり長いので分けて説明しますね。
まぁ、まずもし命令実行がエラー出たら、Block出力すべて0にします。
現在SpeedとかDriveEnableとか。

image.png

次に、Line71使ったDPRD_DAT命令でDriveからもらったデータがsxRecvBuffに格納します。ZSW1は0番目のWord、Velocityは1番目のWord。
そのあとは単なるZSW1とかに合わせて値を与えるだけです。

image.png

Line155-161はRefSpeedじゃないとき(0で割るとエラーがでますかね)。そしてまた同じ計算式で現在Speedを計算し出力します。
もしRefSpeedは0なら現在Speedも0にします。

image.png

Line162-168はもし通信エラーがあったらErrorをTrueにし、Statusを出力します。

おまけーBrake付きの設定

image.png
image.png

DriveUnit>Control_Unit>Functions>Brake control

Motor holding brakeを1にします。“Motor holding brake acc. To sequence control”です。
これを選択しますと、実際p1215=1になります。
ではp1215をみてます。

image.png

これはTime-chartです。

image.png

そしてDC brakeを5にします。

参考Link

SINAMICS G: Controlling a speed axis with the “SINA_SPEED” block
SINAMICS communication blocks DriveLib for activation inTIA Portal

はーい、お疲れ様ですー

シェアする

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

フォローする