今回の記事では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
技術はひとりじゃもったいない。
関数
今回の記事では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
|
|---|
sNetIdの確認方法は、Devices→使用してるEthernet/IP Scannerをクリックします。

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

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