今回の記事では三菱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
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 |
OFF | Timeoutや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
OFF | IO-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