WAGO#BALLUFFのIO-LINK HUB BNI IOL-728-S51-P012と接続しよう

今回の記事ではWAGO社の750-8215を使用し、BALLUFF社のBNI IOL-728-S51-P012と繋いで、Codesysプログラムと画面を作成します。

さ、FAを楽しもう。


Reference Link

Wago#750-1657 4ポートIO-Link マスターを使ってみよう

BNI IOL-728-S51-P012?

今回使用するのはBalluff社のBNI IOL-728-S51-P012 IO-LINK HUBです。このデバイスは以下の特徴があります。

  • IO-Link センサ/アクチュエータハブ
  • インタフェース
  • IO-Link 1.1
  • 電源電圧 Ub
  • 18 ~ 30.2 VDC
  • 接続部(COM 1)
  • M12x1-オス, 4-ピン, A-コーディング済
  • デバイス接続部
  • 8x M12×1-ソケット, 5-ピン, A-コーディング済
  • アナログ入力
  • 8x アナログ、電圧/ アナログ、電流
    (0 ~ 10 V/-10 ~ 10 V/0~5 V/-5 ~ 5 V/5 ~ 10 V/4 ~ 20 mA/0 ~ 20 mA)

IOLINK HUB?

デジタル入力/出力およびアナログ入力用の IO-Link ハブ(バリエーションによる)には、自由に設定可能なポートが 8 つあります。

上位のマスタモジュールとの接続は IO-Link プロトコルで行われます。デジタルまたはアナログ信号を記録し、IO-Link インタフェース経由で転送する、または IO-Link 経由で送られてくるデジタル制御信号を接続されたアクチュエータに転送する。

LED

こちらはBNI IOL-728-S51-P012のLED説明です。

Wiring

こちらはBNI IOL-728-S51-P012?の配線図です。

2線式の接続コンセプト

2線式電流センサー(4~20mA)は、センサー供給ラインと信号ラインが共通です。センサーの出力は、構成に応じてピン2またはピン4に接続できます。

3線式の接続コンセプト

シングルエンド・モード(非対称)では、信号をピン2/ピン4とピン3の間に印加する必要があります。このモードは3線式センサーに使用できます。

4線式の接続コンセプト

差動モードでは、信号は2番ピンと4番ピンの間に印加する必要があります。この動作モードは、差動出力ドライバ(信号用に独立した0 V)を持つセンサに使用できます。これらのセンサーでは、信号が独自の基準電位(output-)を持つため、GNDラインでの電圧降下の影響を避けることができます。

Implementation

ここからIO-LINK HUB・CODESYS・WAGO 750-1657の構築をやりましょう。

Download IODD FILE

BalluffのHPからBNI IOL-728-S51-P012のIODD FILEをDownloadしてください。

https://assets.balluff.com/WebBinary1/ST_IODD_BNI_IOL_728_S51_P012_DRF_952475_AA_000.zip

WAGO Side

最初にWAGOのIO-LINKマスターを設定します。

Configure IO-Link Master

WAGO IO CHECKを起動し、750-1657と接続します。そのあと右クリック>Settingを開きます。

前回の記事にも紹介したWAGO IO-Link Toolが起動しました。

Set Data Frame

Data Frameをクリックし、750-1657のProcess Dataサイズを設定します。

今回の記事では最大の48Bytesに設定します。

今回WAGOの750-1657とBNI IOL-728-S51-P012間はPORT1で接続しています。

Connect to IO-LINK Master

次は750-1657 IO-LINKマスターの設定を行います。

Port Configuration

IOODsボタンをクリックします。

Importをクリックし、先程DownloadしたIODD FILEを選択しましょう。

Configure Parameters

今回はBNI IOL-728-S51-P012のパラメータ設定を行います。Show IO-Link Deviceボタンをクリックします。

これでBNI IOL-728-S51-P012のパラメータが表示されました。

General Device Settings

