Beckhoff#B2G78-EC1 EtherCAT Gatewayと接続しよう

今回の記事ではB2G78-EC1のAnywire EthernetCAT Gatewayを使用し、EtherCATネットワーク経由でBeckhoff TwinCAT3とデータ交換します。

さ、FAを楽しもう!

前書き

いつも私の技術ブログと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

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

Reference Link

http://soup01.com/ja/category/beckhoff/twincat3/tfxxx/tf6281/

http://soup01.com/ja/category/protocol/anywire/

B2G78-EC1?

B2G78-EC1はEtherCATとAnyWireASLINK のゲートウェイユニットで、 AnyWireASLINK システムが接続できます。

コネクタ端子台

DC24V 電源、AnyWireASLINK 伝送線(DP,DN)を接続するコネクタ端子台です。

端子配置を以下に示します。

システム構成

AnyWireASLINK は、ゲートウェイ、リモートユニット、その周辺機器で構成されます。

リモートユニットの種類

リモートユニットには次の種類があります。

接続台数

AnyWireASLINK システム 1 ラインに接続できるリモートユニットは最大 128 台です。

接続形態

AnyWireASLINK システムは T 分岐、マルチドロップ、ツリー分岐、スター分岐など、さまざまな接続が可能です。

Implementation

B2G78-EC1側

最初にB2G78-EC1 Gateway側から構築します。

ESI Fileダウンロード

最初に下記のLinkからESI Fileをダウンロードしてください。

https://www.anywire.jp/products/anywireaslink/products/master03.php

Firmware確認

次はB2G78-EC1本体のFirmwareを確認しましょう。それにより使用するESI FILEが異なります。C19HBC←C=Firwmare Cになります。

DIPスイッチ設定

B2G78-EC1本体のDIPスイッチの設定により、EtherCAT経由で交換できるデータ数が変わり、またFirmwareによってDIPスイッチの意味もことなります(先程に描きましたが、今回の記事ではFirmware Cを使用します。)。

SET

次はSETボタンを追加します。SETボタンを押すと下記の機能をもっています。

異常フラグの解除

SETスイッチを押すことで、異常フラグが解除されます。

本機能は、コマンド入力による異常フラグクリアと同じ動作です。

アドレス自動認識

SETスイッチを2秒以上押し続けると、SET LEDが点灯し、アドレス自動認識を開始します。

電源入れ直し

最後にGatewaysの電源を入れ直してください。

Beckhoff側

次はBeckhoff側を構築します。

ESI FILE インストール

先程DownloadしたESI Fileを下記のPathに格納します。

C:\Program Files (x86)\Beckhoff\TwinCAT\3.1\Config\Io\EtherCAT

EtherCAT ドライバー追加

Etherent/IP Driverを追加するために、Devices→右クリック→Add New Itemします。

EtherCAT→EtherCAT Masterを選択します。

OKで進みます。

Ethernet Adapter設定

次はEtherCATマスターを稼働するEtherent Driverを設定するために、Adapterをクリックします。

EtherCATマスターとして使用するEtherent インタフェースを設定します。

Done!

自動Scan

EtherCAT Master→右クリック→ScanでEtherCATネットワークのSlaveを検索します。

Done!B2G78-EC1を検索できました。

また、DIPスイッチ設定によってPDO Mappingが異なります。

DUT

dutG78EC1_IN_254Bits

ネットワーク経由で受信した254点分の入力データを格納するための構造体です。

TYPE dutG78EC1_IN_254Bits :
STRUCT
arrw:ARRAY[0..15] OF WORD;

END_STRUCT
END_TYPE

dutG78EC1_IN_Status

ゲートウェイから受信したステータス情報を格納するための構造体です。

TYPE dutG78EC1_IN_Status :
STRUCT
arrw:ARRAY[0..3]OF WORD;
END_STRUCT
END_TYPE

dutG78EC1_StatusCommand

ゲートウェイに対するステータス・コマンド情報を格納するための構造体です。

TYPE dutG78EC1_StatusCommand :
STRUCT
w0,w1:WORD;
END_STRUCT
END_TYPE

dutG78EC1_IN

ゲートウェイからの全入力データをまとめた最上位構造体です。全メンバーにAT %I*が付いており、EtherCATの入力アセンブリに直接マッピングされています。

TYPE dutG78EC1_IN :
STRUCT

dut_Mapping AT %I* :dutG78EC1_IN_254Bits;
dut_Status AT %I* :dutG78EC1_IN_Status;
dut_Commands AT %I* : ARRAY[0..63]OF dutG78EC1_StatusCommand;
END_STRUCT
END_TYPE

dutG78EC1_OUT

ゲートウェイへの全出力データをまとめた最上位構造体です。%Q*によりEtherCATの出力アセンブリに直接マッピングされており、PLCからゲートウェイ経由で接続スレーブへの出力制御を一括管理する構造になっています。

TYPE dutG78EC1_OUT :
STRUCT
dut_Mapping AT %Q* :dutG78EC1_IN_254Bits;
dut_Commands AT %Q* :dutG78EC1_IN_Status;
dut_Statuscommands AT %Q* :ARRAY[0..63]OF dutG78EC1_StatusCommand;
END_STRUCT
END_TYPE

dutG78EC1

ゲートウェイの入出力データを一体化した構造体です

TYPE dutG78EC1 :
STRUCT
dutIN :dutG78EC1_IN;
dutOut :dutG78EC1_OUT;
END_STRUCT
END_TYPE

GVL

ゲートウェイの入出力データを一括管理するグローバル変数を宣言します。

{attribute ‘qualified_only’}
VAR_GLOBAL
udtSlave1 :dutG78EC1;
END_VAR

プログラム

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

PROGRAM p

VAR
wDetectVale :WORD;
arrTON :ARRAY[0..9]OF TON;
xON :BOOL:=TRUE;
R_TRIG :R_TRIG;
END_VAR

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

初期化

定数16#4220(16進数)をw0に代入します。これはゲートウェイが光電センサーにデータを送信するためのコマンドで、220から、そして4=Readです。

クロック生成回路

0.2秒ごとにarrw[0]のビットが左シフトされ、bit15に達するとbit0にリセットされる16ビット循環シフトレジスタとして機能しています。各ビットの点灯状態を後段の出力制御に使用します。

こちらのarrw[1]はbit7で折り返す8ビット循環シフトレジスタとして、arrw[0]の16ビット版と並列動作するプログラムです。

MAIN

最後はプログラムを呼び出します。

p();

コンパイル

Build→Build Solutionでプロジェクトをコンパイルします。

Mapping

次は入出力データをMappingします。

今回GVLで定義した変数はWORDタイプですが、ESI FILEで生成したPDOは全部BITです。異なるデータタイプをMappingできるように、下記の”All Types”オプションを入れてください。

ダウンロード

最後はプロジェクトをDownloadしましょう。

結果

Done!下図のようにB2G78-EC1のEtherCAT Gateway経由でAnywireの光電センサー値を取得できました。

また、EtherCATネットワークにはエラーがありません。

IO

こちらの動画から出力モジュールの動作を確認できます。

https://youtube.com/shorts/Zp5D1T0M74w

LED

こちらの動画からB2G78-EC1正常のLED状態を確認できます。

https://youtube.com/shorts/ANmbXoEpZU0

ダウンロード

こちらのLinkから今回記事のプロジェクトをDownloadできます。

https://github.com/soup01Threes/TwinCAT3/blob/main/EtherCATGatewayAnywire-B2G78-EC1.tnzip

シェアする

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

フォローする