Siemens#S71200-G2とS71500でPROFISAFE通信しよう(S71200-G2コントローラー編)

今回の記事ではS71200-G2とS71516F-3間でPROFISAFE通信を構築します。その構成を成立するにはI-Devices機能を使用する必要があり、S71516F-3はデバイスで、S71200-G2がコントローラーになります。

さ、FAを楽しもう!

Reference Link

http://soup01.com/ja/category/siemens-jp/s7%e2%80%901200-g2/

前書き

いつも私の技術ブログとYouTubeチャンネルをご覧いただき、心より感謝申し上げます。また、いまFullさん(full@桜 八重 (@fulhause) / X)と共に毎週水曜日の夜にお届けしている「高橋クリス」ラジオ番組を運営しています。

技術は独り占めせず、届けるもの

私たちは工場の生産技術や制御に関する技術情報を、ブログや動画などで無料公開しています。「知識は誰でもアクセスできるべき」という信念のもと、現場で役立つ具体的なノウハウやトラブル事例などを発信してきました。すべて無料で続けているのは、「知らなかったせいで困る人」を少しでも減らしたいからです。

また、もしあなたの現場で…

  • 「このPLCとデバイスの組み合わせ、ちゃんと動くのかな?」
  • 「EtherCAT通信でうまくいかない部分を検証してほしい」
  • 「新しいリモートI/Oを試したいけど社内に検証環境がない」

など、困っている構成や試してみたいアイデアがあれば、ぜひお知らせください。機器の貸出や構成の共有が可能であれば、検証し、記事や動画で発信します(ご希望に応じて匿名対応も可能です)。

支援のかたち

現在、私達の活動はほぼ無償で続けており、記事や動画の制作には、時間と検証環境の整備が必要です。この活動を継続的にコンテンツを提供するためには、皆様の温かいご支援が大変重要です。

メンバーシップ(ラジオの応援)

Fullさんとのラジオをより充実させるための支援プランです。

https://note.com/fulhause/membership/join

Amazonギフトリスト

コンテンツ制作に必要な機材・書籍をリストにしています。

https://www.amazon.co.jp/hz/wishlist/ls/H7W3RRD7C5QG?ref_=wl_share

Patreon(ブログ・動画活動への応援)

月額での小さなご支援が、記事の執筆・検証環境の充実につながります。

https://www.patreon.com/user?u=84249391

Palpay

小さな支援が大きな力になります。

https://paypal.me/soup01threes?country.x=JP&locale.x=ja_JP

知ってたら助かること、届けたいだけです

あなたの応援が、知識の共有をもっと自由で持続可能なものにしてくれます。これからもどうぞよろしくお願いします。

soup01threes*gmail.com

https://x.com/3threes2

技術はひとりじゃもったいない。

PROFINET I-Device Function?

I-Device機能により、様々なタスクを実現することができます。それは、

  • フェールセーフ・アプリケーションにも対応する効率的なエンジニアリング
  • エンジニアリングコストと試運転時間の持続的削減
  • 必要なネットワークとシステムコンポーネントの削減
  • 機械やプラント内の通信の簡素化
  • 異種システム間のシンプルな通信

そのI-Deviceとは、インテリジェントIOデバイスとして使用されるCPU/CPのことである。 この機能により、PROFINET は下位デバイスとの通信を可能にするだけでなく、IO デバイスとして他の上位またはセントラルコントローラとの IO 通信も可能にします。

I-Deviceを利用する例

I-Deviceを利用する例としては、メインのIOコントローラ/データコンセントレータと、コンセントレータから同じ情報を必要とする他の「サブレベル」コントローラがある場合です。

ここでジュース工場を経営しているとしよう。 この工場では、各マシンがジュースの種類を知る必要がある。 例えば、包装機の箱の種類や、ラベル貼り機のラベルの種類などです。サブレベルコントローラはIOデバイスピアの役割を果たし、マスターコントローラはすべてのサブレベルコントローラにジュースタイプを送信します。  そしてサブレベルコントローラは、それぞれのローカルIOデバイスに現在のジュースのレシピを伝える。

I-Device を使うもう一つの理由は、多くの通信コードを書かずに異なるコントローラ間で通信することです。  I-Device は、異なるメーカの2つ以上のコントローラ間で、高速 (更新時間 1 ms 以下) PROFINET リアルタイム接続 (RT/IRT) を構成する機能を提供します。 実装は簡単で、I -デバイスはコントローラ上の通常のIOデバイスのように設定されます。 

