この記事はBeckhoff C6920とIFM のAL1320 Ethernet/IP IO-Link MasterでEthernet/IP ネットワークを構築、そして同じIFM社のIO LINK Interface付きOGD592 Photoelectric 距離センサー同時に、0からプロジェクトを作成します。注目するのはもちろんIFM社のAL1320 Ethernet/IP IO-Link Masterですが、TwinCAT3がProcess I/Oを自由Mapping・アプリケーションにより自由でセットアップできるところは他のメーカーにはないメリットです。
よろしくお願いします。
Thanks!
この記事が出来上がるのはベッコフ日本法人ベッコフオートメーション株式会社さまとifm efector co. ltd.さまから機材を貸してくださったおかけです。誠にありがとうございます。
ベッコフ日本法人ベッコフオートメーション株式会社
IPC6920-005はベッコフ日本法人ベッコフオートメーション株式会社さまが貸してくださったものです。Beckhoff Automationは1980 年会社設立、PCベースの制御技術をベースにしたオープンオートメーションシステム導入の先頭に立つドイツ企業です。
ベッコフ日本法人ベッコフオートメーション株式会社は、2011年に横浜に本社、2017年に名古屋オフィスを設立しました。
こちらはベッコフ日本法人ベッコフオートメーション株式会社様のホームページです。
どうぞよろしくお願いします。
https://www.beckhoff.com/ja-jp/
ifm efector co. ltd.
ifmは1969年にドイツで誕生依頼”ifm-Close to you”を企業理念とする、センサのスペシャリストです。 今日では世界95ヶ国以上の拠点で従業員7000名を超える大企業になり、IoTのカギとなるIO-Linkの先駆者としても世界的に広く認知されるメーカーとなります。
こちらはIFMさまのホームページです。
どうぞよろしくお願いします。
Reference Link
Communicate With RJ71EIP91
Communicate With Omron NX-CSG320
Communicate With Schneider TM221
Communicate With Keyence KV8000
Communicate With PLCNEXT
AL1320
自動化ネットワークとITネットワークを分離
最高4個までのIO-Linkデバイスに接続
機械データ、プロセスパラメータ、診断データをコントローラに高い信頼性で伝送
EtherNet/IPインターフェースと独立したMQTT JSONインターフェース
厳しい産業環境で使用できる堅牢な外装
Ethernet/IP Port
こちらはEthernet/IP Portです。
Wiring
サイズはM12です。
Iot Port
こちらはIot Portです。
Wiring
サイズはM12です。
IO-LINK/DI/DO Port
こちらはIO-LINK/DI/DO Portです。
Wiring
サイズはM12です。
Power Supply
こちらは24V DCのPower Supply Portです。
Wiring
サイズはM12です。
OGD592
今回のOGD592 Photoelectric sensorは計測距離25 … 300 mm、 PnP タイプでOGD593 NPNはNPNタイプです。
Wiring
OGD592の配線です。
Communication
こちらはOGD592の通信仕様です。
Implementation-1
ではまずBeckhoff IPC C6920とIFM AL1320をEthernet/IP を繋がりましょう。
IFM Side
Download Configuration Tools
IFMのHomep pageからConfiguration ToolsをDownloadします。
もしAccountがない方は先に登録してください(無料なので)。
Poilcyに同意し、ToolsをDownloadします。
Configuration ToolsがDownloadされました。
Installation
ZIPを解凍しSetup.msiをクリックしツールをインストールします。
Nextします。
ライセンス同意し、Nextします。
Installします。
しばらく待つと、完成です!
Config IP
IFM AL1320のIP Addressを設定します。先程インストールしたEthernet Device Configuration Toolsを起動します。
Ethernet Device Configuration Toolsが起動しました。
Options>DCP Configurationをクリックします。
AL1320と接続してるEthernet Interfaceを選び>OKします。
Search DevicesをクリックしデバイスをScan始めます。
見つかりました。いまのIPは192.168.0.151ですね。
右クリックし>Set IP Addressします。
今回の構成に合わせて192.168.250.151にします。
もう一度ScanしてIP変更されたか確認しましょう。
よい、問題がなさそうですね。
Download EDS
次はIFM HPからEDS FileをDownloadします。
DownloadされたFileを解凍すればokです。これらのEDS FileはTwinCAT側で使用しますので。
TwinCAT Side
次はTwinCAT側を構築します。
Select Target
IPCの接続を設定します。SYSTEM>Choose Targetします。
Search(Ethernet)します。
IPCのIPアドレスを入れ、Enter Host Name/IP ButtonでIPCを検索します。
検索結果からIPCを選び>Add Routeします。
Secure ADSのOptionを入れ、UserとPasswordを入力>OKします。
Connectedの列にこのICONが表示されればOKです。
CloseでAdd Route Dialong画面を閉じます。
先程接続設定したIPCを選び>Okします。
Add Ethernet/IP Scanner
次はTwinCAT3でEthernet/IP Scannerを追加します。I/O>Devices>Add New Itemします。
Ethernet/IP >Ethernet/IP Scannerを選び>Okします。
Ethernet/IP Netoworkに接続してるEthernet/IP を設定してください。
念のため、もう一度確認しましょう。
Configure IP
SettingsのTab開き>F800.21とF800.22のFieldにIPとNetwork Maskを入れてください。
Configure The task
Sync TaskのTabを開き>Special Sync TaskのOptionを選び>Create new I/O Taskします。
Ethernet/IP のTask名入力し>Okします。
これで構築OK。
Import EDS File
先程追加したScannerを右クリック>Import EDS FileでIFM AL1320 を追加します。
AL1320.eds>Openします。
これでImport完成です。
Add AL1320
次はIFM AL1320をEthernet/IP Networkに追加します。Scanner>右クリック>Add New Itemします。
ifm electronic >IO-LINK Master DL EIP xxxを選び>Okします。
これでOKです。
Change IP
AL1320のIP Addressを変更します。
Box1右クリック>Change Ip Addressします。
今回のTutorialの設定するIP Addressに合わせましょう。
IP設定できれば、Box1のICONが変わるはずです。
Config the IO-LINK
Box1をダブルクリックし、AL1320のPort設定を行います。
Config InstanceのTabで各Portの細かい設定ができます。
いまはParamID 30,130,230をIO-LINK Port・Digital Input Port・Digital Output Portとして設定しています。
Activate Config
Activate ConfigurationでHardware ConfigurationをIPCにDownloadします。
OKで進みます。
もしライセンスが足りないならYesでTrialライセンスを入力します。
OKでTwinCAT RuntimeをRun Modeにします。
Result
Input Dataを見るとデータが入るようになりました。
Implementation-2
次はBeckhoff TwinCAT側はプログラムを組み、IFMのIO-LINK SUPPORT距離センサーも同時に接続してみます。AL1320はInput Assembly102、Output Assembly151、Port0=IO-LINK、Port1=デジタル入力、Port2=デジタル出力の設定になります。
IFM Side
IO-LINK Gateとして使用する前にまずAL1320 In/OutのAssembly やIO -LINK デバイスOGD592のData Mappingを把握する必要があります。
AL1320
Input Assembly 102
こちらは今回記事で使用するInput Assembly102です。
Byte0..1
Byte0..1は各PortのPin4・Pin2状態です。
Byte2..3
Byte2..3は各Portが短絡やOverloadになったか、電源供給供給に問題ないかを取得できます。
Byte 4..5 / 6..7 /8..9/10..11
次は各Portの細かい情報です。IOLINK Modeとして稼働してるか、エラーの情報など。
Byte From 12…
Byte12からは各PortのIO-LINKデータになります。.
n=2,4,8,16,32でパラメータ [Process_Data_Length] により変わります。
Output Assembly 151
こちらは今回記事で使用するInput Assembly151です。
Byte0
Byte0は各Portをデジタル出力として使用するときの制御Bitです。
True=該当するPortをTrueに出力します。
Bye From 2 …
Byte2からは各PortのIO-LINK データ出力になります。
n=2,4,8,16,32でパラメータ [Process_Data_Length] により変わります。
OGD592
Input Mapping
TwinCAT Side
Add PLC
PLC>Add New ItemでPLCを追加します。
Standard PLC Projectを選び>Addします。
PLCが追加されました。
Add Connections
AL1320のConnectionを追加します。Append IO Connection>Exclusive Owner IOをします。
EDS File Baseで変数を作りますか?Yesで進みます。
Connectionが追加されました。
Check Config
Connection 1をダブルクリックします。
InputのConnection Portは102、140BytesでOutputはPort151、130 Bytesになっています。
それらの数字は先程IFM AL1320のManualから見つかったAssembly 番号などとは一致しています。
Program
次はプログラムです。
DUT
DUT_ifm_AL1320_Port_Mapping_DI_Data
Input AssemblyのByte0-1のデータです。
TYPE DUT_ifm_AL1320_Port_Mapping_DI_Data : STRUCT //Signal level on pin 4 of the IO-Link port,1=High X01_Pin4 :BIT; X02_Pin4 :BIT; X03_Pin4 :BIT; X04_Pin4 :BIT; Reserved_1 ,Reserved_2 ,Reserved_3 ,Reserved_4 :BIT; //Signal level on pin 2 of the IO-Link port,1=High X01_Pin2 :BIT; X02_Pin2 :BIT; X03_Pin2 :BIT; X04_Pin2 :BIT; Reserved_5 ,Reserved_6 ,Reserved_7 ,Reserved_8 :BIT; END_STRUCT END_TYPE |
DUT_ifm_AL1320_Port_Mapping_PQI
Input AssemblyのByte 4..5 / 6..7 /8..9/10..11のデータです。
TYPE DUT_ifm_AL1320_Port_Mapping_PQI : STRUCT IOL_Mode :BIT; //1=IO-Link NotConnectied :BIT; //1=Not Connected InvaildData :BIT; //1=InvaildData WrongID :BIT; WrongCycleTime :BIT; WrongInputLength :BIT; WrongOutputLength :BIT; DiagnosisInCome :BIT; //1=New Event Reserved_1 ,Reserved_2 ,Reserved_3 ,Reserved_4 ,Reserved_5 ,Reserved_6 ,Reserved_7 ,Reserved_8 :BIT; END_STRUCT END_TYPE |
DUT_ifm_AL1320_Port_Mapping_Status_Info
Input AssemblyのByte2-3のデータです。
TYPE DUT_ifm_AL1320_Port_Mapping_Status_Info : STRUCT X01_Short_OL :BIT; X02_Short_OL :BIT; X03_Short_OL :BIT; X04_Short_OL :BIT; Reserved_1 ,Reserved_2 ,Reserved_3 ,Reserved_4 :BIT; AUX_PWR :BIT; //1=UA Available, PWR_Sensor :BIT; //1=US Available, Reserved_5 ,Reserved_6 ,Reserved_7 ,Reserved_8 ,Reserved_9 ,Reserved_10 :BIT; END_STRUCT END_TYPE |
DUT_ifm_AL1320_Port_Mapping_Output
TYPE DUT_ifm_AL1320_Port_Mapping_Output : STRUCT TYPE DUT_ifm_AL1320_Port_Mapping_Output :STRUCT X01 :BIT; X02 :BIT; X03 :BIT; X04 :BIT; Reversed_1 :BIT; Reversed_2 :BIT; Reversed_3 :BIT; Reversed_4 :BIT; Reversed_5 :BIT; Reversed_6 :BIT; Reversed_7 :BIT; Reversed_8 :BIT; Reversed_9 :BIT; Reversed_10 :BIT; Reversed_11 :BIT; Reversed_12 :BIT; END_STRUCTEND_TYPE END_STRUCT END_TYPE |
DUT_ifm_AL1320
そして先程定義したDUTをまとめて再定義します。
TYPE DUT_ifm_AL1320 : STRUCT DIData AT %I*:DUT_ifm_AL1320_Port_Mapping_DI_Data; StatusInformation AT %I*:DUT_ifm_AL1320_Port_Mapping_Status_Info; PQIs AT %I*:ARRAY[1..4] OFDUT_ifm_AL1320_Port_Mapping_PQI; DQData AT %Q*:DUT_ifm_AL1320_Port_Mapping_Output;END_STRUCT END_TYPE |
DUT_ifm_ODG592_Input
次はOGD592光電距離センサのINPUT データです。
TYPE DUT_ifm_ODG592_Input : STRUCT ObjectDistance :INT; Reserved_1 :INT; Reflectivity :INT; DevicesStatus :DUT_ifm_ODG592_DeviceStatus; END_STRUCT END_TYPE |
DUT_ifm_ODG592_DeviceStatus
Device Statusだけは詳しくBitに分けて定義します。
TYPE DUT_ifm_ODG592_DeviceStatus : STRUCT OUT1 :BIT; OUT2 :BIT; Reserved_1 ,Reserved_6 :BIT; sts1 ,sts2 ,sts3 ,sts4 :BIT; Reserved_7 ,Reserved_8 ,Reserved_9 ,Reserved_10 :BIT; END_STRUCT END_TYPE |
DUT_ifm_ODG592
最後はまとめて一つのDUTにします。
TYPE DUT_ifm_ODG592 : STRUCT in AT %I* :DUT_ifm_ODG592_Input; END_STRUCT END_TYPE |
GVL
GVLでASL1320とOG592の変数を宣言します。
{attribute ‘qualified_only’} VAR_GLOBAL fim_AL1320_Box1 :DUT_ifm_AL1320; OG592_1 :DUT_ifm_ODG592; END_VAR |
Re-Mapping
次はRe-Mappingです。IFM HPからDownloadされたAL1320 EDS FileからDefaultに作成された変数をByteだけで、TwinCAT3は全部自由にアプリケーションに合わせて変数にすることができます。
Input
まずInput Dataをすべて選び>Removeで削除します。
Okで進みます。
Byte0-1 Digital Input Status
Inputsを右クリック>Add New Itemします。
先Byte0-1はDigital Input Data Statusで、Wordを選び>OKします。
これでOk。
Byte2-3 Status Information
同じくByte2-3のStatus Information変数を作成します。
変数名を入れ>Wordを選択>OKします。
それでOk。
Byte 4..5 / 6..7 /8..9/10..11 PQI
次はPQIです。
Port4が4つありますので、Byteを選び>Create Array Typeします。
2次元配列を定義します。1..4:は4つのPort、0..1は各Portは2 Bytesのデータ。
よし、これでOK。
Byte From 12 IO LINK Data
最後はByte 12からのIO LINK Dataです。
同じくArrayを定義し、32Byteのデータを指定します。
残りのPort2-4も同じように作成しましょう。
最後はSettings のところでInput Data Lengthが140 Bytesになってるか確認してください。
Link-Input
今度はInputs変数をUser programと紐つけます。
DI
まずはDigital Input Statusです。
StatusInformation
次はStatus Informationです。
PQI
PQI[x,0,x,1を選び、各PortのStatus変数と紐つけましょう。]
IOLINK-Object Distance
最後はIO-LINK Object データです。
Word0はDistanceです。
IOLINK-Recflectivy
Word4はRecflectivyです。
IOLINK-Device Status
Word7はDevice Statusです。
Link-Output
次はOutputです。Byte0しか使わないので。
MAIN
プログラムはIFM AL1320とOGD592の状態Checkとデジタル出力を1sことON/OFFする簡単なものです。
PROGRAM MAIN VAR Distance:INT; TON :TON; iStep:INT; END_VAR Distance:=-9999; IF NOT GVL.ifm_AL1320_Box1.PQIs[1].InvaildData AND NOT GVL.ifm_AL1320_Box1.PQIs[1].NotConnectied AND NOT GVL.ifm_AL1320_Box1.DIData.X01_Pin2 THEN Distance:=GVL.OG592_1.in.ObjectDistance; END_IF; CASE iStep OF 0: TON(in:=TRUE,PT:=T#1S); GVL.ifm_AL1320_Box1.DQData.X03:=TRUE; IF TON.Q THEN iStep:=1; TON(IN:=FALSE); END_IF; 1: TON(in:=TRUE,PT:=T#1S); GVL.ifm_AL1320_Box1.DQData.X03:=FALSE; IF TON.Q THEN iStep:=0; TON(IN:=FALSE); END_IF; END_CASE |
Result
こちらが結果です。距離データも受信され、1sことに出力をOFF/ONします。
Communication OK
https://youtube.com/shorts/b7K1-3DSvXY
OGD592 Operation
https://youtube.com/shorts/el_x-TrEEbw
Source Code
こちらのLinkでProjectをダウンロードできます。
https://github.com/soup01Threes/TwinCAT3/blob/main/TwinCAT_IFM_EIPAL1320_Part1.tnzip