Beckhoff#TwinCAT3 ProfinetとKeyence SR750を連携しよう

こちらの記事ではBeckhoff TwinCAT3とKeyence SR750をProfinet連携する手順を1から説明します。(Youtube Channelの Commentリクエストより)

さ、はじめよう!

Reference Video

Beckhoff.TwinCAT3 ProfinetとKeyence SR750を連携しよう

Beckhoff.Use Keyence SR750 with TwinCAT3 and Etherent/IP

Reference Link

Keyence#SR750とBeckhoff TwinCAT3をEtherent/IPで繋がってみよう

PROFINET?

PROFINET は PI (PROFIBUS & PROFINET International)によって規定されたオープンな通信規格です。PROFINET と互換性のある機器 は、ベンダーに関係なく、PROFINET 互換機器はベンダーに関係なく通信できます。SR-750シリーズはコンフォーマンスクラスAに準拠し、サイクリック通信にも対応しています。

Cyclic communication

サイクリック通信は、更新時間間隔で通信を行うことで、数ms〜数十ms間隔の高速制御を可能にする。更新時間間隔で通信することで、数ms〜数十ms間隔の高速制御が可能。

SR-750シリーズは、通信を意識することなく、PLC内の変数やデバイスを参照・更新して制御することができます。 これにより、PLC 側のプログラムが簡単になります。

SR-750 シリーズを制御する場合は、サイクリック通信の更新時間を 8ms 以上に設定してください。また、最大読み取り長は246桁になります。

注意するのはサイクリック通信の通信周期やデータサイズなどの通信設定はPLC側で行い、

PROFINET機器を含む多数の機器を接続するネットワークでは、負荷が大きい場合、遅延やパケットロスが発生する可能性があります。運用前に十分な検証を行ってください。

Function Overview

Timing input control Controls 

タイミング入力のON/OFFし、パラメータバンクを指定したタイミング入力が可能です。

Preset data control 

リードOKデータをプリセットデータとして設定できます。

また、PLCからプリセットデータの登録・削除が可能です。

Tuning 

パラメータバンクを指定してチューニングを行うことができる。

Data handshake 

読み取りデータをPLCに書き込むかどうかを制御できる。

Error handling 

本体で発生したエラーを確認することができます。

エラー要因を取り除いた後、SR-750シリーズをエラー状態から復帰させることができます。

Statistical information acquisition

読み取り回数、読み取りデータ更新回数を確認できる。

Operation status acquisition

読み取りデータを取得し、I/O状態やマーキング検証結果を確認することができます。

Operation flow with PROFINET 

Step1:Check specifications

接続するPLCがPROFINET接続に対応しているかと入出力データの割り当て状況を確認してください。

Step2:Make the PROFINET communication setting f

SR-750シリーズとPROFINET接続する場合に設定します。

  • IPアドレス
  • サブネットマスク
  • デフォルトゲートウェイ
  • PROFINET通信の有効/無効
  • PROFINETデバイス名、データ
  • ハンドシェーク有効/無効

PROFINETデバイス名は、ネットワーク内で同じデバイス名

を設定する必要があり、SR-750シリーズに設定した仮IPアドレスではPROFINET通信ができません。PROFINET設定を本体のOSに転送した後、SR-750 シリーズ本体が再起動します。

Step3:Establish PROFINET communication.

SR-750の情報をPLCに登録する場合は、SR-750のGSDMLファイルを使用してください。

を使用してください。

Step4:Perform necessary tasks.

アプリケーションのテストを始めます。

Time chart

Implementation

Keyence Side

最初はキーエンスSR750側を設定します。

Communication Setting

AutoID Network Navigatorを起動し、Communication2のTabで通信設定を行います。

ProtocolをPROFINETに設定し、Detailsをクリックします。

SR-750のデバイス名を設定します。

Send Configuration

SR-750のセットアップを完了したら、Transfer>Send Configurationでプロジェクトをデバイスに転送しましょう。

Beckhoff Side

次はBeckhoff TwinCAT3側を構築します。

Install GSDML

下記のLinkからKeyenceのHPでSR-750のGSDML FileをDownloadします。

https://www.keyence.co.jp/products/barcode/barcode-readers/sr-750/downloads/?mode=so&modelId=

下記のDirectoryにGSDML Fileを格納してください。

