Project#Mitsubishi QJ61BT11 x Balluff CC-LINK IOLink Master

今回の記事では三菱Q CPUのCC-LINKモジュールQJ61BT11とBALLUFFのCC-LINK Slave IO-LINK Master BNI CCL-502-100-Z001と通信させIO-LINK Masterを構築します。よろしくお願いします。

BNI CCL-502-100-Z001では実際各文字にも自分の意味があります。

  • BNI=Balluff ネットワーク インタフェース
  • CCL=CC-CLinkインタフェース
  • 502=Function Block,IP 67+IO-Link,最大16IN/OUT、4つのIO-LINK 接続
  • Z001=バージョン

Thanks!

この記事はBalluff JapanからBNI CCL-502-100-Z001の貸出しのおかけです。

よろしくお願いします!

Reference Link

PLCNEXT#Smart Element AXL SEIOL4 IO-LINK Master Demo
Project#Beckhoff TwinCAT3 x TF6281 EthernetIP x IOLINK
Project#Codesys x Profinet x IO-LINK
Wago#750-325 CC-Link Coupler x QJ61BT11 CC-Link Network構築する

Video

Japanese Version

English Version

LED Status

BalluffのBNI CCL-502-100-Z001にはModule Status表示用のUS/UA、モジュール状態を示すRUN/ERR LED、あと各Portの状態のLEDもあります。

US

電源供給OK
電源供給<18v
OFF電源供給ありません

UA

電源供給OK
電源供給<18v
OFF電源供給ありません

Run

CC-Link Master と通信OK
OFFTimeoutやCC-Link通信問題ある

Error

赤点灯通信エラー
赤点滅CC-LINK Versioin問題あり・モジュール設定変更された
OFF正常

LED- SIO Input Mode Pin4/Pin2

OFF入力信号=0
黄色入力信号=1
PIN1/3短絡

LED- SIO OutputMode Pin4/Pin2

OFF出力信号=0
黄色出力信号=1
PIN1/3短絡

LED- SIO IO-LINK Mode Pin4

OFFIO-LINK Enableになっていない
緑点灯IO-LINKが有効になってる、なおかつ通信してる
緑点滅IO-LINKが有効になったが、通信してない

Ports

Portは上から下、左から右のように数えます。Port0,1,4,5.は普通の入出力、Port2,3,6,7は入出力、なおかつIO Channelまで設定できます。

CC-LINK BUS In

以下はCC-Link Bus入力のPin図で、M12, A-coded、 maleです。

CC-LINK Bus Out

以下はCC-Link Bus出力のPin図で、M12, A-coded、 femaleです。

Connecting sensor/Actuators

以下は入出力のPin図で、M12, A-coded、 femaleです。

Display

BNI CCL-502-100-Z0001ではモジュールに表示がついており、現在のモジュール状態や設定を確認・変更することができます。DefaultではStation Address=3、通信速度は10Mbps、CC-Link Profile P1(3局占有)になります。

Communication

BNI CCL-502-100-Z01はCC-Link Ver1とVer2両方もSupportします。

Overview

Profile 

BNI CCL-502-100-Z001は5種類のProfileがあり、選択するProfileによりCCLINKのVersion、占有局数、拡張サイクルが変わります。

Default設定は、局番は3、通信速度は10Mbps、CC-CLINK ProfileはP1です。

Mappings

今回使用するProfileはP5です。

Rxm0-F/Rym0-F

例えば500から始まるなら、X500-X50F、Y500-Y50Fまでになります。

Rxm+1 0-F/Rym+1 0-F

例えば500から始まるなら、X510-X10F、Y510-Y51Fまでになります。

Rxm+2 0-F/Rym+2 0-F

例えば500から始まるなら、X520-X52F、Y520-Y52Fまでになります。

Rxm+3 0-F/Rym+3 0-F

例えば500から始まるなら、X530-X54F、Y530-Y54Fまでになります。

Rx(m+n) 0-F/R(ym+n) 0-F

