今回の記事ではS71200-G2とS71516F-3間でPROFISAFE通信を構築します。その構成を成立するにはI-Devices機能を使用する必要があり、S71516F-3はIOコントローラーで、S71200-G2がI-デバイスになります。また、PNPN Couplerを利用し、2つのシーメンスCPUを同時にコントローラーとして立ち上げ、PROFISAFE通信をPNPN Coupler経由でデータ通信します。
さ、FAを楽しもう!

Implementation
今回はS71516F-3・S71200-G2両方にも構築する必要があります。
新しいデバイスx3作成する
最初にTIAプロジェクトを作成し、その中に2つのCPUを追加します。今回の例ではS71516F-3・PNPNカプラー・S7 1214FCになります。

IPアドレス設定
次はNetwork Viewを切り替え、各CPUのIPアドレスを設定します。

下図のボタンをクリックします。

デバイスのIPアドレスをアプリケーションに合わせててください。

PNPNカプラー設定
最初はPNPN Couplerを設定します。

Transfer Mapping設定
General→Module Parameters→Transfer Mappingをクリックします。

<Add New>をクリックし、新規接続を追加します。TypeのDrop-listからPROFISAFEを設定します。

注意するのはPROFISAFE IN/OUTだと記述してますが、実際は:
- IN12/Out6=INPUT
- IN6/Out12=OUTPUT
になります。なので、以下の構成ではX1->X2(S7-1500からS71200)にVirtual Slot1/2は入力でVirtual Slot3/4は出力になります。

Data status無効
また、PNPN Coupler経由でPROFISAFE通信する場合はData Stausを無効にする必要があります。

S71200 Side
S71200-G2側を設定します。


今回の記事ではS71516F-3とS71200-G2と接続しますので、S71200-G2のPROFINET インタフェースを設定しましょう。

Done!

Transfer area
次はOperation Mode>I-device communicationをクリックし、S71516F-3とS71200-G2間の通信領域を設定します。

安全プログラム
Safetyプログラムを作成します。

ネットワーク2
こちらはS71500→S71200(I Devices)に送信するPROFISAFEデータを受信するために呼び出すRCVDP関数、ID=1です。

ネットワーク3
こちらはS71500→S71200(I Devices)に送信するPROFISAFEデータを受信するために呼び出すRCVDP関数、ID=2です。

ネットワーク5
こちらはS71500→PNPNカプラー→S71200に送信するPROFISAFEデータを受信するために呼び出すRCVDP関数、ID=12です。

ネットワーク6
こちらはS71500→PNPNカプラー→S71200に送信するPROFISAFEデータを受信するために呼び出すRCVDP関数、ID=13です。

ネットワーク7
こちらはACK_GLを使用しFail-Safe状態を全体リセットするプログラムです。

ネットワーク8
こちらは1秒ON/OFF繰り返しのタイマープログラムです。

ネットワーク9
こちらはSENDDPとREVDPの関数に実行エラーがあるかをチェックするプログラムです。

ネットワーク10
こちらのタイマーはコントローラーが立ち上げた最初の30sでPROFISAFEの出力データを更新しないで作成したプログラムです。30s過ぎたらxInitedをTRUEにします。

ネットワーク11
PROFISAFE経由で送信する整数データをIEC_COUNTERを使用し、1s経つたびにプラスとマイナスします。

ネットワーク12
こちらは10ms ON/OFF繰り返しのタイマープログラムです。

ネットワーク13
PROFISAFE経由で送信する整数データをIEC_COUNTERを使用し、10ms経つたびにプラスとマイナスします。

ネットワーク15
こちらはS71200→S71500にPROFISAFE経由でデータを送信するために呼び出すSENDDP関数、ID=3です。

ネットワーク16
こちらはS71200→S71500にPROFISAFE経由でデータを送信するために呼び出すSENDDP関数、ID=4です。

ネットワーク18
こちらはS71200→PNPN Coupler→S71500にPROFISAFE経由でデータを送信するために呼び出すSENDDP関数、ID=10です。

ネットワーク19
こちらはS71200→PNPN Coupler→S71500にPROFISAFE経由でデータを送信するために呼び出すSENDDP関数、ID=11です。

ダウンロード
最後はプロジェクトをPLCにDownloadしてください。
S71500側
次はS71500側を構築します。

Profinet接続設定

安全プログラム
Safetyプログラムを作成します。

ネットワーク2
こちらはS71200→S71500(I Devices)に送信するPROFISAFEデータを受信するために呼び出すRCVDP関数、ID=3です。

ネットワーク3
こちらはS71200→S71500(I Devices)に送信するPROFISAFEデータを受信するために呼び出すRCVDP関数、ID=4です。

ネットワーク5
こちらはS71200→PNPNカプラー→S71500に送信するPROFISAFEデータを受信するために呼び出すRCVDP関数、ID=10です。

ネットワーク6
こちらはS71200→PNPNカプラー→S71500に送信するPROFISAFEデータを受信するために呼び出すRCVDP関数、ID=11です。

ネットワーク7
こちらはACK_GLを使用しFail-Safe状態を全体リセットするプログラムです。

ネットワーク8
こちらはSENDDPとREVDPの関数に実行エラーがあるかをチェックするプログラムです。

ネットワーク10
こちらはS71500→S71200にPROFISAFE経由でデータを送信するために呼び出すSENDDP関数、ID=1です。

ネットワーク11
こちらはS71500→S71200にPROFISAFE経由でデータを送信するために呼び出すSENDDP関数、ID=2です。

ネットワーク13
こちらはS71500→PNPN Coupler→S71200にPROFISAFE経由でデータを送信するために呼び出すSENDDP関数、ID=12です。

ネットワーク14
こちらはS71500→PNPN Coupler→S71200にPROFISAFE経由でデータを送信するために呼び出すSENDDP関数、ID=13です。

ダウンロード
最後はプロジェクトをPLCにDownloadしてください。
結果
Done!S71500とS71200だけではなく、PNPNカプラー経由でもProfisafe通信をWireshark経由で確認できました。
