Straton#Part6_Ethernet/IP Adapterを立ち上げよう

こちらは新しいシリーズの記事で、StratonというSoftware PLCを使って様々なテストを展開します。今回はStraton RuntimeにEthernet/IP Adapterを立ち上げ、Pilz者のIndustrial PIにあるCodesysとEthernet/IPで接続します。

さ、FAを楽しもう。

Reference Link

http://soup01.com/ja/category/pilz/industrialpi/

http://soup01.com/ja/category/straton/

前書き

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

現在、私達の活動はほぼ無償で続けており、より多くのコンテンツを提供するためには、皆様の温かいご支援が大変重要です。もし可能であれば、以下のリンクから応援していただけると大変嬉しく思います。

高橋クリスのメンバーシップ

こちらはFullさん(full@桜 八重 (@fulhause) / X)と共にやっているラジオにメンバーシップを登録いただけます。

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

AMAZON ギフトリスト

こちらは自分のブログのコンテンツ制作や設備の充実に大いに役立てさせていただきます。

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

Patreon

こちらは自分のブログのコンテンツ制作や設備の充実に対する小さな応援の気持ちのPatreonです。

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

皆様のサポートが、私たちの活動をより充実させる力となります。

どうぞよろしくお願いします。

メールアドレス(*=@)

soup01threes*gmail.com

X

https://x.com/3threes2

Function Block

最初に今回記事で使用したFB/FCを紹介します。

eipAdapter

こちらのFBはEthernet/IP Scanner接続の現在の状態に関する情報を提供します。このBlockはEthernet/IP Adpaterとして構築されたもののみに使用でき、またInputs がないので、自動的にプロジェクト内のアダプタを参照します。

VAR_OUTPUTS

変数データ・タイプ説明
RunBOOLTRUE=EIP Stackが実行中
IOcnxBOOLTRUE=スキャナと I/O 接続が確立されている

PWM

こちらのFBはPWM信号を生成でき、入力値は[XinMin … XinMax]区間で切り捨てられます。また、XinMax は XinMin より大きくする必要があります。

こちらはPWM FBの計算式です。

(Xin – XinMin) * Period / (XinMax – XinMin)

VAR_INPUTS

変数データ・タイプ説明
XINREAL入力アナログ値
XinMinREAL最小入力値
XinMaxREAL最大入力値
MinPulseTIME出力の最小パルス時間
PeriodTIME出力信号の周期

VAR_OUTPUTS

変数データ・タイプ説明
QBOOLPWM信号

Ramp

こちらは信号の上昇または下降を制限するFBになります。注意するのはパラメータは常時更新されるわけではなく、また以下の場合にのみ考慮する必要があります。これら2つの状況では、出力はIN入力の値に設定されます。

  • このブロックが最初に呼ばれたとき。
  • リセット入力(RST)が TRUE のとき。

ASCとDSCは、TB期間中にアセンダントとディセンダントの信号上昇または下降を最大化します。注意するのはいずれも正の数で表示する必要があります。

LD言語では、入力ラング(EN)がTRUEである場合にのみ操作が実行され、出力ラング(ENO)は入力ラングと同じ値を維持します。

こちらはRAMP FBの動作FLOWです。

VAR_INPUTS

変数データ・タイプ説明
INREAL入力信号
ASCREALタイムベース中の最大上昇率
DSCREALタイムベース中の最大降下量
TMTIME時間ベース
RSTBOOLリセット

VAR_OUTPUTS

変数データ・タイプ説明
OUTREALRAMP出力

SerializeOut

SerializeOut関数を利用し、変数の値をバイナリーフレームにコピーできます。この関数は、バイナリ形式の通信フレームを構築するために一般的に使用されています。

また、ラダー言語では、入力ラング(EN)がTRUEである場合にのみ操作が実行され、出力ラング(ENO)は入力ラングと同じ値を維持します。

注意するのはFRAME入力は、データを受け取るのに十分な大きさの配列でなければなりません。データを宛先バッファにコピーできない場合、関数は0を返します。そして文字列変数の使用はできません。

この関数は、以下のバイト数を宛先フレームにコピーしていますので、転送先と転送元のデータタイプに気をつけましょう。

  • BOOL、SINT、USINT、BYTE 変数の場合は 1 バイト
  • INT、UINT、WORD変数の場合は2バイト
  • DINT、UDINT、DWORDおよびREAL変数の場合は4バイト
  • LINTおよびLREAL変数は8バイト

VAR_INPUTS

変数データ・タイプ説明
FRAMEUSINT宛先バッファ – 配列でなければならない
DATAANY(*)コピー元の変数。
POSDINTコピー元の配列Index
BIGENDIANBOOLTRUE=BIG Endian Format

VAR_OUTPUTS

変数データ・タイプ説明
NEXTPOSDINTコピーされたデータのコピー先バッファ内の位置。エラー(無効な位置/バッファサイズ)の場合は0になります。

Rand

こちらは乱数を生成するFBです。

VAR_INPUTS

変数データ・タイプ説明
xRunUSINTTRUE=乱数生成する
randBasANY(*)乱数のベース

VAR_OUTPUTS

変数データ・タイプ説明
xOKBOOLTRUE=乱数生成OK
RandQREAL乱数出力値

Implementation

Straton Side

Configure Ethernet/IP Adapter

Add Fieldbus Configurations

もしStratonプロジェクトにFieldbus Configurationが見つからない場合は、Shortcuts>Fieldbus Configurationで項目を追加してください。

Done!

Insert Local Ethernet/IP Adapter

次はStratonプロジェクトにEthernet/IP Adpaterを追加します。

Ethernet/IP(ODVA)>Ethernet/IP Adapter(Server)を選択してください。