例えば500から始まるなら、X770-X77F、Y770-Y77Fまでになります。

今回はP5を設定しましたので、X500から始まり、50+27=77でX770になります。

RWr RWw

P5を設定しましたので、Remote input RegisterはW500からW50Fまでのように考え方です。

Implementation

Balluff Side

通信速度は5M、Profile=P5、Port0,1は出力、4つのPortもIO-LINK portにします。

GXWORKS Side

ではまず三菱側から始めます。

Hardware Configuration

CC-LinkモジュールをHardware Configurationに入れます。

Parameter>PLC Parameterをクリックします。

I/O AssignmentのTab開いて、CC-LINKモジュールが挿入してるSlotにTypeをIntegentを選択>Pointsは32 Points、そしてStartXYは0100になります。そのStartXYは次のCCLINK構築にも使います。

CC-Link Configuration

Parameter>Network Parameter>CC-CLINKを開きます。

Start I/O No.は先Hardware ConfigurationのStepで設定した番号と同じです。なので今回は0100です。他のRX、RYなどもアプリケーションに合わせて設定しましょう。

Balluff Station setup

Balluff のCC-LINK IO Link MasterをCC-LINK Networkに設定します。

Station Information SettingsのStation Information をクリックします。

今回はBalluffをProfile P5 に設定します。

P5はVer2なので、StationはStation Typeにします。Stations occupied とExtended CyclesもP5に合わせましょう。

Programming

次はプログラムを作成します。自分はメーカに限らず構造体、Function、STで使用します。このSampleで自分が作った構造体やFunction Blockもそのまま使用できますので。

Structured Data Types

D_QJ61BT11N_IN

こちらは前回のWago CC-LINK Couplerと同じ構造で受信したときの信号。

x0ModuleError Bit
x1HostDataOK Bit
x2NotUsed Bit
x3OtherStLink Bit
x4NotUsed Bit
x5NotUsed Bit
x6NotUsed Bit
x7NotUsed Bit
x8NotUsed Bit
x9NotUsed Bit
xANotUsed Bit
xBNotUsed Bit
xCNotUsed Bit
xDNotUsed Bit
xENotUsed Bit
xFReady Bit
x10NotUsed Bit
x11NotUsed Bit
x12NotUsed Bit
x13NotUsed Bit
x14NotUsed Bit
x15NotUsed Bit
x16NotUsed Bit
x17NotUsed Bit
x18NotUsed Bit
x19NotUsed Bit
x1ANotUsed Bit
x1BNotUsed Bit
x1CNotUsed Bit
x1DNotUsed Bit
x1ENotUsed Bit
x1FNotUsed Bit
DUT_BNI_CCL_502_100_Z001_P1_5_Rx

こちらはBalluffのデバイスをManualのMappingに合わせて定義します。P1からP5のProfile使用でき、よく使えそうのはIOLINK_Chx_EstablishedとIOLINK_Chx_DataValidで、xはChannel番号0-3まで、IOLINK_Chx_EstablishedはIO-LINK通信OkでIOLINK_Chx_DataValidはそのデータが有効。Port0_In0からPort7_InFまでは入力信号です。

