Siemens#IDevicesを使う

#前書き
いまの工場現場はますます複雑になり、もちろんStation間（PLCとPLCと）にもデータが交換すること求められています。しかも単なるデータ交換できるではなく、効率よく、ネットワーク機器少なく、簡単明瞭で、立ち上げはすぐできるなども必要になります。そこでSiemnes社がI-Deviceという機能が提供し、２つのControllerの間に簡単でデータ簡単を実現します。

#IDeviceとは？
少し詳しくそのIDeviceを見てみましょう。IDeviceを使うことによって２つのControllerの間にデータ交換することが簡単に実現できると書いていますが、ざっくりいうとそのIDeviceはCPU(PLC、Motion Controller、Software Controllerなど)、CP(Communication Processer)をDevice扱いするってことです。そうすると、自分がControllerで自分のネットワーク内のRemote IO、Fieldデバイス持ちながら他の上位のControllerの”Device”として通信するってことです。

(国産のメーカよくMasterとSlaveのような言い方で、自分がMasterでSlaveのデバイスありながら他の上位システムのSlaveとして存在するって意味ですね。SiemensはそれをControllerとDevicesと呼ぶ)

例えば下のように、一番上のIO Controllerと他のFieldデバイスとProfinetでつながっています。
下にぶら下がってる四角のはS7-1200でそのS7-1200はIO Devicesであり(一番の上のS7-1500からみると)、そして自分もIO ControllerとしてRemote IOのようなIO Devicesがもってます。簡単明瞭。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/952c9ffc-76b8-0a35-cd5e-1f15f1388165.png)

##使用可能のデバイス
- S7-300(Firmware V3.2以上)
- CP 341-1(Adv)
- S7-400(Firmware V6以上)
- S7-1500
- S7-1200(Firmware V4以上)
- ET 200S/ET200SP/ET200pro CPU
- SIMOTION

その詳細はManualを参照お願いします。

ここでもう一つのアプリケーションを話ししましょう。
まず上にいるのは上位のCPUで、自分のDistrictedがあり、そしてWirelessを使ってVehicle1..nの各PLCとIDeviceでデータ交換します。そして各PLCも自分のFieldデバイスあり、それを実現するとか上位PLCが自分のプロジェクトにデバイス名ことにアドレスふっておけば問題ありません。
Vehicle1：IQ5000からー
Vehicle2：IQ5050からーなど。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/76013ced-a6c6-dde7-26c4-d3e4e2367496.png)

##メリット？
- ネットワークの配置はもっと柔軟になる
- 各プロジェクトの修正が最小限に
- SiemensのControllerと他のメーカーデバイスと統合(GSDFilesを使う)
- PN/PN couplersいらない
- ルーターなどの設置なく

まぁ、つまりお金ですね。

#IDevicesの基本
もちろん、そのままプロジェクトの設定こうして、次はこうしてScreen Shotを貼り付ければOKですが、そのやり方はいかにも芸が無さすぎでここで基本を踏みながらしたいと思います。

##用語
###IDevice
Intelligent IO deviceの構成設定されてるCPUかCPのこと。

###Profinet
PROFINETとは1999年にプロフィバス協会より発表された産業用のEthernetプロトコルです。PROFIBUSと同様にPROFIBUS & PROFINET Internationalにより管理されています(日本では、日本プロフィバス協会が普及に取り組んでいます)。

###GSD
PROFIBUSで機器の通信設定するにはGSDファイル(General Station Description) が必要で、
PROFINETならGSDMLファイル(XMLベースのGSD)が必要です。
そのFILEはベンダーより提供されていますので、GSDファイルを入手し、通信設定ツールを使用しスレーブアドレスやI/O割付などの設定作業を行います。

##データ交換のコンセプト
基本的にI-DeviceはCPU中のProcess Imageでデータ交換します。Process Imageを使うことによって直接すべてのデバイスをアクセスできるようになり、ルータ、Gatewayを使わず済みます。

###IOContollerの視点
IOContollerにとっては単なるRemote IOとやり取りとあまり変わりません。Process ImageからInputを読み、メモリをOutputへ書き込むのような感じです。

###I-Deviceの視点
それでもあまり変わりませんね。データを上位IOControllerとやりとりはRemote IOとINPUT、OUTPUTのデータ交換みたいです。

##Transfer areas
先に言いましたが、CPUのProcess Imageでデータ交換するのでそのProcess Imageの領域が”Transfer areas”と呼びます。

###領域
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/cc767ca0-1d87-bd66-a17e-52b8002064ae.png)

##AR
ARはApplication Relationshipのこと。

注意するのは1440Bytesまで交換できますよと書いておりますが、
そのRangeは直接Profinet更新時間に影響します。
transfer areasのBandwidth＋下位IOSystemのBandwidth＝IDeviceで使うBandwidth。

