Beckhoff#Tc2_Ethernet/IPを使ってみよう

今回の記事ではTc2_Ethernet/IPを使って、TwinCAT3からCIPメッセージを送信します。また、Ethernet/IP Adapter側ではJTEKTのTOYOPUCになります。

さ、FAを楽しもう!

Reference Link

http://soup01.com/ja/category/jtekt/toyopuc-nano/

前書き

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

技術は独り占めせず、届けるもの

私たちは工場の生産技術や制御に関する技術情報を、ブログや動画などで無料公開しています。「知識は誰でもアクセスできるべき」という信念のもと、現場で役立つ具体的なノウハウやトラブル事例などを発信してきました。すべて無料で続けているのは、「知らなかったせいで困る人」を少しでも減らしたいからです。

また、もしあなたの現場で…

  • 「このPLCとデバイスの組み合わせ、ちゃんと動くのかな?」
  • 「EtherCAT通信でうまくいかない部分を検証してほしい」
  • 「新しいリモートI/Oを試したいけど社内に検証環境がない」

など、困っている構成や試してみたいアイデアがあれば、ぜひお知らせください。機器の貸出や構成の共有が可能であれば、検証し、記事や動画で発信します(ご希望に応じて匿名対応も可能です)。

支援のかたち

現在、私達の活動はほぼ無償で続けており、記事や動画の制作には、時間と検証環境の整備が必要です。この活動を継続的にコンテンツを提供するためには、皆様の温かいご支援が大変重要です。

メンバーシップ(ラジオの応援)

Fullさんとのラジオをより充実させるための支援プランです。

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

Amazonギフトリスト

コンテンツ制作に必要な機材・書籍をリストにしています。

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

Patreon(ブログ・動画活動への応援)

月額での小さなご支援が、記事の執筆・検証環境の充実につながります。

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

Paypal

小さな支援が大きな力になります。

https://paypal.me/soup01threes?country.x=JP&locale.x=ja_JP

知ってたら助かること、届けたいだけです

あなたの応援が、知識の共有をもっと自由で持続可能なものにしてくれます。これからもどうぞよろしくお願いします。

soup01threes*gmail.com

https://x.com/3threes2

技術はひとりじゃもったいない。

関数

今回の記事ではFB_GET_ATTRIBUTE_SINGLEとFB_SET_ATTRIBUTE_SINGLEを紹介します。

FB_GET_ATTRIBUTE_SINGLE

FB_GET_ATTRIBUTE_SINGLEファンクションブロックは、EtherNet/IPデバイスからパラメータを読み出す機能を提供します。

VAR_INPUT

名前

説明

sNetId

T_AmsNetID

コマンドを実行するTwinCAT EtherNet/IP™スキャナのAMSネットID

sIPv4Addr

T_IPv4Addr

対象デバイスのIPアドレス

bExecute

BOOL

立ち上がりエッジでコマンドを開始

nClass

WORD

CIPサービスのクラス番号

nInstance

WORD

CIPサービスのインスタンス番号

nAttribute

WORD

CIPサービスのアトリビュート番号

pDst

POINTER OF BYTE

値のコピー先変数へのポインタ(ADRで取得)

nMaxLen

WORD

pDstポインタが指す変数のサイズ(SizeOfで取得)

nSessionTimeoutMSec

DWORD

セッションのタイムアウト(デフォルト:30秒)

nCmdTimeoutMSec

DWORD

コマンドのタイムアウト(デフォルト:7.5秒)

bRackComm

BOOL

CPUがモジュール式(ラック型)の場合TRUE(例:CompactLogix)

nPort

BYTE

CPUのポート番号(TF6281は現在ポート1のみサポート)

nSlot

BYTE

CPUがスロット0以外に装着されている場合のスロット番号

VAR_OUTPUT

名前

説明

bBusy

BOOL

ファンクションブロックが有効な間はセットされ、フィードバックを受信するまでセット状態を維持する。Busy = TRUEの間は入力への新しいコマンドを受け付けない

bError

BOOL

コマンド転送中にエラーが発生した場合、bBusy出力がリセットされた後にこの出力がセットされる

nErrId

UDINT

bErrorがセットされた場合、エラー番号を提供する

