0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2020-04-12

これは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みてくださいね。

ライブラリインストール

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

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

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

Hardware設定

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

TIA

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を引っ貼ります。
image.png

Starter

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に該当する交換のデータ一覧。
image.png

Telegram1説明

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

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=書き込み可能、つまりパラメータ。
image.png
つまり、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

プログラム

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

SINA_SPEED

こちらはSINA_SPEEDのFunction Blockです。
image.png

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に書き込みます。

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

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の確認方法

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

おまけ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

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

次は%X0,%X1とかはなんですか?これはSiemensのPLCがWord,Int,Byteなどの変数のBit0、Bit1だけをアクセスするときに使うの機能です。
image.png
例えば16#7をWordVariableという変数へ与えます。
image.png
そうすると、みんなさんもご存知だと思いますが、Bit0,1,2がONになります。
つまり%X0,%X1,%X2もONになります。
image.png
今度逆に%X0,%X1,%X2をONすると、WordVariableの値が16#7になります。
image.png
話戻りましょう。Configの変数がDefault値は16#3Fです。つまり:
%X0~%X5がONになります。
image.png

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

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

image.png

Line39:RefSpeedは0じゃないかをCheckする。どこのプログラム言語も同じですが、値を0に割ってしまうとエラーになりますからね。
Line40:まず頭から?に出てくるのは16384ですね。これはなんの数字?だと思いますね。
まずもう一度StarterからDriveがもらうSpeed設定はどこのパラメータいくのか?p1070ですね。
image.png
次はp1070をHelpで見てみましょう。
Maxは4000って書いています。4000Hex=16384Decです!
image.png
つまり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デバイスにデータ送信する命令を使うプログラム。

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

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

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

Part1

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

Part2

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

Part3

またかなり長いので分けて説明しますね。
まぁ、まずもし命令実行がエラー出たら、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を出力します。
image.png

おまけーBrake付きの設定

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

これはTime-chartです。
image.png

そしてDC brakeを5にします。
image.png

参考Link

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

はーい、お疲れ様ですー

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?