/TwinCAT/3.1/Config/Io/Profinet

Add Profinet RT Controller

I/O>Devices>右クリック>Add New Itemします。

Profinet I/O Controller(RT)を選び、OKで進みます。

Done!Profinet I/O Controller(RT)が追加されました。

Configure Adapter

Adapter TabでPROFINET Controllerとして使用するEthernet Intetfaceを設定してください。

Sync Task

Sync TaskでPROFINETのTaskタイムを設定しましょう。

Settings

最後はSettings TabでPN ControllerのIPとデバイス名を設定してください。

Set IP SettingsをクリックすればOKです。

Done!

Add SR-750

次はキーエンスのSR-750を追加するため、Profinet Controller>右クリック>Add New Itemします。

KEYENCE CORPORTATION>Sensor>Keyence Code Readerを選び、Okで進みます。

Done!

Term2-10は入力データで、Term11から15までは出力データになります。

Device Name

次はSR-750のデバイス名を設定しましょう。

IP Address

また、Profinetはデバイス名に沿ってIPアドレスを設定しますので、IPアドレスもアプリケーションに合わせて設定してください。

Add PLC

Fieldbusの設定が終わりましたので、次はPLCプログラムを作ります。

PLC>右クリック>Add New Itemします。

Standard PLC Projectを選び>Addします。

DUT

こちらはSR-750のProfinet構造に合わせて作成した構造体です。

DUT_SR750_PN_InData_Term2 

こちらはSR-750の結果状態やエラーを示す構造体です。

TYPE DUT_SR750_PN_InData_Term2 :
STRUCT
Error:BIT;
Result_Data_Available:BIT;
Result_Data_Strobe:BIT;
Buffer_Overflow_Error:BIT;
General_Error:BIT;
END_STRUCT
END_TYPE
DUT_SR750_PN_InData_Term3 

こちらはSR-750のBusy状態を示す構造体です。

TYPE DUT_SR750_PN_InData_Term3 :
STRUCT
Busy:BIT;
Try_Busy:BIT;
Lock_Busy:BIT;
Mode_Busy:BIT;
Err_Busy:BIT;
END_STRUCT
END_TYPE
DUT_SR750_PN_InData_Term4 

こちらはSR-750の動作完了状態を示す構造体です。

TYPE DUT_SR750_PN_InData_Term4 :
STRUCT
Read_Complete
,Preset_Complete
,Register_Present_Data_Complete
,Tune_Complete
,EXT_Request_Complete
:BIT;
END_STRUCT
END_TYPE
DUT_SR750_PN_InData_Term5 

こちらはSR-750のエラー状態を示す構造体です。

TYPE DUT_SR750_PN_InData_Term5 :
STRUCT
Read_Failure
,Preset_Failure
,Register_Preset_Data_Failure
,Tune_Failure
,EXT_Request_Failure
:BIT;
END_STRUCT
END_TYPE
DUT_SR750_PN_InData_Term6 

こちらはSR-750の入出力端子状態を示す構造体です。

TYPE DUT_SR750_PN_InData_Term6 :
STRUCT
IN1_Status
,IN2_Status
,OUT1_Status
,OUT2_Status
,OUT3_Status
:BIT;
END_STRUCT
END_TYPE
DUT_SR750_PN_InData_Term7 

こちらはSR-750の環境状態を示す構造体です。

TYPE DUT_SR750_PN_InData_Term7 :
STRUCT
Unstable
,Matching_Level_Unstable
,ISO_IEC_15415_Unstable
,ISO_IECTR_29158_AIM_DPM_1_2006_Unstable
,SAE_AS9132_Unstable
:BIT;
END_STRUCT
END_TYPE
DUT_SR750_PN_InData_Term8 

こちらもSR-750の環境状態を示す構造体です。

TYPE DUT_SR750_PN_InData_Term8 :
STRUCT
MatchingLevel
,ISO_IEC15415_Grade
,ISO_IEC_TR29158_Grade
:UINT;
END_STRUCT
END_TYPE
DUT_SR750_PN_InData_Term9 

こちらはSR-750の操作結果やエラーコードを示す構造体です。

TYPE DUT_SR750_PN_InData_Term9 :
STRUCT
ReadResultCode
,PresetResultCode
,RegisterPresetDataResultCode
,TuneResultCode
,RXTRequestResultCode
,GeneralErrorCode
:UINT;
END_STRUCT
END_TYPE
DUT_SR750_PN_InData_Term10 