プログラミングに必要なのは、IOロジックを処理することだけだ。 まず、I-Deviceコントローラーのコンフィギュレーションと最大IOバッファサイズを作成することで、I-Deviceをセットアップする。

その後、I-DeviceのGSDファイルをエクスポートし、それをコントローラ・コンフィギュレーション・ツールにインポートしてセットアップします。  その後、各コントローラに入力バッファと出力バッファがあり、アプリケーションのパートナーとの間でデータをやり取りします。 

標準的コミュニケーションとの違い

今回の記事ではS71200-G2とS71516間をProfisafeのI-Devicesで通信しています。IO コントローラと I デバイス間の安全関連通信は、F-CPU の安全プログラム間で一定数のデータ をフェイルセーフに転送する。

標準的な通信とは対照的に、IO コントローラまたは I-device の作成された転送領域の入力と出力は、直接アクセスされないことです。

データは「SENDDP」命令で転送され、「RCVDP」命令で受信され、デバイスの設定された転送領域に格納される。 転送領域は入力アドレス範囲と出力アドレス範囲から構成されます。”SENDDP “は IO コントローラ/I-デバイスのそれぞれの出力を提供し、”RCVDP “はそれらの入力を読みます。

データ転送

安全な環境でも IO コントローラと IO デバイス間の通信には転送領域が必要です。 これには転送されるデータが格納されます。これらの転送エリアは「SENDDP」と「RCVDP」ブロックに割り当てられており、これらは安全関連環境でのデータ交換に使用される。

ルール

I-DevicesでProfisafe 通信するには以下のルールがあります。

  • SIMATIC S7-300/400コントでは、送信するデータの転送領域は、出力データと入力データの開始アドレスが同じでなければなりません。
  • 出力データ転送領域には12バイト(固定で)、入力データ転送領域には6バイト(固定で)必要である。

使用例

下図は簡単な例です。

  • 「SENDDP」は12バイトをパートナーに送信します。
    この12バイトは、6バイトのFIOデータ(16Boolean値と2INT値)と6バイトのFパラメータで構成されます。
  •  「RCVDP」はこのデータに 6 バイトの F パラメータの確認応答で応答します。

データ転送の制限

転送するデータ量が、連結された “SENDDP”/”RCVDP “命令の容量より大きい場合、追加の “SENDDP”/”RCVDP “命令を使用するしかありません。

そのためには、Transfer Areaを増やしていきましょう。 以下の表は、安全関連の通信接続で出力データと入力データがいくつ割り当てられているかを示しています。.

SENDDPとRCVDPの基本

IO コントローラと I デバイス間の安全関連の通信は、データを送信するための “SENDDP” 命令と、データを受信するための “RCVDP” 命令を借りて行われる。 これらの命令により、16 個の BOOL 値と 2 個の INT 値(まは S7-1200/1500 では 1 個の DINT 値)をフェイルセーフで転送できます。

  • RCVDP命令はメイン安全ブロックの最初に呼び出す必要があります
  • SENDDP命令は最後に呼び出す必要があります。

SENDDP命令とRCVDP命令を使用して、フェイルセーフでデータを送受信する:

  • 安全関連マスタ・マスタ通信
  • S7分散型安全に関する安全関連マスタ・マスタ通信
  • 安全関連マスタ-スレーブ通信
  • 安全関連Iスレーブ-Iスレーブ通信
  • 安全関連IOコントローラ-IOコントローラ通信
  • S7分散安全用の安全関連IOコントローラ-IOコントローラ通信
  • 安全関連IOコントローラ-Iデバイス通信
  • 安全関連IOコントローラ-Iスレーブ通信

注意点

  • 安全プログラムの受け入れ時に、安全概要で独自性をチェックする必要があります。この命令を呼び出すときは、DP_DP_ID と LADDR 入力に定数値を指定する必要があります。 
  • 安全プログラムでは、関連するインスタンス DB の DP_DP_ID と LADDR への直接の書き込みアクセスは許可されていません。
  • PROFIBUS では、ネットワークは PROFIBUS DP でアクセス可能なすべてのノードを含みます。 
  • PROFINET IO では、RT_Class_1/2/3 (Ethernet/WLAN/Bluetooth, Layer 2)と RT_Class_UDP (IP, Layer 3)でアクセス可能なすべてのノードがネットワークに含まれます。
  • S7-1200/1500: SENDDP 命令と RCVDP 命令のバージョン V3.0 では、F-通信 ID “0” の DP_DP_ID 入力で接続が確立されません。
  • S7-1200/1500: SENDDP 命令と RCVDP 命令のバージョン V3.0 以降では、DP_DP_ID 入力にグローバル F-DB からの変数値を指定することもできます。
  • 冗長 S7-1500HF システムでは、DP_DP_ID に関して、冗長 S7-1500HF システムの両方の F-CPU を 1 つの F-CPU と見なします。