Port0_In0 Bit
Port0_In1 Bit
Port1_In2 Bit
Port1_In3 Bit
Port2_In4 Bit
Port2_In5 Bit
Port3_In6 Bit
Port3_In7 Bit
Port4_In8 Bit
Port4_In9 Bit
Port5_InA Bit
Port5_InB Bit
Port6_InC Bit
Port6_InD Bit
Port7_InE Bit
Port7_InF Bit
Port0_InOut0_Diagnostic Bit
Port0_InOut1_Diagnostic Bit
Port1_InOut2_Diagnostic Bit
Port1_InOut3_Diagnostic Bit
Port2_InOut4_Diagnostic Bit
Port2_InOut5_Diagnostic Bit
Port3_InOut6_Diagnostic Bit
Port3_InOut7_Diagnostic Bit
Port4_InOut8_Diagnostic Bit
Port4_InOut9_Diagnostic Bit
Port5_InOutA_Diagnostic Bit
Port5_InOutB_Diagnostic Bit
Port6_InOutC_Diagnostic Bit
Port6_InOutD_Diagnostic Bit
Port7_InOutE_Diagnostic Bit
Port7_InOutF_Diagnostic Bit
Port0_Diagnostic Bit
Port1_Diagnostic Bit
Port2_Diagnostic Bit
Port3_Diagnostic Bit
Port4_Diagnostic Bit
Port5_Diagnostic Bit
Port6_Diagnostic Bit
Port7_Diagnostic Bit
Us_UnderVoltage Bit
Ua_UnderVlotage Bit
bRx_x2A Bit
bRx_x2B Bit
bRx_x2C Bit
bRx_x2D Bit
bRx_x2E Bit
bRx_x2F Bit
IOLINK_Ch0_Established Bit
IOLINK_Ch1_Established Bit
IOLINK_Ch2_Established Bit
IOLINK_Ch3_Established Bit
bRx_x34 Bit
bRx_x35 Bit
bRx_x36 Bit
bRx_x37 Bit
IOLINK_Ch0_EventFlag Bit
IOLINK_Ch1_EventFlag Bit
IOLINK_Ch2_EventFlag Bit
IOLINK_Ch3_EventFlag Bit
bRx_x3C Bit
bRx_x3D Bit
bRx_x3E Bit
bRx_x3F Bit
IOLINK_Ch0_DataValid Bit
IOLINK_Ch1_DataValid Bit
IOLINK_Ch2_DataValid Bit
IOLINK_Ch3_DataValid Bit
bRx_x44 Bit
bRx_x45 Bit
bRx_x46 Bit
bRx_x47 Bit
bRx_x48 Bit
bRx_x49 Bit
bRx_x4A Bit
bRx_x4B Bit
bRx_x4C Bit
bRx_x4D Bit
bRx_x4E Bit
bRx_x4F Bit
DUT_BNI_CCL_502_100_Z001_P1_5_Ry

こちらはBalluffのデバイスをManualのMappingに合わせて定義します。P1からP5のProfile使用でき、よく使えそうなのはIOLINK_Chx_EnableとPortx_IsOutputで、x=Port番号になります。IOLINK_Chx_Enableは該当するPortをIO-LINK Portとして使用するかどうか(True=IO-LINK Port)、Portx_IsOutputは該当するPortは出力として使用するかどうか(True=出力として使用する)になります。

Port0_Out0 Bit
Port0_Out1 Bit
Port1_Out2 Bit
Port1_Out3 Bit
Port2_Out4 Bit
Port2_Out5 Bit
Port3_Out6 Bit
Port3_Out7 Bit
Port4_Out8 Bit
Port4_Out9 Bit
Port5_OutA Bit
Port5_OutB Bit
Port6_OutC Bit
Port6_OutD Bit
Port7_OutE Bit
Port7_OutF Bit
Port0_IsOutput Bit
Port1_IsOutput Bit
Port2_IsOutput Bit
Port3_IsOutput Bit
Port4_IsOutput Bit
Port5_IsOutput Bit
Port6_IsOutput Bit
Port7_IsOutput Bit
Port8_IsOutput Bit
Port9_IsOutput Bit
PortA_IsOutput Bit
PortB_IsOutput Bit
PortC_IsOutput Bit
PortD_IsOutput Bit
PortE_IsOutput Bit
PortF_IsOutput Bit
Display_LED_Red Bit
Display_LED_Green Bit
Display_LOCK Bit
bRY_x23 Bit
bRY_x24 Bit
bRY_x25 Bit
bRY_x26 Bit
bRY_x27 Bit
bRY_x28 Bit
bRY_x29 Bit
bRY_x2A Bit
bRY_x2B Bit
bRY_x2C Bit
bRY_x2D Bit
bRY_x2E Bit
bRY_x2F Bit
IOLINK_Ch0_Enable Bit
IOLINK_Ch1_Enable Bit
IOLINK_Ch2_Enable Bit
IOLINK_Ch3_Enable Bit
bRY_x34 Bit
bRY_x35 Bit
bRY_x36 Bit
bRY_x37 Bit
IOLINK_Ch0_EventClear Bit
IOLINK_Ch1_EventClear Bit
IOLINK_Ch2_EventClear Bit
IOLINK_Ch3_EventClear Bit
bRY_x3C Bit
bRY_x3D Bit
bRY_x3E Bit
bRY_x3F Bit
bRY_x40 Bit
bRY_x41 Bit
bRY_x42 Bit
bRY_x43 Bit
bRY_x44 Bit
bRY_x45 Bit
bRY_x46 Bit
bRY_x47 Bit
bRY_x48 Bit
bRY_x49 Bit
bRY_x4A Bit
bRY_x4B Bit
bRY_x4C Bit
bRY_x4D Bit
bRY_x4E Bit
bRY_x4F Bit
DUT_BNI_CCL_502_100_Z001_P5_Rwr

