PNPN CouplerはSiemens同士で異なるNetworkの中に、Profinet経由でデータ交換するデバイスです。
PNPN COUPLERV4.0はInput最大1440BytesでOutputも1440Bytesになります。
もちろんInputとOutputはデータ交換数を揃える必要がありません。例えばInputデータは1200BytesでOutputデータは1440でも構いません。
そして構成設定に関しては、同じStep7のプロジェクト内で構築しても異なるプロジェクト構築しても問題ないです。
ちなみに今回説明するのは異なるプロジェクトのやり方です。
PN/PN Coupler外見
まず設定始まる前に、PNPN COUPLERの外見などに説明します。
- X1,X2の状態表すLED
- Subnet1、2(X1、X2)の状態を表すLED
- PS1/PS2の電源状態
- 24V DCSupply
- Profinet InterfaceX2
- Profinet InterfaceX1
決め事
PNPN COUPLERを使用するにはいくつの設定を事前に話し合う必要があります。
- どっちがX1のネットワークするか?どっちがX2にネットワークするか
- 今回はS7-1200はX1にネットワークに接続、そしてRaspberryはX2のネットワークに接続
- 交換するデータの数
- 今回S7-1200は:
- IN:253 Bytes+DS
- OUT:253Bytes
- RaspberryがこのMappingのことわかった上で、IN/OutのMappingが実際に設定するときに逆にする必要があります。なので:
- OUT:253Bytes
- IN:253 Bytes+DS
- つまり、私のINPUTがあなたのOUTPUT、あなたのOUTPUTは私のINPUTのような考え方です。
- 今回S7-1200は:
では、先の決め事がに沿って構成図はこうになります:
実装
これからは先いった構成図に沿って実装したいと思います。
PNPN COUPLERのGSD Filesは事前にダウンロードおねがいします。
シーメンス側
プロジェクト開き、右のCatalogにOther field devices>Other field devices>PROFINET IO>..のような下図にようにPNPN CouplerX1 までたどり着けます。
そのPNPN CouplerX1を左に引っ貼ります。
そうすると、ネットワーク上ではPNPN Couplerが追加されました。
Device Nameを修正し、Not assignedのところクリックし、CPUS7-1200のProfinet Interfaceを選びます。
そういうことによって、PLCとPNPN CouplerがProfinetでつながってるようになります。
次はPNPN Couplerを選んで、Device View画面になりあmす。
INとOUTをそれぞれIN 253 Bytes+DSとOUT 253 Bytesを順番で引っ貼ります。
Profinetなら、必ずDevice Name必要になりますね。
Assign device nameは忘れずに。
Raspberry側
まず先ダウンロードしたGSD FILEを思い出してください。
TIAの中にもしそのPNPN CouplerのGSDがないのであればインストールする必要がありますよね?Codesysも同じな作業する必要があります。
RapbserryをProfinet Masterにする方法はこちらで参考:
Tools>Device Repositoryをクリックします。
この画面でInstall..をクリックします。
先シーメンスのサイドからダウンロードしたXML Fileを選んで、OPEN。
無事にInstall終わったら、赤枠のデバイスが追加されます。
PN_ControllerのところにAdd Deviceを。
先Siemens側PNPN Coupler V4.2のX1を使ったから、Raspberry側ではX2を使います。
選んでAdd Devicesします。
次はPNPN_Coupler_X2の選んで右クリックしAdd Deviceを。
最初に書きましたが、お互いに逆にする必要があります。
なので、Raspberry側は先にOUTを入れます。
その後IN入れます。
次はPNPN CouplerX2の設定行います。
PNPN_CopulerX2を選びます。
IP Addressを192.168.11.101にします。
Profinet使うのであれば、もちろんStation nameも(Device name)もいりますね。
次はデータ交換するとき使われるメモリ領域を定義します。
構造体を作ったほうが便利なので。
DUT_PNGetはS7-1200からもらったデータです。
DUT_PNPUTはS7-1200へ書き込むのデータです。
GVLでDUT_PNPUTを変数OUTとして定義します。
GVL_1でDUT_PNGetを変数INとして定義します。
それで準備完了です。
先GVLで定義したものを割り付けます。
IN_253Bytsをクリックし>PNIO Module I/O Mapping>割り付けます。
OUT_253Bytsをクリックし>PNIO Module I/O Mapping>割り付けます。
割付もOKです。そして簡単なプログラムを作ります。
TIAを立ちあげ、Accessible devicesでPNPN Couplerを探します。見つけたら、Couplerを選んで、SHOW。
左のProject Tree>Online accessのところにPNPN Couplerがみえるはずです。
Online & diagnosticsをクリック。
PROFINET device nameでCodesysと同じ設定した名前いれてください。
Raspberryにダウンロードし、再起動します。
Profinet立ち上げたらこのように全部緑になります。
テスト1
まず直接にIOで結果をみるようにします。
テスト2
次はTIAのほうに少し工夫します。
OB1で以下のFunctionを入れます。
DPRD_DATは指定したProfinet/Profibusデバイスのデータ(LADDR)データを読み込み、RECORDに指定したメモリエリアに書き込む。もしエラーなしならRET_VALが0、
0以外はエラーあり。エラーの詳細はF1 Helpで。
DPWR_DATはRECORDに指定したメモリエリアを読み込んで、指定したProfinet/Profibusデバイスのデータ(LADDR)に書き込む。もしエラーなしならRET_VALが0、0以外はエラーあり。エラーの詳細はF1 Helpで。
LADDR確認する方法
PLC>PLC Tags>System Constants
次はDBを作ります。ここでCodesys側と同じようにします。
最後はプログラムで割り付けます。
結果
はい、お疲れ様ですー
こちらはSample Codeです:
https://github.com/chwAmu/Codesys/tree/master/Profinet/Master