nDataLen

WORD

有効データのバイト数を返す

FB_SET_ATTRIBUTE_SINGLE

FB_SET_ATTRIBUTE_SINGLEファンクションブロックは、EtherNet/IPデバイスへパラメータを書き込む機能を提供します。

VAR_INPUT

名前

説明

sNetId

T_AmsNetID

コマンドを実行するTwinCAT EtherNet/IP™スキャナのAMSネットID

sIPv4Addr

T_IPv4Addr

対象デバイスのIPアドレス

bExecute

BOOL

立ち上がりエッジでコマンドを開始

nClass

WORD

CIPサービスのクラス番号

nInstance

WORD

CIPサービスのインスタンス番号

nAttribute

WORD

CIPサービスのアトリビュート番号

pSrc

POINTER TO BYTE

サービス送信値を格納する変数へのポインタ(ADRで取得)

nSrcDataLen

WORD

pSrcポインタが指す変数のサイズ(SizeOfで取得)

nSessionTimeoutMSec

DWORD

セッションのタイムアウト(デフォルト:30秒)

nCmdTimeoutMSec

DWORD

コマンドのタイムアウト(デフォルト:7.5秒)

bRackComm

BOOL

CPUがモジュール式(ラック型)の場合TRUE(例:CompactLogix)

nPort

BYTE

CPUのポート番号(TF6281は現在ポート1のみサポート)

nSlot

BYTE

CPUがスロット0以外に装着されている場合のスロット番号

VAR_OUTPUT

名前

説明

bBusy

BOOL

ファンクションブロックが有効な間はセットされ、フィードバックを受信するまでセット状態を維持する。Busy = TRUEの間は入力への新しいコマンドを受け付けない

bError

BOOL

コマンド転送中にエラーが発生した場合、bBusy出力がリセットされた後にこの出力がセットされる

nErrId

UDINT

bErrorがセットされた場合、エラー番号を提供する

Implementation1

Tc2_Ethernet/IPを使用する前に、まずツールからデバイスが本当にCIP メッセージに対応できるかを確認します。

Implementation2

次はTwinCAT3のツールから、RuntimeでCIPメッセージを送信し、相手が受けられるかどうかを確認します。Deivces→使用してるEthernet/IP Scannerをクリックします。

Simple Messageing(Beta)を開き、Class/Instance/Attributeを入力し、CIPメッセージを送信してみましょう。

Implementation3

最後はTc2_Ethernet/IPライブラリを使用し、プログラムでCIPメッセージを送信しましょう。

ライブラリを追加する

プロジェクト→Referenceをクリックします。

Add libraryをクリックします。

Tc2_Ethernet/IPライブラリを追加します。

Done!Tc2_Ethernet/IPライブラリが追加されました。

Program

こちらはEtherNet/IPデバイスから製品名(Product Name)を読み出すプログラムで、読み出した製品名を strProductname(STRING型)に格納する。ADR()でポインタ、SIZEOF()でサイズを渡しています。

また、FB_SET_ATTRIBUTE_SINGLEとFB_GET_ATTRIBUTE_SINGLEほぼ同じなので、今回のプログラム例ではFB_GET_ATTRIBUTE_SINGLEのみになります。

PROGRAM MAIN
VAR
FB_GET_ATTRIBUTE_SINGLE:FB_GET_ATTRIBUTE_SINGLE;
strProductname :STRING;
END_VAR


FB_GET_ATTRIBUTE_SINGLE(
sNetId:=’192.168.251.47.2.1′
,sIPv4Addr:=’192.168.0.224′
,bExecute:=bExecute
,nClass:=16#01
,nInstance:=16#01
,nAttribute:=16#07
,pDst:=ADR(strProductname)
,nMaxLen:=SIZEOF(strProductname)
,bBusy=>bBusy
,bError=>bError
,nErrId=>nErrId
,nDataLen=>nDataLen
);

sNetIdの確認方法は、Devices→使用してるEthernet/IP Scannerをクリックします。

Ethernet/IP→NetIdから確認できます。

結果

Done!bExecute=TRUEで、CIPメッセージ経由でTOYOPUCのProduct名を受け取りました!

シェアする

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

フォローする