Siemens#キーエンスのHR-X100WBとProfinetで接続しよう

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

さ、FAを楽しもう!

Reference Link

Siemens#Unified Basic パネルを使ってみよう

前書き

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

皆様のサポートが、私たちの活動をより充実させる力となります。

どうぞよろしくお願いします。

メールアドレス(*=@)

soup01threes*gmail.com

X

https://x.com/3threes2

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

パラメータデータタイプ説明
CHARSD, Lコピー元文字のコピー元となる (W)CHAR / BYTE / WORD の配列になります。
PCHARSI、Q、M、D、L、Pまたは定数(W)CHAR/BYTE/WORDの配列の中で、文字をコピーする位置。
CNTI、Q、M、D、L、Pまたは定数コピーする文字数。 すべての文字をコピーするには「0」を使用します。

VAR_OUTPUT

パラメータデータタイプ説明
STRGD, 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にアクセスします。

http://keyenceautoid/

こちらは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にアクセスします。

http://keyenceautoid/

こちらは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します。

https://www.keyence.co.jp/products/barcode/handheld-scanners/hr-x/downloads/?mode=so&modelId=PM_221X100

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

こちらの動画で動作確認できます。

https://youtube.com/shorts/lhuOOCXFtL8

シェアする

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

フォローする