Codesys#Pi4をProfinetDeviceとして繋がる

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

GSDMLを抜き出す

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

Tools>Device Repositoryをクリックします。
image.png
Profinet IO>Profinet IO Device>CODESYS Profinet Deviceを選び、Exportのボタンを押します。
image.png
ZipのFileが出てきます。
image.png
解凍し、Zipの中にXMLが2つが入っています。
image.png

構成設定

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

GSD Install

Options>Manage general station description files(GSD)をクリックします。
image.png
先解凍したXMLのところ設定し、GSDMLxxxxをCheckBoxを入れ、Installを押します。
image.png

ネットワークに追加

次は右側のCatalogにOther Field devices>PROFINET IO>I/O>SS-Smart Softwarexxxx>CODESYS>CODESYS Profinetxxxを選んで左にひっばります。
image.png
Deviceのところに右クリック、Assign to new IO Controllerを押します。
image.png
そうすればControllerとつながるようになります。
image.png

Device設定

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

交換メモリ領域設定

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

IPとデバイス名

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

更新Cycle

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

CodeSysプロジェクト設定

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

Profinetデバイス設定

Ethernet(Ethernet)に右クリック、Add Device..を。
image.png
Profinet IO>Profinet IO Device>CODESYS Profinet Deviceをクリック。
image.png
Ethernetのところに“Device”が追加されました。
image.png
次はこのデバイスのメモリ交換エリアを設定します。
CODESYS_Profinet_Device>Add Device。
image.png
Input/Output>In/Out 64 Byteを選んで、Add Deviceで追加。
ここで注意するには先と設定したメモリエリアの大きさと同じする必要があります。
でないと繋がりません。
image.png
それで64Byteエリア設定完了。
image.png

Device名設定

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

Symbol設定

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

GVL

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

割り付け

先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に割り付けます。
image.png

プログラム

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

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を立ち上げ、?のマークをクリックします。
image.png
適切なInterfaceを選び、Start Searchします。
image.png
ここでどんなデバイスがつながっているか見えます。
image.png
次はDeviceを右クリック、Assign device name。
image.png
同じく、適切なInterfaceを選び、Update listを。
image.png
Pi4を選び、Assign name。
image.png
そうするとController側がPi4みえるようになります。
image.png

ちなみに

CoyeSys側をLoginすると、もしProfinetDeviceが緑のぐるぐるがついてるのであればOkです。そしてStatusのところにOnline・IP ActiveもTRUEになります。
image.png
そしてEthernetのTab開くとメッセージありますよ~と。これはPI4のIPが常にControllerに置き換えされたってメッセージです。
image.png

結果

image.png

Send

setAllFromMaster.gif

Receive

getFromMaster.gif

お疲れ様です。ー

Footer_Basic

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

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

フォローする