こちらはSR-750のBarcodeを読み取った結果を示す構造体です。

TYPE DUT_SR750_PN_InData_Term10 :
STRUCT
ResultDataReadyCount
,ResultDataUpdateCount
,ResultDataSize
:UINT;
ResultDat:ARRAY [0..127] OF BYTE;
END_STRUCT
END_TYPE
DUT_SR750_PN_InData_Term11 

こちらはSR-750に対しエラーをクリアする構造体になります。

TYPE DUT_SR750_PN_InData_Term11 :
STRUCT
Result_Data_Latch
,ErrorClear
:BIT;
END_STRUCT
END_TYPE
DUT_SR750_PN_InData_Term12 

こちらはSR-750に対し操作要求をする構造体になります。

TYPE DUT_SR750_PN_InData_Term12 :
STRUCT
Read_Request
,Preset_Request
,Register_Preset_Data_Request
,Tune_Request
:BIT;
END_STRUCT
END_TYPE
DUT_SR750_PN_InData_Term13 

こちらはSR-750に対して操作結果をクリアする構造体になります。

TYPE DUT_SR750_PN_InData_Term13 :
STRUCT
Read_Complete_Clear
,Preset_Complete_Clear
,Register_Preset_Data_Compleite_Clera
,Tune_Comlete_Clear
,EXT_Request_Complete_Clear
:BIT;
END_STRUCT
END_TYPE
DUT_SR750_PN_InData_Term14 

こちらはSR-750に送信するBank番号の構造体になります。

TYPE DUT_SR750_PN_InData_Term14 :
STRUCT
BankNumberRegister:UINT;
END_STRUCT
END_TYPE
DUT_SR750_PN_InData_Term15 

こちらはSR-750に送信するUser Dataの構造体になります。

TYPE DUT_SR750_PN_InData_Term15 :
STRUCT
UserDataSize:UINT;
UserData:ARRAY[0..127]OF BYTE;
END_STRUCT
END_TYPE
DUT_SR750_PN_InData 

こちらは先ほど定義したSR-750から受信する構造体のまとめになります。

TYPE DUT_SR750_PN_InData :
STRUCT
Term2:DUT_SR750_PN_InData_Term2;
Term3:DUT_SR750_PN_InData_Term3;
Term4:DUT_SR750_PN_InData_Term4;
Term5:DUT_SR750_PN_InData_Term5;
Term6:DUT_SR750_PN_InData_Term6;
Term7:DUT_SR750_PN_InData_Term7;
Term8:DUT_SR750_PN_InData_Term8;
Term9:DUT_SR750_PN_InData_Term9;
Term10:DUT_SR750_PN_InData_Term10;
END_STRUCT
END_TYPE
DUT_SR750_PN_OutData 

こちらは先ほど定義したSR-750に送信する構造体のまとめになります。

TYPE DUT_SR750_PN_OutData :
STRUCT
Term11:DUT_SR750_PN_InData_Term11;
Term12:DUT_SR750_PN_InData_Term12;
Term13:DUT_SR750_PN_InData_Term13;
Term14:DUT_SR750_PN_InData_Term14;
Term15:DUT_SR750_PN_InData_Term15;
END_STRUCT
END_TYPE
DUT_SR750_PN 

最後は入出力をまとめれば完成です。

TYPE DUT_SR750_PN :
STRUCT
in AT %I*:DUT_SR750_PN_InData;
Out AT %Q*:DUT_SR750_PN_OutData;
PnIoBoxState,PnIoBoxDiag AT %I*:UINT;
END_STRUCT
END_TYPE

GVL

Global Variable ListでキーエンスSR-750と通信する変数を定義します。

{attribute ‘qualified_only’}
VAR_GLOBAL
SR750_PN:DUT_SR750_PN;
END_VAR

Program

こちらは今回の記事のプログラムです。Function Blockを初期化し、Bar Codeを読み取ります。SR-750から完成Flagがない場合、3回Retryし、それでもだめの場合はエラーStepに移行します。もしSR-750から完成Flagがきた場合、結果を変数に転送します。

