今回の記事ではSIEMENS S71200 G2とキーエンスのHR-X100WB間でPROFINET通信を構築し、QR CODEで読み取ったデータをUnified BasicパネルMTP400に表示します。
さ、FAを楽しもう!

Reference Link
前書き
いつも私の技術ブログと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
皆様のサポートが、私たちの活動をより充実させる力となります。
どうぞよろしくお願いします。
メールアドレス(*=@)
X
PROFINET
PROFINET は PI (PROFIBUS & PROFINET International) が規定するオープンな通信規格です。 PROFINET と互換性のある機器同士は、ベンダーに関係なく通信することができます。
Communication Specifications
こちらは今回記事で使用したHR-X100WB のProfinet 仕様です。
- Communication type PROFINET IO
- Communication cycle 8 ms or more
- I/O size 40 to 1400 bytes
- GSDML file version 2.4
Cyclic Communication
サイクリック通信とは、ミリ秒から数十ミリ秒の間隔で周期的にデータを送受信する高速通信方式になります。
通信周期やデータサイズなどの通信設定はPLC側で行います。 PROFINET機器を含む多数の機器を接続するネットワークで負荷が大きい場合、遅延やパケットロスが発生する可能性があります。 運用前に十分な検証を行ってください。
Slot1 Handshake and General Error Status Bits
こちらはHR-X100WB Profinet Slot1の概要です。
Slot2 BUSY Status Bits
こちらはHR-X100WB Profinet Slot2の概要です。
Slot3 Completion Status Bits
こちらはHR-X100WB Profinet Slot3の概要です。
Slot4 Error Status Bits
こちらはHR-X100WB Profinet Slot4の概要です。
Slot7 Matching Level and General Error Status Bits
こちらはHR-X100WB Profinet Slot7の概要です。
Slot8 Operation Result Status
こちらはHR-X100WB Profinet Slot8の概要です。
Slot9 Read Data *** Byte
こちらはHR-X100WB Profinet Slot8の概要です。
Function
今回は記事で使用した関数を紹介します。
Chars_TO_Strg
Chars_TO_Strg」命令を使えば、CHAR配列またはBYTE配列からSTRINGデータ型の文字列へ、あるいはWCHAR配列またはWORD配列からWSTRINGデータ型の文字列へ、文字をコピーすることができます。注意するのは コピー操作では、ASCII 文字のみが有効である。
- 入力パラメータCHARSで文字列にコピーされる(W)CHAR / BYTE / WORDの配列の文字を指定する。
- 文字は、パラメータ STRG で (W)STRING データ型に書き込まれる。
- 文字列の文字数は、少なくともソース・フィールドからコピーされた文字数と同じである。
- 文字列がソース・フィールドの文字数より短い場合、文字列の最大長まで文字が書き込まれる。
- CHAR / BYTEの配列に”$00 “文字が含まれている場合、またはWCHAR / WORDの配列にW#16#0000文字が含まれている場合、コピー操作は対応する位置までしか実行されません。
VAR_INPUT
パラメータ | データタイプ | 説明 |
CHARS | D, L | コピー元文字のコピー元となる (W)CHAR / BYTE / WORD の配列になります。 |
PCHARS | I、Q、M、D、L、Pまたは定数 | (W)CHAR/BYTE/WORDの配列の中で、文字をコピーする位置。 |
CNT | I、Q、M、D、L、Pまたは定数 | コピーする文字数。 すべての文字をコピーするには「0」を使用します。 |
VAR_OUTPUT
パラメータ | データタイプ | 説明 |
STRG | D, L | コピー操作の宛先(W)STRINGデータ型の文字列。 データ型の最大長を守ってください: STRING: 254文字WSTRING: 254文字 (デフォルト) / 16382文字 (最大) WSTRINGを使用する場合、254文字を超える長さを角括弧で明示的に定義しなければならないことに注意してください(例:WSTRING[16382])。 |
S_MOVE
この命令を使用すると、パラメータINの文字列(W)STRINGの内容を、パラメータOUTで指定したデータ領域に書き込むことができる。またデータ型ARRAYのタグをコピーするには、”MOVE_BLK “命令と “UMOVE_BLK “命令を使用してください。
Implementation
Keyence Side
最初にキーエンス側から構築します。
Access HR-X100WB Web Server
HR-X100WB本体とUSB-Cタイプケーブルを接続します。
PCにはHR-X100WBのDriveが見つかり、中にUSB DriverのインストールFILEがあります。
自分のPCに合わせて64Bitもしくは32BitのUSB Driverをインストールしましょう。
Driverのインストール画面が表示され、Next>で進みます。
少々お待ち下さい…
Done!次は下記のLinkにアクセスします。
こちらはHR-X100WBのWeb Serverになります。
Reset Factory setting
始めにHR-X100WBを出荷設定に戻すために、Send ConfigurationのDrop-listから”Initialize settings”をクリックします。
OKで進みます。
Paring Process
HR-X100WBとHR-UC2をParingしたいので、Configure connected devicesをHR-UC2を設定します。
Web ServerからHR-UC2とParingしてないのメッセージが表示され、下図オレンジ枠のICONをクリックします。
OKで進みます。
ParingにあるParing ModeボタンをクリックしHR-X100WBをParing モードに変更します。
Done!HR-X100WBがPairing Modeになりました。
Configure
HR-X100WBの設定を変更するためにHomeボタンをクリックします。
通信設定などを行い、Nextで進みます。
Data format Tabにアプリケーションに合わせてHeaderなどを追加しましょう。
Reading TabではHR-X100WBで読み取りた写真を表示できます。
Buzzer Turn OFF
HR-X100WBのBuzzer音がかなり大きいので、そのBuzzer音を消します。
Table>I/O Operationをクリックします。
Buzzer/Vibration/LEDにBuzzer VolumeをNoneに設定しましょう。
Send Configuration
最後は設定項目をHR-X100WBに転送するために、Send Configurationをクリックします。
OKで進みます。
Access HR-UC2 Web Server
今度はUSB-Cけ‐bるをHR-UC2と接続し、下記のLinkにアクセスします。
こちらはHR-UC2のWeb Server画面です。
Pairing Mode
HR-UC2をParing Modeに設定します。HR-X100WBとHR-UC2が両方ともParing Modeにいれば、10秒後に自動Paringできるようにします。
Done!HR-X100WBとHR-UC2がPairingできました。
HR-X100WBとHR-UC2がPairing成功したらPOWERとLINK両方とも緑点灯になります。
HR-X100WB本体のWIFI ICONにも緑点灯になります。
Configuration
次はHR-L2とSiemens PLC間でProfinet通信を設定します。
Data out destination
今回はSiemens S71500とHR-L2を通信するので、Data out destinationをPLCに設定します。
Communication interface
Siemens S71500とProfinet通信するので、Communication interfaceをEthernetに設定します。
Communication protocol
Communication protocolをProfinetに設定します。
Send Configuration
最後はSend Configurationをクリックしパラメータを転送します。
Siemens Side
次はSiemens側を構築します。
Download GSDML File
下記のLinkからキーエンスのHR-X100WB GSDML FileをDownloadします。
Install GSDML File
Options>Manage general Station description files(GSD)をクリックします。
GSDMLの管理画面が表示され、…ボタンをクリックします。
先程DownloadされたGSDML Folderを選びましょう。
Done!GSDML Fileが見つかりました。InstallでGSDML Fileをインストールします。
Done!
Check Connection
次はTIAから下記のボタンからHR-X100WBがPROFINETの設定になってるかをCHECKします。
Done!HR-X100WBが見つかりました。
S7-1200G2 Side
Siemens S7-1200 G2側を構築します。
Configuration Profinet Network
Device & networksをクリックし、Profinetネットワークを構築します。
先ほど追加したHR-X100WB Profinetデバイスを追加しましょう。
Done!
Assign Profinet network
Not Assignedをクリックし、HR-X100WBとSiemens S7-1200 G2を同じProfinet Networkに割り付けます。
Done!
IP Address
HR-X100WBのIPアドレスをアプリケーションに合わせて設定しましょう。
Assign Name
Profinetを使用するには、各ProfinetデバイスにもDevice Nameが必要になります。先程追加したHR-X100WBを右クリックし>Assign device nameします。
Update listをクリックします。
Done!HR-X100WBが見つかり、プロジェクトと本体に設定されたDevice Nameが異なるメッセージも表示されています。ここでAssign nameでプロジェクトに設定したデバイス名を設定しましょう。
Done!
IO Mapping
今度はHR-X100WBを開き、各SlotのIO番地を設定しましょう。
User Data Type
プログラムに使用する構造体を定義します。
stArray170Bytes
こちらは170バイト配列の構造体を定義します。
stHRXInSlot001
こちらはキーエンスHR-X100WBのProfinet通信Slot1のデータを定義します。
stHRXInSlot002
こちらはキーエンスHR-X100WBのProfinet通信Slot2のデータを定義します。
stHRXInSlot003
こちらはキーエンスHR-X100WBのProfinet通信Slot3のデータを定義します。
stHRXInSlot004
こちらはキーエンスHR-X100WBのProfinet通信Slot4のデータを定義します。
stHRXInSlot007
こちらはキーエンスHR-X100WBのProfinet通信Slot7のデータを定義します。
stHRXInSlot008
こちらはキーエンスHR-X100WBのProfinet通信Slot8のデータを定義します。
stHRXInSlot009
こちらはキーエンスHR-X100WBのProfinet通信Slot9のデータを定義します。
stKeyencehrXIN
こちらは先ほど定義したSlotをまとめ、更に読み取ったデータを文字列に格納する変数まで定義した構造体です。
stKeyencehrX
こちらはHR-X100WBの入力データをすべてまとめた構造体です。
PLC Tags
先ほどIO MappingでHR-X100WBを定義したIO番地に合わせてTAGを定義します。
Function
次はプロジェクトに使用するFUNCTIONを定義します。
fcByteTo8Bool
こちらのFCはByteを8個のBoolに分解する機能を実装します。
Function Block
次はHR-X100WB専用のFBを定義します。
fbKeyencehrX
こちらはFBのInterfaceになります。
Network1
Network1は先ほど定義したfcByteTo8Boolを使用し、Slot1のデータを構造体に分解します。
Network2
Network2は先ほど定義したfcByteTo8Boolを使用し、Slot2のデータを構造体に分解します。
Network3
Network3は先ほど定義したfcByteTo8Boolを使用し、Slot3のデータを構造体に分解します。
Network4
Network4は先ほど定義したfcByteTo8Boolを使用し、Slot4のデータを構造体に分解します。
Network5
Network5はDeserialize関数を使用し、配列のIndexを選択しSlot7のMachine Level値を取得します。
Network6
Network6はDeserialize関数を使用し、配列のIndexを選択しSlot8のCommand Resultコード値を取得します。
Network7
Network7はDeserialize関数を使用し、配列のIndexを選択しSlot8のエラーコード値を取得します。
Network8
Network8はDeserialize関数を使用し、配列のIndexを選択しSlot9のResult Data Ready Count値を取得します。
Network9
Network9はDeserialize関数を使用し、配列のIndexを選択しSlot9のResult Data Update Count値を取得します。
Network10
Network10はDeserialize関数を使用し、配列のIndexを選択しSlot9のResult Data Size値を取得します。
Network11
Network11はDeserialize関数を使用し、配列のIndexを選択しSlot9のResult Data 値を取得し、そして文字配列にもう一度転送します。
Network12
Network12はChars_TO_Strg関数を使用しCHAR配列の現在値をSTRING変数に転送します。
Network13
Network13はS_MOVEを使用し文字列を構造体の変数に転送します。
dbKeyenceBarCodeReader1
DBを定義し、先程定義したstKeyenceXINに指定します。
OB1
OB1で先ほど定義したFBを呼び出します。
HMI Side
今度はMTP400 Unified Basicパネル側を構築します。
Connect PLC to HMI
S71200 G2とMTP400 Unified Basicパネル間のHMI Connectionを作成するにはDevice & networksにあるConnectionsボタンをクリックします。
HMIとS71200 G2をDropで繋がりまします。
Done!それでS71200 G2とMTP400の間のHMI接続ができました。
Connections Tabを開くと先ほど定義したHMI_Connectionも確認できました。
Screen
こちらは今回記事で作成した画面になり、QR Codeを読み取った結果・そしてHR-X100WBの状態を可視化します。
Add I/O Field
QR Codeの結果を表示するためのI/O FieldをElementsから追加します。
I/O FieldのPropertiesを開き、General>Process value>Dynamization(1)にTagを選択します。それによってI/O Fieldで表示する文字がPLCなどと繋がっているTagになります。
右にあるTag画面>Process>…ボタンをクリックします。
該当するI/O Fieldと接続するPLC tagを選択します。
今回はCreateボタンをクリックし、そのTag設定画面から直接新規Tagを追加します。
Connection Fieldにある…ボタンをクリックします。
先程追加したHMI接続を選択します。
次はPLC tag欄にある…ボタンをクリックし、S71200 G2のTagと選択しましょう。
ここで例として文字列のstResultを設定します。
Done!
最後はOutput formatに文字列を表示するように、String>Defaultを設定しましょう。
Add Lamp
次は画面上にランプを追加するために、Basic elements>Circleを追加します。
先と同じように、Dynamic(1)をTagに設定し>Tagを追加します。その後Type欄にRangeを選択しましょう。最後はConditionで条件を設定し、色を変更します。今回はTag値1であるとCircleに色を赤に変更します。
Add text
QR Codeのタイトルを追加するために、Basic ObjectにTextを追加しましょう。
Text欄に表示する文字を設定しましょう。
Add Default Text in I/O Field
もしI/O FieldにDefaultで表示したい文字があれば、わざわざText Objectを追加する必要がありません。
該当するI/O FieldのProperty>Outut format>文字入れてから{i} のような設定すればOkです。
Sync Tags
先ほどPLC Tagsをたくさん追加しましたが、どれも適切な名前を設定していません。そのときWinCCにあるPLC Tags名前同期機能を使いましょう。
下図のボタンになります。この機能を使用するとPLC TagsがPLC 内の名前に沿って同期してくれます。
Download
Hardware ConfigurationとプログラムをCPUにDownloadしてください。
Result
Done!S71200 G2とHR-X100WB間でProfinet通信できました。
HR-X100WBから読んだQR CodeもS71200 G2上で確認できました。
こちらのLinkで今回の記事のプロジェクトをDownloadしてください。
https://github.com/soup01Threes/Siemens/blob/main/TestWithKeyenceHR100.zap20
こちらの動画で動作確認できます。