今回の記事ではEXORのex715MにCodesysインストールし、キーエンスのHR-X100WB間でEthernet/IP通信します。
さ、FAを楽しもう!

Reference Link
前書きBLOG固定
いつも私の技術ブログと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
知ってたら助かること、届けたいだけです
あなたの応援が、知識の共有をもっと自由で持続可能なものにしてくれます。これからもどうぞよろしくお願いします。
soup01threes*gmail.com
技術はひとりじゃもったいない。
EtherNet/IP?
EtherNet/IPは、ODVA(Open DeviceNet Vendor Association, Inc)が管理する産業用通信ネットワークです。 EtherNet/IP通信は、通常のEthernet通信とネットワークを共有することができます。
Cyclic and Message Communication
EtherNet/IPには、周期的にデータの送受信を行うサイクリック通信(暗黙メッセージ)と、任意にコマンド/レスポンスの送受信を行うメッセージ通信(明示メッセージ)があります。そして優先度順に並べた通信周期(RPI)を設定し、ネットワーク負荷を調整できる。
この通信は、ビットのON/OFFを設定することで通信状態を確認することができる。通信周期やデータサイズなどの通信設定はPLC側で行います。EtherNet/IP機器を含む多数の機器を接続するネットワークで負荷が大きい場合、遅延やパケットロスが発生することがあります。 運用前に十分な検証を行ってください。
Connection type
EtherNet/IPサイクリック通信中に、PLCからHR-Xシリーズへの接続をオープンします。 使用可能な接続の種類は機器により異なります。 HR-Xシリーズで使用可能なコネクションを以下に示します。
Exclusive Owner
HR-Xシリーズのデータ伝送のほか、PLCからHR-Xシリーズに制御指示を出す場合に使用します。
- HR-Xシリーズ -> PLC: データ伝送
- PLC→HR-Xシリーズ 制御命令
- 1台のHR-Xシリーズで複数の「Exclusive Owner」接続はできません。
Input Only
HR-X シリーズからのデータ送信のみに使用します。 1台のHR-Xシリーズで複数のコネクションを使用することができます。 (最大16コネクションまで)
- HR-Xシリーズ -> PLC: データ伝送
Result data (Input Assemblies)
入力Assembliesは、HR-Xシリーズからの応答をPLCに書き込みます。 このデバイスを使用する場合、各デバイスの機能は以下のように割り当てられます。 入力アセンブリには、デバイスステータス、結果データ等が書き込まれます。
下図は入力アセンブリのメモリマップ(インスタンスID:0x64)になります。
(HR-X -> PLC)
Control data (Output Assemblies)
出力アセンブリは、PLCからの指示をHR-Xシリーズに書き込みます。 本装置を使用する場合、各装置の機能は以下のように割り当てられます。 出力アセンブリは、機器制御命令、エラークリア、ハンドシェイク処理等を行います。
下図は出力アセンブリーのメモリーマップ(インスタンスID:0x65)になります。
(PLC → HR-X)
Message Communication
メッセージ通信では、コマンドとレスポンスが交換される。
Specifications
こちらはHR-X100WBの通信仕様になります。注意するのは16個接続にはサイクリック通信とメッセージ通信で合計16のコネクションがあります。
EXOR?
グローバルに事業を展開するイタリアのEXOR Internationalは、半世紀近くにわたりHMI、制御、産業用IoTのソリューションを設計、開発、製造してきた。 EXORは、インダストリー4.0のコンセプトに完全に対応した高度な技術を表現する使いやすいツールをお客様に提供しています。
1971年にヴェローナで創業し、現在ではイタリア、ドイツ、アメリカ、インドに150人の従業員を擁しています。
ex715M?
eX715Mタッチスクリーンパネルは、HMI、ゲートウェイ、PLCとして使用できる多機能性により、システム統合のための完全なソリューションです。製品の基本コンセプトは、IIoTの適切かつ容易な実装を可能にし、インダストリー4.0の要件に準拠することです。パワフルな64ビットのクアッドコアCPUを搭載し、JMobileアプリケーションを最適な環境で動作させ、最高のパフォーマンスを実現します。
eX700Mは64ビットの強力なクアッドコアCPUを搭載しており、JMobileアプリケーションを最適な環境で実行し、最高のパフォーマンスを発揮します。
eX700Mのパワーは、OPC UA Client/ServerやMQTTなどの優れた通信機能に加え、JMobile 4.5の新しいグラフィック機能やセキュリティ機能を活用するための最良の方法です。
また、X700Mは、工場、船舶、ビルディングオートメーションなど、パワフルで高性能なHMIが必要とされるIIoTエッジアプリケーションの中でも、できるだけ人間のオペレーターに近い場所に設置することが要求されるアプリケーションに最適です。
- マルチタッチ・ディスプレイと堅牢なガラス・フロント
- 過酷な作業環境、海事、工業用の幅広い認証
- CODESYS PLCランタイムソフトウェアのインストールに対応し、I/O用ネットワークスタックをフル選択可能
- 15.6インチTFT投影型静電容量式タッチスクリーン
- マルチタッチ操作
- 64ビット・クアッドコアCPU
- 動作温度 -20°C~+60°C
- システムとプロジェクトの高速起動
- イーサネットI/Oスタック付きCODESYS V3
- 傷、紫外線、化学薬品に強い
- 最大3つのEthernetによるネットワーク分離が可能
- 異なるIPアドレスを持つネットワーク
- システム拡張用プラグインモジュール
Implementation
Keyence Side
最初にキーエンスHR-X100WB側から構築します。
キーエンスのHR-L2側には適切なIPアドレスを設定し、Communication protocolをEthernet/IPに設定してください。
Codesys Side
次はCodesys 側を構築します。
Download EDS File
キーエンスのHPからHR‐L2のEDS FileをDownloadしてください。
Install EDS File
先ほどDownloadしたEDS Fileをインストールしましょう。
Done!
Configure Ethernet/IP Network
Ethernet Driverを追加します。
General Tabを開き、BrowseボタンでCodesys ハードウェアの適切なネットワークInterfaceを設定しましょう。
Add Ethernet/IP Scanner
次はEthernet Scannerを追加するために、Ethernet Driverを右クリックし>Add Deviceします。
Fieldbus>Ethernet/IP Scanner>Ethernet/IP Scannnerを選び、Add Deviceで追加します。
Done!
Scan for Devices
Ethernet/IP Adapterを追加するには、自動検索と手動追加の2つの方法があります。最初に自動検索する方法を説明します。Ethernet/IP Scannerを右クリックし>Scan for deviceします。
Done!HR-X100WBがすでに接続されている場合は、該当するデバイスが検索結果に表示され、”Copy to project”でデバイスをハードウェア構成に追加しましょう。
Done!
Manual Add Devices
次は手動のEthernet/IP Adapter追加方法を説明します。Ethernet/IP Scannerを右クリック>Add Deviceします。
Ethernet/IP>Ethernet/IP Remote Adapter>HR-X Seriesを選び>Add Deviceで追加しましょう。
Done!
Configure HR-X100WB
次はキーエンスのHR-X100WBを設定します。
IP Address
最初にGeneral Tabを開き、キーエンス HR-X100WBのIPアドレスを設定します。
Connection
次はConnectiong画面を開き、CodesysとHR-X100WB間のEthenret/IP接続を設定できます。今回の記事ではClass1接続にします。
Assemblies Tabを開き、キーエンスのHR-X100WB間でEIP接続するときの変数定義を行います。
Default上ではBar Codeリーターから読み取った変数の1バイトしかありませんので、その変数を増やすには+Addをクリックしてください。
Add Assembly Parameterの画面が表示され、Result dataの項目を選び>Countで連絡追加の数を設定しましょう。最後はOKで設定を確定にします。
Done!
Program
今度はプログラムを作成します。
DUT stKeyenceHRX100WBIn
こちらはキーエンスのHR-X100WBのStatusに合わせて作成した構造体になります。
TYPE stKeyenceHRX100WBIn : STRUCT xError :BOOL; xReadDataAvailable :BOOL; xReadDataUpdateComplete :BOOL; xGeneralError :BOOL; xReady :BOOL; xReadingComplete :BOOL; xCommandComplete :BOOL; xCommandError :BOOL; iMachingLevel :INT; iCommandFailureCase :INT; iGeneralErrorCase :INT; iReadDataReadyCount :INT; iReadDataUpdateCount :INT; iReadDataSize :INT; strReadData :STRING(255); END_STRUCT END_TYPE |
fbKeyenceHRX100WB
こちらはキーエンスのHR-X100WBから読み取ったデータを構造体変数に分解するプログラム、また読み取った文字列を一括転送します。
FUNCTION_BLOCK fbKeyenceHRX100WB VAR_INPUT xEnable :BOOL; END_VAR VAR_OUTPUT xError :BOOL; xReadDataAvailable :BOOL; xReadDataUpdateComplete :BOOL; xGeneralError :BOOL; xReady :BOOL; xReadingComplete :BOOL; xCommandComplete :BOOL; xCommandError :BOOL; iMachingLevel :INT; iCommandFailureCase :INT; iGeneralErrorCase :INT; iReadDataReadyCount :INT; iReadDataUpdateCount :INT; iReadDataSize :INT; END_VAR VAR_IN_OUT ioArray :ARRAY[*]OF BYTE; iostKeynceHRX100WB :stKeyenceHRX100WB; END_VAR VAR iReadDataReadyCountBackup :INT; xDataUpdate :BOOL; END_VAR |
IF iReadDataReadyCountBackup <> iostKeynceHRX100WB.in.iReadDataReadyCount THEN iReadDataReadyCountBackup:=iostKeynceHRX100WB.in.iReadDataReadyCount; xDataUpdate:=TRUE; END_IF IF xEnable THEN IF xDataUpdate THEN MEMUtils.MemCpy( pbyDest:=ADR(iostKeynceHRX100WB.in.strReadData) ,pbySrc:=ADR(ioArray[1]) ,dwSize:=TO_DWORD(iostKeynceHRX100WB.in.iReadDataSize) ); xDataUpdate:=FALSE; END_IF; END_IF; IF NOT xEnable THEN iostKeynceHRX100WB.in.strReadData:=”; xDataUpdate:=FALSE; END_IF xError:=iostKeynceHRX100WB.in.xError; xReadDataAvailable:=iostKeynceHRX100WB.in.xReadDataAvailable; xReadDataUpdateComplete:=iostKeynceHRX100WB.in.xReadDataUpdateComplete; xGeneralError:=iostKeynceHRX100WB.in.xGeneralError; xReady:=iostKeynceHRX100WB.in.xReady; xReadingComplete:=iostKeynceHRX100WB.in.xReadingComplete; xCommandComplete:=iostKeynceHRX100WB.in.xCommandComplete; xCommandError:=iostKeynceHRX100WB.in.xCommandError; iMachingLevel:=iostKeynceHRX100WB.in.iMachingLevel; iCommandFailureCase:=iostKeynceHRX100WB.in.iCommandFailureCase; iGeneralErrorCase:=iostKeynceHRX100WB.in.iGeneralErrorCase; iReadDataReadyCount:=iostKeynceHRX100WB.in.iReadDataReadyCount; iReadDataUpdateCount:=iostKeynceHRX100WB.in.iReadDataUpdateCount; iReadDataSize:=iostKeynceHRX100WB.in.iReadDataSize; |
POU
最後はMAINプログラムでFBを呼び出します。
Mapping
Ethernet/IP I/O Mappingに構造体と合わせて変数をMappingしましょう。
Download
プロジェクトをCodesys RuntimeにDownloadします。
Result
Done!Codesy RuntimeとHR-X100WB間のEIP通信ができました。
HR-X100WBからREADY信号を受信できました。
キーエンスのHR-X100WBがQR コード読み取ったときの結果も確認できました。