こちらはBalluffのデバイスをManualのMappingに合わせて定義します。P5のProfile設定で、各IO-Link PortがIO-Linkデバイスから16Wordsのデータを受信します。

IOLINK_Ch0 Word[Signed](0..15)
IOLINK_Ch1 Word[Signed](0..15)
IOLINK_Ch2 Word[Signed](0..15)
IOLINK_Ch3 Word[Signed](0..15)
DUT_BNI_CCL_502_100_Z001_P5_Rww

こちらはBalluffのデバイスをManualのMappingに合わせて定義します。P5のProfile設定で、各IO-Link PortがIO-Linkデバイスから16Wordsのデータを送信します。

IOLINK_Ch0 Word[Signed](0..15)
IOLINK_Ch1 Word[Signed](0..15)
IOLINK_Ch2 Word[Signed](0..15)
IOLINK_Ch3 Word[Signed](0..15)
DUT_BNI_CCL_502_100_Z001_Rx3

こちらはBalluffのデバイスをManualのMappingに合わせて定義します。P1からP5のProfile設定で、モジュールからのHandshake 入力。使えそうなのは

  • InitDataProcessing、モジュールからの初期化リクエスト
  • InitDataComplete、モジュールからの初期化完了
  • ErrorStautsFlag、モジュールからのエラー状態
  • RemoteReady、モジュールからの準備OK状態
bRx_mn0 Bit
bRx_mn1 Bit
bRx_mn2 Bit
bRx_mn3 Bit
MessageSize0 Bit
MessageSize1 Bit
MessageSize2 Bit
bRx_mn7 Bit
InitDataProcessing Bit
InitDataComplete Bit
ErrorStautsFlag Bit
RemoteReady Bit
MessageTransferAccept Bit
MessageTransferHandShake Bit
bRx_mnE Bit
bRx_mnF Bit
DUT_BNI_CCL_502_100_Z001_Ry3

こちらはBalluffのデバイスをManualのMappingに合わせて定義します。P1からP5のProfile設定で、モジュールへのHandshake 出力。使えそうなのは

  • InitDataProcessing、モジュールに送る初期化処理中
  • InitDataComplete、モジュールに送る初期化完成
  • ErrorResetRequest、モジュールに送るエラーリセット
bRy_mn0 Bit
bRy_mn1 Bit
bRy_mn2 Bit
bRy_mn3 Bit
bRy_mn4 Bit
bRy_mn5 Bit
bRy_mn6 Bit
bRy_mn7 Bit
InitDataProcessing Bit
InitDataRequest Bit
ErrorResetRequest Bit
bRy_mnB Bit
MessageTransferReq Bit
MessageTransferHandShake Bit
bRy_mnE Bit
bRy_mnF Bit

FB/FUN

FB_BNI_CCL_502_Z001_HandShake
Local Label

