今回の記事ではSiemensのS7-1200とTwinCAT TF6271 Profinet RT ControllerでProfinet通信します。SiemensではIDevicesという機能がありまして、いわゆる自分がControllerでありながら、他のProfinet Networkのデバイスとして働きます。
流れとしてTIAからGSDMLをExportし、TwinCATにImportする。
でも実際やってみると意外と嵌りそうなところが多いので、Manual沿いに行けばなんとなく繋がりますが、そこでWireSharkのPacketを見ながら実際なにを試したかを説明しに行きたいと思います。よろしくおねがいします。
Reference Link
Pre-Work in Siemens Side
Insert Error OB
OB82?
診断機能がついてるモジュールが診断状態が変更すると、CPUに通知します。その通知は” diagnostic interrupt リクエスト”です。
Event がきたとき、OB82のLocal tagは診断データを格納されるようになります。
もしCPU内でOB82がないなら、CPUがStop Modeに切り替わります。
OB82を制御する関数があります。
DIS_IRT関数でそのOB82を無効にします。
EN_IRT関数でそのOB82を有効にします。
DIS_AIRT関数はDIS_IRTのDelayです。
EN_AIRT関数ははEN_IRTのDelayです。
OB83?
OB83は以下の原因で呼ばれます。
- 構成されたモジュールが挿入・取り出すされた
- モジュールのパラメータが変更し、CPUがRunの状態でStep7からDownloadされたとき
もしCPU内でOB83がないなら、CPUがStop Modeに切り替わります。
そのOB83はSFC39から42で制御できます。
OB86?
OB86はRack Failure Organization Blockで、以下の原因で呼ばれます。
- DP Master Systemがエラー検知されたとき
- 分散IOがエラー検知されたとき
もしCPU内でOB86がないなら、CPUがStop Modeに切り替わります。
OB86を制御する関数があります。
SFC 12 “D_ACT_DP” setting MODE=4、Stationを無効する
SFC 12 “D_ACT_DP” setting MODE=3、Stationを有効する
Insert Cyclic interrupt OB
100ms周期実行のOBを追加します。
LLDP V2.2?V2.3?
LLDPは “Link Layer Discovery Protocol”で、IEEE-802.1ABの標準Protocolです。
Ethernet Devicesは周期でLLDP Protocolで接続してるデバイスに自分の情報を送信します。次はSNMP(Simple Network Management Protocol)はそのLLDP情報を読み込み・Network Topologyを作成する。
基本的にFieldbus standard IEC61158 V2.2はProfinet デバイス内に実装されています。
でも、一部のProfinetデバイスは新しいLLDP Protocol実装されたものもあり(V2.3)、
Siemensや他社のものはそのV2.3でProfinet Devicesを検知します。
ここで注意するのはProfinet ネットワーク内ではそのLLDPのバージョンを統一する必要があります。
もしTIAですべてのProfinet 機器を構築する場合、Step7が自動でLLDPのModeを修正し、それらの設定を心配する必要がありません。
Use IEC V2.2 LLDP modeのCheckboxはDefault Checkされていません。
Use IEC V2.2 LLDP modeが選択され、なおかつ変更できないのであれば、PROFINETネットワークはLLDP V2.2だけSupportになります。
Use IEC V2.2 LLDP modeのCheckboxが無効されたが変更できるのであれば、PROFINETネットワークはLLDP V2.2でもV2.3でもOKです。
その設定には簡単なルールがあります。
もしすべてのDevicesがIEC V2.3 Supoortであれば、Step7は自動でSubnet ModeをIEC V2.3に切り替えます。
もしひとつだけのDevicesがIEC V2.2だけのSupportであれば、Step7はSubnet Modeを強制的にV2.2に切り替えます。
TwinCAT Side
TwinCAT側で設定するものは少ないので、手早く説明しますね。
Insert Profinet RT Controller
I/O>Devices>AddNew Itemします。
Profinet I/O Controller(RT)を選び>OKします。
Network Interfaceを設定し、OKで完了します。
Import Profinet Devices from GSDML
Profinet Devicesを追加します。SiemensでExportされたGSDMLを使用します。
Profinet RT Controllerで右クリックし>Add New Itemします。
Miscellaneous>PROFINET IO Deviceを選択しOKします。
GSDMLを選び>Openします。
それでS7-1200が追加されました。
中にも自動でTransfer areaも構成されます。
Device Name
General>NameでProfinetのデバイス名を設定します。
IP
他のデバイスとかぶらないようにIPを設定します。
Set RT Controller Cycle
Profinetの更新Cycleを設定します。
そのままでは変更できませんので、Settings>Special Sync Taskで設定したTaskから変更する必要があります。
Task>Task名をクリックします。
Cycle Sicksから変更してください。
User Program
Process IOを定義します。
そのProcess I/OをProfinet DevicesのIOとLinkしてください。
Test
Case1
では、まずcpuのipとデバイス名を設定します。
次はそのpermit overwriting of device names of all assigned IO devices のcheckbox を入れないようにします。
プロジェクトをダウンロードすると、繋がらない。Wiresharkからみます、CPU からのdcp protocol ip振り分けすることは拒否。
Local reason なので、まずtwincat 側ではないかな?と考えています。
次はtwincat でもネットワークの診断情報も見れますので、dcp protocolが問題出たのかわかります。
Case2
では、次は頭ちょっと狂ってしまって、もしかしてtwincat3はremote partner だから拒否されたのではないか?!と。
Permit access with PUT/GET communication from remote partner のcheckboxを入れます。
もう一度ダウンロードすると、状態はさらに悪化。CPU 内部で緊急の臨時ipを振り分けられました。どうやらtwincat からSiemens CPUにipが設定されてる状態でdcp でもう一度ipを振るのは無理らしいですね。
Case3
ては、先のcheckbox を外して、use IECv2.2 LLDP protocolのcheckbox いれてもう一度駄目元で試してよう。
うん〜Wireshark からSiemens がident ok の返事packet返してきたけど。
診断情報をみたら、まだDCPが問題がありましたね。
Fix! Configuration
そのときふっと思いついたのは、昔三菱のprofinet モジュールを使ったことのことです。idevices通信するときはsiemens CPU がip やデバイス名もset directly する必要があります。
つまりCPU 自体が上位のcontroller の設定待ちです。
Siemens Side
先のTest結果を踏まえて、正しい設定をまとめます。
I-Devices
PROFINET interface[X1]>Operation Modeをクリックします。
IO DeviceとParameter assignment of PN interface..をCheckboxに入れます。
下にあるTransfer Areasに交換するByte数とAddress番号を設定します。
次はGSDMLをExportします。
Options1
Mustではなく、そのデバイスの更新周期を設定します。
PROFINET interface[X1]>Operating mode>I-Device communication>Transfer area_1をクリックします。
Organization Blockの…ボタンをクリックします。
先のOB30を選択します。
そうするとCycle 更新はOB30にそっていきます。
Ethernet address Setup
PROFINET interface[X1]>Ethernet addressをクリックします。
IP Protocolを”IP address is set directly the device”を選択します。
PROFINETのところに”PROFINET device name is set directly at the device”を選択します。
Advanced options
PROFINET interface[X1]>Advanced optionsをクリックします。
次は2,3,4のCheckboxも入れます。
Program
最後はプログラムを作成します。
User Data type
64Bytesの配列を定義します。
Tag Define
Tag TableでIdevicesで設定したIO番号に合わせて定義してください。
OB30
最後はOB30からデータを読み書きします。