##設定の選択肢
- 同じTIAプロジェクト内で直接構築する
- 異なるプロジェクトで構築する(その場合はGSDが必要になります)

##IDeviceの種類
###IDevice自分のIOSystem無し
いわゆる以下のような構成ですね。
自分Remote IOなく、上位のControllerとProfinetでつながってデータ交換する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/b5bd58b9-d620-2d71-6bab-0418a5852e22.png)

###IDevice自分のIOSystemあり
いわゆる以下のような構成ですね。
IOControllerが自分のRemote IOなどがあり、そして上位のControllerのDevicesとしてProfinet繋がってデータ交換する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/06f58089-e856-0e4e-b25e-3295b2144687.png)

##アラームと診断
S7CPUは様々な診断関数が提供され、例えば下位Systemとの通信エラーなど、より簡単でトラブルによる停止時間を短くすることができます。

###OB
- OB 83 (insert/remove)
- OB 85 (program sequence error)
- OB 86 (rack failure)
- OB 122 (I/O access errors)

###TIA関数
- GET_ERROR
- GET_DIAG 

#Project構成
いよいよProjectをどう構築すればよいかのところまで来たね。同じProject内で構築すると別々Projectで構築する方法を紹介したいと思います。

##同じProject内
ここでまずPLC_1とPLC_2２つのControllerがあり、PLC_1はControllerでPLC_2がDeviceとしてPLC_1とデータ交換。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/a6d59cf1-f6b8-5912-3469-af6431e94bbe.png)

PLC_1にProperties>PROFINET Interface>Ethernetを選んで、Add new subnetで新しいSubnetを追加し、IPはネットワーク構成に合わせるように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/f241499d-0aa1-ead1-fabe-bda5015df473.png)

次はPLC_2にProperties>PROFINET Interface>Ethernetを選んで、Subnetのところに先追加したSubnetを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/d601bd5b-3951-2b15-926e-6c03ce3ef878.png)

いまは２つPLCが同じSubnetに繋がっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/d069c685-d07e-b61e-ef70-7a8c6da08265.png)

次はPLC_2をDeviceとして設定します。Operating modeでIO DeviceのCheckBoxを入り、Assigned IO ControllerをPLC_1のInterfaceを選んでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/ef116d47-c026-18b1-4985-c689033c7620.png)

下のTransfer areasで<Add new>を押すと新しい転送エリア設定できます。そして矢印を押すとIかQかを設定することができます。もちろんIはInput,QはOuputです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/0bdda21c-2fe8-a319-e139-e5790dd8b9dd.png)

それだけです。最後はProjectを２つのPLCにもダウンロードすればOKです。

##別々Projectで
多分こっちのほうが使うことが多いと思います。よく考えたら少し大きめなLineであればそもそも全てのControllerが同じProject内にはあまり考えられないです。ここで使うのはGSDFileです。考え方としてはもし自分がControllerでありながらすればDeviceのGSDをIMPORTする必要があり、逆に自分がDeviceとして他の上位Controllerとデータ交換したいのであればGSDをEXPORTしControllerのProjectにIMPORTする必要があります。

でも大丈夫です。ここで両方も紹介しますので。

_test2のプロジェクトで同じのように、IO DeviceにCheckBox入り、Transfer areasで必要な交換領域を設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/1fc8b9b7-e92d-b7a9-dc6b-86475f045255.png)

次はCtrl+BでコンパイルしExportボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/332d82a2-dff5-aaaa-08f1-13aa8a276ef1.png)

次は以下のPopup出てきます。OKをします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/5dde2ea0-65da-9ff5-58be-c3ad4f054e0c.png)

このようなXMLがEXPORTされています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/25c702a8-5f53-5b1d-743c-4aaef664d1d4.png)

次はControllerのプロジェクト開きます。Magnage general description files(GSD)をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/686eab4d-bd46-1f36-637d-f3cc1d868903.png)

次は１のところに先EXPORTされてたXMLのところ選んたら、２のところにそのGSDが見えます。CheckBox入れ、３のInstallボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/55eaacb0-0092-5782-d84b-4dd67f79c8b8.png)

Install終わりったらCatalog>Other field devices>PROFINET IO>PLCs & CPs>で先Installしたものを構成に追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/0ac45e9b-7a93-90b5-028e-5a831e330dda.png)

構成はこうになりますね。PLC_1もうこのProjectの中にDeviceとして存在します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/eeb37fc7-6d18-6f95-3fe5-a09d915839e3.png)

Not assigned のところに選んでPLC_1.XXXXでネットワーク構成に合わせ、どっちのPORTを繋がっていくのかを。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/fa9391d6-05be-5d36-f00d-fd6a57820ab5.png)

最後はそのDeviceをダブルクリックしDevice viewに切り替え、I addressとQ addressでProcess Imageのアドレス設定すればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154661/550375fd-68a2-9fdc-d271-5ee59eba831b.png)

お疲れ様ですー