Rx3,Ry3はモジュールとHandshake エリアになります(先程定義した構造体)。bCCLinkMasterStatusはCC-LINK Masterの状態です。CC-LINK Masterがエラー出たらデータを送っても意味がありませんので。

VAR_INPUT Rx3 DUT_BNI_CCL_502_100_Z001_Rx3
VAR_INPUT bInitIO Bit
VAR_INPUT bCCLinkMasterStatus Bit
VAR_INPUT bConfig Bit

VAR_OUTPUT    Ry3 DUT_BNI_CCL_502_100_Z001_Ry3
VAR_OUTPUT    bRemoteOK Bit

VAR       iStep Word[Signed]
Program

BalluffのManualに書いていませんが、実際モジュールにはこのような初期化プログラムが必要になります。単にモジュールから初期化リクエストがきたら、PLCからリクエストのFlagを返すだけです。

(*Auto Reset*)
Ry3.ErrorResetRequest:=Rx3.ErrorStautsFlag AND bCCLinkMasterStatus;

(*Data Initing..*)
Ry3.InitDataProcessing:=Rx3.InitDataProcessing AND bCCLinkMasterStatus AND bConfig;

(*Remote OK*)
bRemoteOK:=Rx3.RemoteReady;
FB_CONTRINEX

こちらはいつも使用するCONTRINEX IO Link Sensorです。実際のプログラムや構成は記事の始まりであるReference Link参照してください。

Local Label
VAR_INPUT IOLINKData Word[Signed](0..15)

VAR_OUTPUT HaveTags Bit
VAR_OUTPUT RFField Bit
VAR_OUTPUT NBTags Word[Unsigned]/Bit String[16-bit]


VAR_OUTPUT UID0 Word[Unsigned]/Bit String[16-bit]
VAR_OUTPUT UID1 Word[Unsigned]/Bit String[16-bit]
VAR_OUTPUT UID2 Word[Unsigned]/Bit String[16-bit]
VAR_OUTPUT UID3 Word[Unsigned]/Bit String[16-bit]
VAR_OUTPUT UID4 Word[Unsigned]/Bit String[16-bit]
VAR_OUTPUT UID5 Word[Unsigned]/Bit String[16-bit]
VAR_OUTPUT UID6 Word[Unsigned]/Bit String[16-bit]
VAR_OUTPUT UID7 Word[Unsigned]/Bit String[16-bit]
Program

CONTRINEXのMappingに合わせて作成します。

D0:=IOLINKData[0];