Done!Ethernet/IP Adapterが追加されました。

Insert Instance Outputs O→T

次はStratonのEthernet/IP AdapterにInstanceを追加するために、右クリック>Insert Slave/Data Blockをクリックします。

今回はEthernet/IPと入出力データ両方も交換したいので、TypeをI/O :Outputsを選択します。

次はIdentificationにInstance番号とデータ交換するサイズを設定します。

今回の記事ではInstance=100、Size=32バイトに構築します。

Done!

Insert Instance Inputs T→O

次はStraton のEthernet/IP Adpaterの入力データ(T→O)を定義するために、Insert Slave/Data Blockをクリックします。

今度はI/O :Inputsを選択し、Instance番号を100、データサイズは32バイトに設定します。

Done!

Global Variables

今回の記事はStraton IDEのWorkspaceから直接グローバル変数を定義するために、Variablesをクリックします。

こちらはStratonプロジェクトのすべてのPOUやグローバル変数を定義できる画面です。

Global variableを選択した状態で右クリック>Add Variableで新しい変数を追加します。

今回はEthernet/IP AdpaterとMappingするために32Bytesの配列を2つ追加しました。

Mapping

今度はMappingを行います。先程Fidlbusを構築する画面に行って、Instanceを選択し>右クリック>Insert Variableします。

Variableの選択画面が表示されます。

先ほど定義したグローバル変数を選択しましょう。

Done!

こちらは今回記事でMappingした変数です。通信確認をするために、入出力データの初めてと最後のデータにも使用します。

Program

次はPLCプログラムを書きます。今回はフリーラダーを使用します。

こちらは今回記事で作成したプログラムです。

Variables

こちらはプログラムに定義された変数です。

Network1

ネットワーク1はStarton RuntimeのEthernet/IP Adapter接続状態を確認します。

Network2

ネットワーク2はCodesys Runtimeから受け取ったPWM値をPWM関数に出力します。

Network3

ネットワーク3はCodesys Runtimeから受け取ったRAMP設定値をRMAP関数に出力します。

Network4

ネットワーク4はCodesys Runtimeから受け取った乱数Base設定値をRAND関数に出力します。

Codesys Side

次はCodesys側を構築します。

Add Ethernet Driver

Ethernet>右クリック>Add Deviceで新規Ethernet/IP Scannerを追加します。

Fieldbus>Ethernet/Ip Scannerを選択し、Add DeviceでEthernet/IP Scannerを追加しましょう。

Done!

Add Generic

StratonのEthernet/Ip Adpaterと接続するにはEDS Fileなくてもできますので、Generic Ethernet/IP Deviceを選び>Add Devicesで追加します。

Done!

次はEthernet/IP Adapterの設定画面を開きます。

Ethernet/IP Adapter IP Address

先ほど追加したGeneric Ethernet/IP Adapterをダブルクリックし、Straton RuntimeがインストールされているPCのIPアドレスを設定してください。

Electronic Keying

今回はGeneric Ethernet/Ip デバイスを使用しますので、Vendor IDのCheckを外します。

Configure Connection

今度はConnection画面を開き、Straton Ethernet/Ip Adpaterと接続するためのConnectionを設定します。

Add Connectionをクリックし、新たなConnectionを作成します。

こちらはCodesys Ethernet/IP接続の設定画面になります。

Straton RuntimeのEthernet/Ip Adpater設定に合わせて数のように設定します。

Mapping

今度はMappingです。Ethenret/IP Mappingを開き、入出力データの先頭アドレスを固定します。

Add GVL

GVLを追加します。

GVL名を入力し、Addで進みます。

Ethernet/Ipの接続に合わせて32 Bytesの入出力変数を定義します。

{attribute ‘qualified_only’}
VAR_GLOBAL
gArrEIPIN AT %IB0 :ARRAY[0..31]OF BYTE;
gArrEIPOut AT %QB0 :ARRAY[0..31]OF BYTE;
END_VAR

Program

最後はプログラムを作成します。MEM.MemMove関数を使用し、RAMP・PWM・乱数設定値をEthernet/IP経由でStarton Runtimeに転送します。

PROGRAM PLC_PRG
VAR
rPWMSetPoint:REAL:=20.0;
rRampUPSetPoint:REAL:=100.0;
rRampUPCurrentPoint:REAL:=0;
diRandBase:DINT:=10;
diRandNumber:DINT:=0;
END_VAR


MEM.MemMove(
pSource:=ADR(rPWMSetPoint)
,pDestination:=ADR(GVL.gArrEIPOut)
,uiNumberOfBytes:=SIZEOF(rPWMSetPoint)
);


MEM.MemMove(
pSource:=ADR(rRampUPSetPoint)
,pDestination:=ADR(GVL.gArrEIPOut[4])
,uiNumberOfBytes:=SIZEOF(rRampUPSetPoint)
);

MEM.MemMove(
pSource:=ADR(GVL.gArrEIPIN[4])
,pDestination:=ADR(rRampUPCurrentPoint)
,uiNumberOfBytes:=SIZEOF(rRampUPCurrentPoint)
);


MEM.MemMove(
pSource:=ADR(diRandBase)
,pDestination:=ADR(GVL.gArrEIPOut[28])
,uiNumberOfBytes:=SIZEOF(diRandBase)
);

MEM.MemMove(
pSource:=ADR(GVL.gArrEIPIN[28])
,pDestination:=ADR(diRandNumber)
,uiNumberOfBytes:=SIZEOF(diRandNumber)
);

Login

プロジェクトをDownloadします。

Result

Done!CodesysのEthernet/IP ScannerがStraton RuntimeのEthernet/IP Adapterと接続できました。

Ethernet/IPのLog画面でも接続情報を確認できます。

シェアする

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

フォローする