Codesys#Pi4をProfinetDeviceとして繋がる


今回はCodeSysを使って、Pi4をProfinetのデバイスとして繋がります。

GSDMLを抜き出す

ProfinetのDeviceとしてControllerの下にぶら下がるにはGSDMLのFileが必要になります。
まぁ、XMLみたいなものです。

Tools>Device Repositoryをクリックします。

Profinet IO>Profinet IO Device>CODESYS Profinet Deviceを選び、Exportのボタンを押します。

ZipのFileが出てきます。

解凍し、Zipの中にXMLが2つが入っています。

構成設定

今回使ってるのはSiemensのエンジニアツールですが、もしControllerがSiemens製PLCではなければまた別のツールで作業を行うことできます。

GSD Install

Options>Manage general station description files(GSD)をクリックします。

先解凍したXMLのところ設定し、GSDMLxxxxをCheckBoxを入れ、Installを押します。

ネットワークに追加

次は右側のCatalogにOther Field devices>PROFINET IO>I/O>SS-Smart Softwarexxxx>CODESYS>CODESYS Profinetxxxを選んで左にひっばります。

Deviceのところに右クリック、Assign to new IO Controllerを押します。

そうすればControllerとつながるようになります。

Device設定

Deviceが追加されましたが、まだ様々な設定合わせないとPi4とつながりません。

交換メモリ領域設定

先のPN-Deviceをクリックし、Device viewに切り替えます。

IPとデバイス名

ProfinetデバイスとしてControllerの下にぶら下がるにはIPアドレスとデバイス名が大事になります。ControllerがStop>Runになるとき、ControllerはすべてのProfinetデバイスに対して該当する名前に該当するIPアドレスを振り付けます。
なのでのちほどのPi4設定するとき、あ~なるほどのときがくると思います。

更新Cycle

Siemensのエンジニアツールは一応自動計算してくれますが、更新周期だけ頭の隅においておきましょう。

CodeSysプロジェクト設定

次はCodesys側を設定しますね。

Profinetデバイス設定

Ethernet(Ethernet)に右クリック、Add Device..を。

Profinet IO>Profinet IO Device>CODESYS Profinet Deviceをクリック。

Ethernetのところに“Device”が追加されました。

次はこのデバイスのメモリ交換エリアを設定します。
CODESYS_Profinet_Device>Add Device。

Input/Output>In/Out 64 Byteを選んで、Add Deviceで追加。
ここで注意するには先と設定したメモリエリアの大きさと同じする必要があります。
でないと繋がりません。

それで64Byteエリア設定完了。

Device名設定

先も書きましたが、Controllerに設定されたDeviceの名前がありますね?その名前は2番のところです。実際のプロジェクトに合わせてくださいね。

Symbol設定

次はこのInOut_64_byteのSymbolを設定します。
そうするといちいちアドレスのこと気にしなくてもよいし、万が一メモリ変化あっても対応しやすくなります。M0,D0などの組み方もうやめましょうー

GVL

In,Out各64Byteの配列を定義します。

割り付け

先GVLで定義したSymbolを割り付けます。
InOut_64_bytes>Profinet Device Module I/O Mapping>で…のボタンを押して定義変数と割付ることができます。
ここはちょっと名称がややこしいですが、ChannelがInput Dataと書いてますが、よくみるとAddressのところにQで書いてます…つまりこれはOutputエリアです。同じOutput Dataが書いてるところはIで書いてます。どうやら逆にっていうか、そのInput/OutputはController側見てるんですね。
まぁ、InputDataとOutput DataをそれぞれのTagに割り付けます。

プログラム

なぜかわからないが、どうやらプログラム内でそのアドレス使わないとあればIOデータが更新してくれないみたいです。なにかのパラメータ設定間違ってるかな。
とりあえずいまは適当なプログラムを作ります。
そしてLoginしてハードウェア構成などをダウンロードお願いします。

PI4設定

Online Helpに書いてます。
https://help.codesys.com/webapp/_pnio_runtime_configuration_device;product=core_ProfinetIO_Configuration_Editor;version=3.5.16.0

/etc/CODESYSControl_User.cfg

以下の例を追加。

[SysEthernet]
QDISC_BYPASS=1
Linux.ProtocolFilter=3

[SysSocket]
Adapter.0.Name="eth0"
Adapter.0.EnableSetIpAndMask=1

/etc/dhcpcd.conf

interface eth0 static ip_address=0.0.0.0

Vlanをインストール

sudo apt-get install vlan  # Install VLAN package
sudo modprobe 8021q        # Load 8021q kernel module

立ち上げ

TIAを立ち上げ、?のマークをクリックします。

適切なInterfaceを選び、Start Searchします。

ここでどんなデバイスがつながっているか見えます。

次はDeviceを右クリック、Assign device name。

同じく、適切なInterfaceを選び、Update listを。

Pi4を選び、Assign name。

そうするとController側がPi4みえるようになります。

ちなみに

CoyeSys側をLoginすると、もしProfinetDeviceが緑のぐるぐるがついてるのであればOkです。そしてStatusのところにOnline・IP ActiveもTRUEになります。

そしてEthernetのTab開くとメッセージありますよ~と。これはPI4のIPが常にControllerに置き換えされたってメッセージです。

結果

Send

Receive

お疲れ様です。ー