SENDDP

SENDDP” 命令は、16 個の BOOL データと 2 個の INT データを PROFIBUS DP/PROFINET 経由で一方の F-CPU から他方の F-CPU にフェイルセーフで送信します。

VAR_INPUT

パラメータ名データ・タイプ説明
SD_BO_00からSD_BO_15BOOLデータ送信 BOOL 00-15
SD_I_00INTデータ送信 INT 00
SD_I_01INTデータ送信 INT 01
DP_DP_IDINTSENDDPとRCVDP間の通信ID
TIMEOUTTIME安全関連通信の監視時間(単位:ms)
LADDRHW_SUBMODULEアドレスエリア/転送エリアの HW 識別子

VAR_OUTPUT

パラメータ名データ・タイプ説明
ERRORBOOL1=通信エラー
SUBS_ONBOOL1=RCVDPがフェイルセーフ値を出力
RET_DPRDWORDDPRD_DAT 命令の非フェールセーフエラーコード RET_VAL
RET_DPWRWORDDPWR_DAT 命令の非フェールセーフエラーコード RET_VAL
DIAGBYTE安全でないサービス情報

RCVDP

こちらのRCVDP命令からデータを受け取ることができます。

VAR_INPUT

パラメータ名データ・タイプ説明
ACK_REIBOOL1=通信エラー後のリセット
SUBBO_00からSUBBO_15BOOL受信データのフェイルセーフ値 BOOL 00
SD_I_01INTデータ送信 INT 01
DP_DP_IDINTSENDDPとRCVDP間の通信ID
TIMEOUTTIME安全関連通信の監視時間(単位:ms)
LADDRHW_SUBMODULEアドレスエリア/転送エリアの HW 識別子
SUBI_00INT受信データのフェールセーフ値 INT 00
SUBI_01INT受信データのフェールセーフ値 INT 01
DP_DP_IDINTSENDDPとRCVDP間の通信ID
TIMEOUTTIME安全関連通信の監視時間(単位:ms)

VAR_OUTPUT

パラメータ名データ・タイプ説明
ERRORBOOL1=通信エラー
SUBS_ONBOOL1=RCVDPがフェイルセーフ値を出力
ACK_REQBOOL1=送信データの再統合のための確認応答が必要
SENDMODEBOOL1=SENDDP 命令が無効なセーフティ・モードの F-CPU
RD_BO_00からRD_BO_15までBOOL受信データ BOOL 00から15まで
RD_I_00INT受信データ INT 00
RD_I_01INT受信データ INT 01
RET_DPRDWORDDPRD_DAT 命令の非フェールセーフエラーコード RET_VAL
RET_DPWRWORDDPWR_DAT 命令の非フェールセーフエラーコード RET_VAL
DIAGBYTE安全でないサービス情報

タイムチャート

こちらはSEND_DPとRCVDP_DPのタイムチャートです。

複数のIデバイスのDP_DP_IDパラメータ

SENDDP “命令と “RCVDP “命令の “DP_DP_ID “パラメータは、互いに通信する “SENDDP “命令と “RCVDP “命令のネットワーク内でユニークなIDである。”SENDDP”/”RCVDP “命令を複数使用する場合は、”DP_DP_ID “入力を適宜調整する必要がある。

下図は、インストラクションの構成例を示しています。

Implementation

今回はS71516F-3・S71200-G2両方にも構築する必要があります。

新しいデバイスx2作成する

最初にTIAプロジェクトを作成し、その中に2つのCPUを追加します。今回の例ではS71516F-3とS’1214FCになります。

Configure IP address

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

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

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

S71500 側

最初はS71516F-3側を構築します。

Configure I-Devices

今回の記事ではS71516F-3側F-Deviecになりますので、S71516F-3をダブルクリックしてください。

Operation Mode

PROFINET Interface>Operation Modeにある”IO device” Checkboxを入れてください。