RFField:= (D0&2#0001_0000_0000_0000) <> 0 ;
HaveTags:= (D0&2#0010_0000_0000_0000) <> 0 ;

NBTags:= SHR((D0&2#0000_1111_0000_0000),8);

UID0:=D0&2#0000_0000_1111_1111;

D0:=IOLINKData[1];
UID1:=SHR((D0&2#1111_1111_0000_0000),8);
UID2:=SHR((D0&2#0000_0000_1111_1111),8);

D0:=IOLINKData[2];
UID3:=SHR((D0&2#1111_1111_0000_0000),8);
UID4:=SHR((D0&2#0000_0000_1111_1111),8);

D0:=IOLINKData[3];
UID5:=SHR((D0&2#1111_1111_0000_0000),8);
UID6:=SHR((D0&2#0000_0000_1111_1111),8);

D0:=IOLINKData[4];
UID5:=SHR((D0&2#1111_1111_0000_0000),8);

;

Global Label

次はGlobal LabelでIO Dataを定義します。

VAR_GLOBAL CCLINK_Module1 D_QJ61BT11N_IN
VAR_GLOBAL BNI_CCL_502_Z001_1_Ry3 DUT_BNI_CCL_502_100_Z001_Ry3
VAR_GLOBAL BNI_CCL_502_Z001_1_Rx3 DUT_BNI_CCL_502_100_Z001_Rx3
VAR_GLOBAL BNI_CCL_502_Z001_1_Rx0 DUT_BNI_CCL_502_100_Z001_P1_5_Rx
VAR_GLOBAL BNI_CCL_502_Z001_1_Ry0 DUT_BNI_CCL_502_100_Z001_P1_5_Ry
VAR_GLOBAL BNI_CCL_502_Z001_1_Rwr DUT_BNI_CCL_502_100_Z001_P5_Rwr
VAR_GLOBAL BNI_CCL_502_Z001_1_Rww DUT_BNI_CCL_502_100_Z001_P5_Rww
CCLINK_Module1

最初からStartXYは0100から設定しましたのでX100を設定します。

BNI_CCL_502_Z001_1_Ry3

ManualにM+nの計算方法が乗っていて、CC-LINK Network TabでY500からはRemote 出力に設定しましたので、モジュールのHandshake Dataは500+270=Y770から始まります。

BNI_CCL_502_Z001_1_Rx3

ManualにM+nの計算方法が乗っていて、CC-LINK Network TabでX500からはRemote 出力に設定しましたので、モジュールのHandshake Dataは500+270=X770から始まります。

BNI_CCL_502_Z001_1_Rx0

CC-LINK Network TabでX500からはRemote 入力に設定しましたので、モジュールの入力データはX500から始まります。

BNI_CCL_502_Z001_1_Ry0

CC-LINK Network TabでY500からはRemote 入力に設定しましたので、モジュールの入力データはY500から始まります。

BNI_CCL_502_Z001_1_Rwr

CC-LINK Network TabでW500からRemote Regisiter入力に設定しましたので、モジュールの入力データはW500から始まります。

BNI_CCL_502_Z001_1_Rwy

CC-LINK Network TabでW600からRemote Regisiter入力に設定しましたので、モジュールの入力データはW600から始まります。

Scan 

長くなりますが、最後はMainのScanプログラムですね。

Local Label

HandshkreとCONTRINEXのIO-LINKデバイス Function Block のInstanceを定義します。

VAR HandShake FB_BNI_CCL_502_Z001_HandShake
VAR bConfig Bit

VAR RWM1 FB_CONTRINEX
Program

最初は各Portの設定を行います。Por0,1は出力し、4つのIO-LINK portも有効します。

IF NOT bConfig THEN
BNI_CCL_502_Z001_1_Ry0.Port0_IsOutput:=TRUE;
BNI_CCL_502_Z001_1_Ry0.Port1_IsOutput:=TRUE;
BNI_CCL_502_Z001_1_Ry0.IOLINK_Ch0_Enable:=TRUE;
BNI_CCL_502_Z001_1_Ry0.IOLINK_Ch1_Enable:=TRUE;
BNI_CCL_502_Z001_1_Ry0.IOLINK_Ch2_Enable:=TRUE;
BNI_CCL_502_Z001_1_Ry0.IOLINK_Ch3_Enable:=TRUE;
bConfig:=TRUE;
END_IF;


RWM1(
IOLINKData:=BNI_CCL_502_Z001_1_Rwr.IOLINK_Ch2
,HaveTags:=M0
,NBTags:=D10
,UID0:=D11
,UID1:=D12
,UID2:=D13
,UID3:=D14
,UID4:=D15
,UID5:=D16
,UID6:=D17
,UID7:=D18
);


HandShake(
Rx3:=BNI_CCL_502_Z001_1_Rx3
,bConfig:=bConfig
,bCCLinkMasterStatus:=CCLINK_Module1.xFReady
,Ry3:=BNI_CCL_502_Z001_1_Ry3
);

Result

CONTRINEX Readerから一枚のRFIDを読むと、NBTags=1、そしてUIDも反映します。

CONTRINEX Readerから二枚のRFIDを読むと、NBTags=2になります。

最後は出力Y500,Y501をTrueにすると、モジュールのLEDも光りました。

Download the Project

下記のLinkからGXWORKS2のプロジェクトをDownloadしてください。

https://github.com/soup01Threes/GXWROKS/blob/main/BIN_CLL_502_100_Z001_Demo.gxw

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

シェアする

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

フォローする