PROGRAM MAIN
VAR
Result:STRING;
bRead:BOOL;
CommStatus:BOOL;
RetryCount:USINT:=3;
CurrentCount:USINT:=0;
CameraNotFailure:BOOL;
iState:UINT;
TON:TON;
bReset:BOOL;
ReadingTime:TIME:=T#1S;
Error:BOOL;
END_VAR


CommStatus:=
GVL.SR750_PN.PnIoBoxDiag=2  AND GVL.SR750_PN.PnIoBoxState=0;

CameraNotFailure:=
NOT GVL.SR750_PN.in.Term5.EXT_Request_Failure
AND NOT GVL.SR750_PN.in.Term5.Preset_Failure
AND NOT GVL.SR750_PN.in.Term5.Read_Failure
AND NOT GVL.SR750_PN.in.Term5.Register_Preset_Data_Failure
AND NOT GVL.SR750_PN.in.Term5.Tune_Failure
AND NOT GVL.SR750_PN.in.Term2.General_Error
;

CASE iState OF

0:
CurrentCount:=0;
TON(IN:=FALSE,PT:=ReadingTime);
GVL.SR750_PN.Out.Term13.Read_Complete_Clear:=TRUE;
Error:=FALSE;
IF bRead AND CommStatus THEN
iState:=5;
END_IF
5:
Result:=”;
bReset:=FALSE;
GVL.SR750_PN.Out.Term13.Read_Complete_Clear:=FALSE;
iState:=10;
10:
IF CameraNotFailure THEN
iState:=20;
ELSE
iState:=990;
END_IF

20:
GVL.SR750_PN.Out.Term12.Read_Request:=TRUE;
TON(IN:=TRUE);
IF TON.Q THEN
IF GVL.SR750_PN.in.Term4.Read_Complete AND
NOT GVL.SR750_PN.in.Term5.Read_Failure THEN
iState:=30;
ELSIF GVL.SR750_PN.in.Term5.Read_Failure THEN
iState:=200;
END_IF
TON(IN:=FALSE);
GVL.SR750_PN.Out.Term12.Read_Request:=FALSE;
END_IF
30:
MEMMOVE(
destAddr:=ADR(Result)
,srcAddr:=ADR(GVL.SR750_PN.in.Term10.ResultDat)
,n:=GVL.SR750_PN.in.Term10.ResultDataSize
);
iState:=40;
40:
GVL.SR750_PN.Out.Term13.Read_Complete_Clear:=TRUE;
IF NOT GVL.SR750_PN.in.Term4.Read_Complete THEN
GVL.SR750_PN.Out.Term13.Read_Complete_Clear:=FALSE;
iState:=0;
bRead:=FALSE;
END_IF;
200:
CurrentCount:=CurrentCount+1;
IF CurrentCount > RetryCount THEN
iState:=991;
ELSE
iState:=20;
END_IF;
990,991:
Error:=TRUE;
bRead:=FALSE;
IF bReset THEN
iState:=0;
END_IF;

END_CASE

GVL.SR750_PN.Out.Term11.ErrorClear:=bReset OR (iState=200);

Link Input/Output

各SlotのProcess Input/OutputとUser Programの変数とLinkすることを忘れずに。

Download

最後はActivate ConfigurationでプロジェクトをRuntimeにDownloadします。

OKで進みます。

TwinCATをRun Modeに切り替えます。

Start

最後はStartボタンをクリックしRuntimeを開始します。

Result

SR-750では2次元コードを読み取れますね。

PnIoBoxState=2で、TwinCAT3とSR750間のProfinet通信が成立したことも確認できました。

PnIoBoxDiag=0で、TwinCAT3とSR750間のProfinet通信が成立したことも確認できました。

こちらの動画からSR750が読み取り失敗した場合の処理を確認できます。

Beckhoff.Using Profinet to communicate with Profinet SR-750(Error Case)

こちらの動画からSR750が読み取り失敗、そしてRetryし成功した場合の処理を確認できます。

Beckhoff.Using Profinet to communicate with Keyence SR-750(Retry and OK)

こちらの動画からSR750が読み取り成功した場合の処理を確認できます。

Beckhoff.Using Profinet to communicate with Profinet SR-750(Normal)

Download Project

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

https://github.com/soup01Threes/TwinCAT3/blob/main/TwinCATWithSR750_PN.tnzip

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

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

フォローする