Assigned IO ControllerのDrop-Listを設定できるようになります。

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

Done!

S71516F-3とS71200-G2間のPROFINETネットワークができました。

Transfer area

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

Add newをクリックし、新しい転送エリアを作成します。

Done!

今回記事ではPROFISAFE通信なので、TypeをF-CDに設定してください。

Done!新しいPROFISAFE通信が追加されました(S71200-G2 IO Controller→S71516F-3 IO Device)。

先と同じ操作でS71516F-3 IO Device→S71200-G2 IO Controllerの通信にも追加しましょう。

dbDataToS71200G2

S71516F-3プロジェクトにDBを追加し、SENDDPFBに割り付けるパラメータを定義します。

dbDataFromS71200G2

次はもう1つのDBを追加し、RCVDPに割り付けるパラメータを定義します。

安全プログラム

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

Network2

ネットワーク2はRCVDPを呼び出し、必要なパラメータを定義します。

DP_DP_ID=1

S71516F-3のRCVDPのIDを1に設定します。

TIMEOUT

RCVDPのTimeout監視時間を設定します。

LADDR

S71516F-3のRCVDPにあるLADDRはTransfer Areaで定義した名前になります。ここはS71516F-3が受信するFBなので、HW名を注意深く設定してください。

Network3

ネットワーク3はSENDDPを呼び出し、必要なパラメータを定義します。

DP_DP_ID=2

S71516F-3のSENDDPのIDを2に設定します。

TIMEOUT

SENDDPのTimeout監視時間を設定します。

LADDR

S71516F-3のSENDDPにあるLADDRはTransfer Areaで定義した名前になります。ここはS71516F-3が送信するFBなので、HW名を注意深く設定してください。

ダウンロード

最後はプロジェクトをS71516F-3にDownloadしてください。

S71200 Side

次はS71200-G2側を設定します。

dbDataToS71500

S71200-G2プロジェクトにDBを追加し、SENDDPFBに割り付けるパラメータを定義します。

dbDataFromS71500

次はもう1つのDBを追加し、RCVDPに割り付けるパラメータを定義します。

安全プログラム

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

Network2

ネットワーク2はRCVDPを呼び出し、必要なパラメータを定義します。

DP_DP_ID=2

S71200-G2のRCVDPのIDを2に設定します。

TIMEOUT

RCVDPのTimeout監視時間を設定します。

LADDR

S71200-G2のRCVDPにあるLADDRはTransfer Areaで定義した名前になります。ここはS71200-G2が受信するFBなので、HW名を注意深く設定してください。また直接整数を設定することも可能です。

Network3

ネットワーク3はSENDDPを呼び出し、必要なパラメータを定義します。

DP_DP_ID=1

S71200-G2のSENDDPのIDを2に設定します。

TIMEOUT

SENDDPのTimeout監視時間を設定します。

LADDR

S71200-G2のSENDDPにあるLADDRはTransfer Areaで定義した名前になります。ここはS71200-G2がデータ送信するFBなので、HW名を注意深く設定してください。また直接整数を設定することも可能です。

ダウンロード

最後はプロジェクトをS71516F-3にDownloadしてください。

DP_DP_IDの整理

2つのCPU間のDP_DP_IDの設定一覧はこちらです。

  

結果

Done!S71200-G2とS71516F-3のI-Device通信が確立されました。

S71200-G2が送信するに転送するPROFISAFEデータが、S71516F-3側で正常に受け取りました。

また、BOOL変数だけではなく整数データにも送信できました。

そしてFBにはエラーや診断情報がありません。

また、反対方向のS71516F-3が送信するデータに転送するPROFISAFEデータが、S71200-G2側も正常に受け取りました。

そしてBOOL変数だけではなく整数データにも送信できました。

次はS71200-G2とS71516F-3間の通信を切断します。

Safety Failのパラメータ00、01、02をTRUEに変更します。

SUBS_ONがTUREになり、つまり現在FBが使用してるのはFail Safeデータであることがわかります。

最後はS71200-G2とS71516F-3間のPROFINET通信を復旧します。

ですが、ACK_REQがTRUEになり、つまり現在FBがリセットリクエスト待ちの状態です。

FBがリセットリクエスト受信しない限り、FBはまだFail Safe出力になります。

最後はFBにリセットリクエストを送りましょう。

Done!しますFBの出力は正常に戻りました。

シェアする

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

フォローする