Beckhoff TwinCAT3とSiemens SINAMICS S210 PN を動かす第2話です。前回はTwinCAT3 Control panelからS210 Driveを動かしました、今回はProfisafe Telegram30を組み込みたいですが、TwinCAT IPCだけだとProfisafeが使えないので、Profinet のShared Devices機能を使いS71212FをProfisafeだけ制御し、MainのMotionをBeckhoffからControlしようのやり方を紹介します。
Thanks!
この記事が出来上がるのはベッコフ日本法人ベッコフオートメーション株式会社さまとMana Design worksさまから機材を貸してくださったおかけです。誠にありがとうございます。
ベッコフ日本法人ベッコフオートメーション株式会社
IPC6920-005はベッコフ日本法人ベッコフオートメーション株式会社さまが貸してくださったものです。Beckhoff Automationは1980 年会社設立、PCベースの制御技術をベースにしたオープンオートメーションシステム導入の先頭に立つドイツ企業です。
ベッコフ日本法人ベッコフオートメーション株式会社は、2011年に横浜に本社、2017年に名古屋オフィスを設立しました。
こちらはベッコフ日本法人ベッコフオートメーション株式会社様のホームページです。
どうぞよろしくお願いします。
https://www.beckhoff.com/ja-jp/
Mana Design Works
Siemens SINAMICS S210はMana Design Worksさまが貸してくださったものです。
Mana Design Worksは大阪に本社あるSiemensの正式なソリューション パートナーで、Siemens製のCPU・HMI・Drive・Motion Controller・SCADAから国産メーカまで常に最適な提案ができます。
こちらはMana Design Works 様のホームページです。
どうぞよろしくお願いします。
Reference Link
Video
English Version
Part2
Part1
Japanese Version
Part2
Part1
Siemens- Safety Program
ここからSiemensのTIAから簡単な安全プログラムを作成します。
SiemensのSafety ProgramではLADやFBDだけ作成することができます。そのSafey Blockにはすでにエラー検知・対処・Safety テストも自動的に組み込まれているのです。
LAD/FBD
SiemensのStandardプログラムはSCL/STL/LAD/FBD/S7Graph 5種類作成できますが、Safetyの場合はLAD/FBDで、使用できる関数も制限されています。
Safety Program Structure
Safetyプログラムでは2つのF-Runtime groupsがあります。各 F-Runtime groupでは自分のSafety アプリケーションの作成したBlocksと自動的に追加されたF-Blocks、F-runtime DB、F-I/O DBsになります。
以下はSiemens プログラムの構造です。
Support Data Type
以下のData Typeのみ使用できます。
- BOOL
- INT
- WORD
- DINT
- DWORD(S7-300/S7-400)
- TIME
- ARRAY[*]
- UDTはNG
- BoolはNG
- WordはNG
- TimeはNG
- F-Compliant PLC data type
Main safety block
Main Safety blockはSafety プログラムの中で最初に呼ばれたプログラムです。S7-1200/1500 FCPUではF-OBに呼ばされ、F-Runtime GroupにAssignされています。
F-Runtime groups
処理を便利にするため、Safetyプログラムは複数のF-runtime groupsに存在してる。F-Runtime groupsがF−System内部で複数のF-blocksを連結する構造だと思ってください。そのGroupには以下の部品が存在してます。
- Main Safety Blockを呼び出すのF-OB
- Main Safety Block(F-OBに紐つけたF-FB/F-FC)
- 他にFBDやLADから作られたF-FBsかF-FCs
- F-DBs
- F-runtime groupの情報格納されたF-DB
- F-I/O DB
- 自動生成させたF-Blocks
- などなど
ESTOP Function
ではまずESTOP機能を試してみましょう。ESTOPを一つS71212FのI0.0と繋がります。
Wiring
Sink Inputの場合は”-”と”M”を繋がってください。
Function Block
こちらは今回使用するFunction Block ESTOP1です。これはSiemens TIAの標準のSafety Function Blockでそのまま使えばStop Categories0 と1を満たし、緊急停止とリセットを含む機能ができますので、ESTOPのプログラムを特に組む必要がありません。
注意するのはENとENOは他のデバイスとつながることができない。つまり、そのBlockは必ず実行する。
VAR_INPUT
E_STOP | BOOL | 緊急停止の信号 |
ACK_NEC | BOOL | 1=復旧するにはリセットが必要 |
ACK | BOOL | 1=リセット |
TIME_DEL | TIME | Time Delay |
VAR_OUT
Q | BOOL | 緊急停止の状態、1=OK |
Q_DELAY | BOOL | 緊急停止の状態、1=OK+Delay Time |
ACK_REQ | BOOL | リセット信号リクエスト |
DIAG | BYTE | 診断情報 |
Implementation
Create new Project
TIAを起動し>Project>Newします。
プロジェクト名を入力し>Createします。
Projectが作成されました。
Add S71200
S71212Fを追加します。Add new deviceをクリックします。
CPU 1212 FCを選び、Versionはいま実機のFirmwareを示しています。
S71212Fが追加されました。
Configure the IP
次はIPを設定します。PLC_1>Device Configurationをクリックします。
Propertiesをクリック>PROFINET interface[X1]>Ethernet addressesを開き、
IP protocolを”Set IP address in the project”を選び>192.168.3.51をします。
Configure the Start-up Cycle Time
Startup Cycle Timeはいわゆる立ち上げTimeですね。初期設定はたしかに60sでかなり遅いので、6sにします。
Add Tags
次はESTOPにTagを設定します。S71212FのI0に繋がっていて、DI8/DQ6_1の列にI address は0だと初期設定されています。
つまりI0=I0.0、I1=I0.1のように考えればよいです。ESTOPはI0と配線しましたのでCPUのアドレスはI0.0になります。
PLC tags>Default tag tableを開きます。
NameをiESTOPに設定し、Data typeはBool、Addressを%I0.0に設定すればOKです。
PROGRAM
次は簡単なSafety programを作成します。
Add ESTOP1 Data Type
最初にESTOP1のData Typeを作成します。
PLC data types>Add new data typeをクリックします。
NameにData typeの名前を入れ、SIMATIC SafetyにあるCreate F-suitable PLC data typeのCheckboxを入れ、OKします。
出力の3つBoolを定義します。
Add Normal Data Type
PLC data types>Add new data typeします。
Normal Data typeの名前を入力し、Okします。
ElementはESTOP1のStateとStateのByteに各Boolの変数を定義します。
Add Function
Program blocks>Add new blockします。
Blockの名前を入れ>Functionを選択>LanguageをSCLにしてOkで完成します。
FunctionのInout InterfaceはUDT_ESTOP_STATEに定義されます。
Codeはまず出力を初期化し、State Byteによって現在状態を出力します。
Add Safety DB
次はSafety Data Blockを追加します。
Program blocks>Add new blockします。
Data block 選び>Safety DBの名前入れ>TypeはGlobal DB>Fail-sfaeにCreate F-BlockのCreate box入れでOKします。
Safety DBが作成されました。
Nameのところに変数名入れ、Data typeは先に定義したSafety user data typeにします。
中身は必要な変数は全部そろえています。
Add Non-Safety DB
次はNon-Safety DBを追加します。Program blocks>Add new blockします。
DB名を入力し>Data blockを選択>TypeをGlobal DBを選択でOKします。
DBが作成されました。
DUT_ESTOP1_STATEとResetのBool変数を定義します。
Add ESTOP1
いよいよプログラムを作成します。
Main_Safety_RTG1をクリックします。
黄色ついてるってことはこのBlockは安全Blockです。
右にあるBasic instructions>Safety functionsからESTOP1をNetwork1にDropします。
Call optionsのPopupが出てきます。
Multi instanceを選び>名前をESTOP1を入力、OKします。
よし、プログラムが追加されました。
E_STOPは先ほどTag Table定義したI0.0と割り付けます。
ACK_NECはTRUEの定数、つまり必ずリセットリセットが必要。
ACKは先程追加Global DBにあるResetに割り付けます。
TIME_DELはT#1sにします。
出力はDIAG以外にSafetyDBに定義した構造体変数と紐つけます。
Add Program in OB1
最後はOB1でESTOP1のState出力から現在のESTOP1状態を取得するFunctionを呼び出します。
FC1を呼び出し、ESTOP1はDB_SharedのDBに定義したESTOP1をパラメーターとして渡せばOKです。
Trace
TIAのTrace機能からESTOP1の状態をMonitorします。
Traces>Traceをクリックします。
Configuraitonを開いて、NameのところにMain_Safety_RTG1_DBに定義したESTOP1入力E_STOPと出力のACK_REQとQを入れます。
Recording conditions>Sample withをFOB_RTG1を設置します。(Main_Safety_RTG1はSafety FBなので)
Trigger>Trigger ModeをMonitoring without triggerを選択します。
Transfer trace configuration to deviceをクリックしTraceをDownloadします。
もし同じConfiguraitonがすでに入ってるならOverwriteしますかって聞かれます。
Yesで進みます。
Trace画面が表示されます。
Activate recordingボタンをクリックしデータを記録しはじめます。
現在値が取れるようになります。
もし記録停止したいならDeactivate recordingボタンをクリックすればOKです。
DeviceにあるTraceを削除したいならDelete Trace from deviceボタンをクリックすればOKです。
Yesで確定します。
Result
まず最初にESTOP(赤)がOFFしてる状態です。Q(青)もOFFしてるになっています。
次はESTOP信号(赤)を入れます。Q(青)がまだOFFの代わりにACK_REQ(緑)がTrueになっています。
最後はリセット信号入れると、ACK__REQ(緑)がOFFになり、Q(青)がONになりました。
Shared Devics?
PROFINETではいくつかのオプション的な機能があり(場合によって使用できないPNデバイスもありますが) 、例えば Shared input・Shared Device・Fast Start Up (FSU)など。今回紹介するのはそのShared Deviceになります。
Shared Deviceは簡単に言いますと、1つのStation中にあるSubSlot群を複数のControllerからアクセスすることができます。よくあるアプリケーションは同じStationではPROFI-safe SupportしてるSafety ControllerがSafetyIOのSubSlotだけにアクセスし、Safety Functionを実装する(例えばSTO)。他のStandard SubslotはStandard Controllerがアクセスし装置を制御します。
Advantages
Shared Deviceを使用することにより以下のメリットがあります。
- IO Devicesやモジュールの数が減り、装置のコストが下がります。
- 複数のCPUからリアルタイムでIO Dataをアクセスできる
- 盤内のスペースが節約できる
- CPU-CPUの通信実装しなくてもデータ交換できる
- CPU-CPUの通信プログラムを作成する必要がなくなる
Requirement
- Step7 TIA V12 SP 以上
- Siemens CPUはFirmware V1.1以上
- IO DevicesはShared Device機能をSupportする
注意するのはShared Deviceを使用する場合は、プロジェクトを別々に分ける必要があります。
If iDevice and Shared Device are both used..
もしあなたのアプリケーションはiDeviceとShared Deviceを同時に使用する場合は、
- S7-1500の場合はFirmware V1.5以上、そしてTIAからそのI-DevicesをGSDML Exportし、IO ControllerのプロジェクトにImportする
- S7-300,S7-400の場合、Step7 V5.5 からGSDMLをExportし、IO ControllerのプロジェクトにImportする
- ET200SP-CPUの場合はFirmware V1.6以上、そしてTIAからそのI-DevicesをGSDML Exportし、IO ControllerのプロジェクトにImportする
Rules
- Shared Deviceを使用するIO Controllerは必ず別々のプロジェクトで構築する必要があります。(今回のTutorialはTwinCAT3とS7-1200ですが、Siemens PLC 同士でも同じです。)
- Shared Deviceは別々のProjectですが、Hardware Configurationは必ず一致する必要があります。
- IP、DeviceNameは必ず一致する
- Send Clock設定も必ず一致する
Safety
標準のDrive機能と比べ、Safety Integrated Functionsは更に低いError Rateになります。
そのError RateはPerformance Level(PL)とSfaty Integrity Level(SIL)に関連しています。
そしてSafety 機能はUserさんがアプリケーションのリスクを減らすことができます。
Siemens のS210 DriveにあるSafety Integrated(”Drive-Integrated”)はつまり安全機能は
Drive内部に内蔵しており外部のコンポーネントの拡張が必要ありません。
Safety Integrated Functions
- Safety Integrity Level(SIL) 2, DIN EN61508
- Category 3, DIN EN ISO 13849-1
- Performance Level(PL) d, DIN EN ISO 13849-1
Response Times
Safety Integrated FunctionはSafety Monitoring cycle 4msで実行されます。
今回使用するPROFISafe Telegramの評価時間は大体Monitoring Cycleの2倍になります。
STO(Safe Torque Off)?
STOはSafety Torque OFFでSafety機能としてトリガーされると直ちにトルクOFFになる状態でそれ以上モーターに動力を与えないように保証します。その安全機能はEN 6024-1のカタログ0に該当します。
モーターが回ってるときSTOがトリガーされたら惰性でモーターを止めます。
Siemens S210 はFailsafe Digital Input(安全入力)やPROFIsafe経由で使用できます。
Telegram30
DriveにTelegram30を組み込むことにより、F Host(PROFIsafe SupportするIO Controller)とPROFIsafe通信ができます。今回紹介するのはTelegram30で、他にまだTelegram900などのPROFIsafe Telegramがあります。
Telegram30では6BytesのIN/OUTデータを占有します。0Byte目と1Byte目はSafety user dataで残りの4BytesはPROFIsafe 通信で使われています。
Control word S_STW1
こちらはTelegram30のSTW1 Controlword構造です。
Stauts word S_ZSW1
こちらはTelegram30のZSW1 Statusword構造です。
Flow
最初にモーターが運転中、1のときSTOがPROFIsafeかFailsafe Digital Inputからトリガーされました。そのときTelegram30の入力がSTO_active信号がFeedbackされます。
Driveが直ちにSafety機能を作動させます。MotorがトルクOFFになる状態でそれ以上モーターに動力を与えないように保証します。そして惰性でモーターを止めます。
もちろんSTO機能がモーターの再起動を完全にブロックします。
DriveがSTO信号を無効に戻すと、Driveはまだ”Ready”の状態に戻ります。リセットするには以下の選択肢があります。
- IO Controllerからのリセット
- DriveにあるOKボタン
- 電源の入れ直し
- S210のWeb serverからリセット
最後はON/OFF1のパルス信号でDriveを再起動します。
Implementation
Siemens S210 Side
Web ServerからSiemens S210のProfisafe機能を有効にします。
Safety integrated>Commissioningをクリックします。
右にあるSafety integrated Passwordを入力>Enterします。
Password acceptedのメッセージ出たらOkです。
これからProfisafeの設定をします。
Safety IntegrationはBasic function、Control viaはPROFINsafeし、Startボタンで開始します。
S11 Delay timeなど細かい設定もできますが、今回はDefaultで行きます。
次はPROFIsafe Telegram TypeをTelegram30を選択します。
はPROFIsafeアドレスは1で、STOを設定し、Continueで続きます。
DefaultのままでContinueします。
Finishで完了します。
Save all parameters(Power failure-proof)のCheckboxを入れ、Finishします。
しばらく待けば、Okです。
Preaction
Donwload Library
以下のLINKからライブラリをDownloadできます。
このようなZIP FileがDownloadされました。
TIAにImportするために解凍してください。
Import Library
TIAを起動し、右にあるGlobal librariesにあるOpen libraryのボタンをクリックします。
先程解凍した.al16を選び>Openします。
SiemensのWebからDownlaodしたライブラリをTIAにImportしました。
Control Word
まずTelegram30のControl WordをImportします。
S7-1200F>PROFIsafe>Control Word>Telegram 30を開き、中にあるLDrvSafe_PdcTlg30ControlをProject TreeにあるProgrma blocksにDropします。
LDrvSafe_typePdcTlg30ControlをProject TreeにあるPLC data typesにDropします。
Status Word
次はTelegram30のStatus WordをImportします。
S7-1200F>PROFIsafe>Statys Word>Telegram 30を開き、中にあるLDrvSafe_PdcTlg30StatusをProject TreeにあるProgrma blocksにDropします。
LDrvSafe_typePdcTlg30StatusをProject TreeにあるPLC data typesにDropします。
LDrvSafe_PdcTlg30Control
このFunction Blockを使用すると簡単にSIMATIC MircoのSafety 機能をTelegram 30経由で制御できます。
VAR_INPUT
Parameter | Data Type | Description |
STO | BOOL | Safety Torque Off(STO)Safety機能を制御する1=Deselect、0=Select |
SS1 | BOOL | Safety STOP1(SS1)Safety機能を制御する1=Deselect、0=Select |
SLS | BOOL | Safety Limit Speed(SLS)Safety機能を制御する1=Deselect、0=Select |
SLT | BOOL | Safety Limited Torque(SLT)Safety機能を制御する1=Deselect、0=Select |
ackSafetyFaults | BOOL | Fail-safe acknowledgment する、立ち上げでトリガー |
VAR_OUTPUT
Parameter | Data Type | Description |
PdcTlg30Control | LDrvSafe_typePdcTlg30Control | Telegram30を制御するProess IO |
LDrvSafe_PdcTlg30Status
このFunction Blockを使用すると簡単にSIMATIC MircoのSafety 状態をTelegram 30経由で評価できます。
VAR_INPUT
Parameter | Data Type | Description |
PdcTlg30Statusl | LDrvSafe_typePdcTlg30Status | Telegram30の入力 |
VAR_OUT
Parameter | Data Type | Description |
safetyFaultActive | BOOL | Fail-safe acknowledgment する、立ち上げでトリガー |
STOactive | BOOL | Safety Torque Off(STO)Safety機能の状態1=Active |
SS1active | BOOL | Safety STOP1(SS1)Safety機能の状態1=Active |
SLSactive | BOOL | Safety Limit Speed(SLS)Safety機能の状態1=Active |
SLTactive | BOOL | Safety Limited Torque(SLT)Safety機能の状態1=Active |
Install GSDML File
TIAからOptions>Manage general station description files(GSD)をクリックします。
もしこのようなエラーがあれば、他のTIAを閉じて、もしくはPCを再起動してください。
Source pathにGSDMLが格納されているFolderに設定したらGSDMLがScanされました。
すべてを選び>Installします。
しばらく待ちます…
よし、インストール成功です。
TIAが自動的にUpdateしてくれます。
Hardware Configuration
Add S210
TIA ProjectからS210を追加します。右のProduct CatalogからSINAMICS S210 PN V5.1をDropします。
SINAMICS S210 PN V5.1が追加されました。
No assignedをクリックし>PLC_1.PROFINET interfaac_1を選択します。そのPLC_1.PROFINET interfaac_1はS7-1200のProfinet X1だと示しています。
いまS71212FCとSINAMICS S210 PN V5.1がProject上でProfinet接続しました。
Set IP Address
TIAから紫の目ICON、Show address labelsボタンをクリックします。
SINAMICS S210 PN V5.1にIPが表示されるようになり、PN/IE_1の緑Fieldから直接IPを編集できるようになります。注意するのはそのConfigurationをTwinCAT側と一致する必要があります。
Add Telegram
次はSINAMICS S210 PN V5.1にTelegramを追加するために、S210 ICONをダブルクリックします。
Device Viewに切り替えます。
右のCatalogからPROFISafe Telegram30とStandard telegram3を追加します。
注意するのはそのConfigurationをTwinCAT側と一致する必要があります。
このような操作です。
SINAMICS S210 PN V5.1がいまTelegram30とTelegram3が挿入されました。
Set Shared Devices
最後はShared Devicesを設定すれば終わりです。
Properties>Shared Devicesを開いて、S71212FからAccessするSlotはDRIVE_1、Module Access PointとPROFINsafe Telegram 30だけにします。
Device ViewからSINAMICS S210 PN V5.1を見るとTelegram3が灰色になり、I addressとQ addressにも設定できなくなります。それはSINAMICS S210 PN V5.1いまのTelegram3 SlotがS71212Fからアクセスしないようになっています。
F-Address
PROFIsafe Telegram30をクリックし>PROFIsafeを開いて、F_Source_Addは1のままでOKで、F_Dest_Addは先程S210 Web serverからセットアップしたF_Dest_Addに合わせてください。
Define Tags
PROFINsafeのIO Tagsを定義します。
PLC tags>Default tag tableを開きます。
変数名はわかりやすく定義し、Data TypeをライブラリからImportしたLDrvSafe_PdcTlg30ControlとLDrvSafe_PdcTlg30Statusを設定し、AddressはDevice Viewの先頭に合わせましょう。
Program
いよいよSiemens側のプログラムを作成します。
Safety Main_Safety_RTG1
VAR
Safety Function Block ESTOP1のInstanceをStatic領域で定義します。
NTW1
まずはESTOP1 Safety Function Blockを呼び出し、E_STOP信号などを割り付けます。
NTW2
次はSiemensのライブラリを使用しTelegram30のStatusを評価し、現在のSTOなど状態を取得します。
NTW3
最後はSiemensのTelegram30制御ライブラリを呼び出します。
STOのトリガーは先程のESTOP1の出力と紐つけます。
最後はCPUにDownloadしてください。
TwinCAT Side
TwinCAT側が今回やることはShared Devices設定するだけです。
Add Telegram30
前回のプロジェクトからSINAMICS S210 PN V5.1>Term 2(DRIVE)を右クリックしAdd New Itemします。
Telegram30を追加します。
PROFINsafe Telegram30が追加されました。
Set Shared Devices
次はShared Devicesを設定します。SINAMICS S210 PN V5.1をクリックします。
For Telegram3
Telegram3ではTwinCAT側で制御しますしますので、AccessをTrueにし、他のものをFalseに設定します。
For Telegram30
もちろんTelegram30もFalseしてください。