ConnectボタンをクリックしPORT1とつながっているBNI IOL-728-S51-P012と接続します。

Analog Mode

Analogモードを0-10vに設定します。

Pin Assignment

Pin設定はPin2にします。

Process Data Format

Data Formatは電圧のRawデータをそのままIO-LINKマスターに返します。

Resolution

分解能は最大の16Bitに設定します。

Process Data Monitor

次はWAGO IO-Link ToolのProcess Data監視機能を使って、BNI IOL-728-S51-P012の現在データを確認していきましょう。

Read Proces DataのCheckboxを入れます。

Done!それだけで現在BNI IOL-728-S51-P012のProcess Dataを確認できます。

Codesys Side

次はCodesys 側を構築します。

Configure IO-Link Master

K-Busに750-1657(48Bytes)を追加します。

DUT

こちらはBNI IOL-728-S51-P012から受信したIO-LINKデータをScalingするための構造体です。

TYPE stMotorParameters :
STRUCT
rRawLower :REAL:=0.0;
rRawUpper :REAL:=10.0;
rEngineeringUnitLower :REAL:=0.0;
rEngineeringUnitUpper :REAL:=10.0;
END_STRUCT
END_TYPE

Function Block

こちらはBNI IOL-728-S51-P012から受信したIO-LINKデータをScalingするプログラムです。

  • inModuleパラメータは直接WAGO社の750-1657モジュール構造体を渡します
  • iByteOffsetパラメータは750-1657モジュールの取得データOFFSET
  • GetProcessInByte 関数を使用し750-1657のプロセスデータを取得する
FUNCTION_BLOCK fbRawDataScaling
VAR_INPUT
inModule:WagoAppIOLink.WagoTypesModule_75x_657.I_Module_75x_657;
iByteOffset :UINT;

END_VAR
VAR_OUTPUT
rValue:REAL;
END_VAR
VAR_IN_OUT
stMotorParameters: stMotorParameters;
END_VAR

VAR
arrBytes:ARRAY[0..2]OF BYTE;
wTemp:WORD;
rRawValue:REAL;
END_VAR

//Read the current
arrBytes[1]:=inModule.GetProcessInByte(ByteNo:=iByteOffset);
arrBytes[0]:=inModule.GetProcessInByte(ByteNo:=iByteOffset+1);
//
MEMUtils.MemCpy(
ADR(wTemp),
ADR(arrBytes[0])
,2
);
rRawValue:=TO_REAL(wTemp)/1000.0;

rValue:=((stMotorParameters.rEngineeringUnitUpper-stMotorParameters.rEngineeringUnitLower)
/(stMotorParameters.rRawUpper-stMotorParameters.rRawLower))*
(rRawValue-stMotorParameters.rRawLower)+stMotorParameters.rEngineeringUnitLower;

POU

最後はさきほど作成したFBをを呼び出し、Scalingの上下限を設定し、IO-LINK HUBから守ろったデータを正しい値を取得しましょう。

PROGRAM MAIN
VAR
fbDevices:fbRawDataScaling;
END_VAR
VAR CONSTANT
ciUnitNumber:INT:=0;
ciIOLINKPort:UINT:=0;
END_VAR


fbDevices(
inModule:=IoConfig_Globals.IOLINk1
,iByteOffset:=(ciIOLINKPort*2)+8
,stMotorParameters:=gRetainParamaters.stMotors[ciUnitNumber]
);

gHMI.stMotor0DisplayY.rEngineeringUnitLower:=gRetainParamaters.stMotors[ciUnitNumber].rEngineeringUnitLower;
gHMI.stMotor0DisplayY.rEngineeringUnitUpper:=gRetainParamaters.stMotors[ciUnitNumber].rEngineeringUnitUpper;
gData.udtMotorDatas[ciUnitNumber,0].rCurrentValue:=fbDevices.rValue;
gHMI.stMotor0DisplayY.rDisplayValue:=fbDevices.rValue;

シェアする

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

フォローする