こちらはTURCK社のTBEN-L5-PLC-11を使用し様々なCodesys記事を展開する第2話です。今回はTBEN-L5-PLC-11にProfinet IO Controllerを立ち上げ、同じくTURCK社のTBEN-L4‐8IOLと接続します。さ、FAを楽しもう。
Reference Link
PROFINET IO device model…
PROFINET IO デバイスの技術的なプロパティは、デバイス記述ファイルである GSDML ファイルによって定義されます。
PROFINET IO デバイスは 1 ~ n 個のスロットで構成され、1 ~ n 個のサブスロットを含むこともできます。サブスロットはサブモジュールのプレースホルダで、プロセスとのインタフェースを確立します。サブモジュールにはパラメータ、データ、診断を含めることができます。スロット0は常にデバイス・アクセス・ポイント(DAP)として予約されています。DAPはイーサネット・ネットワークへの物理インターフェースを持ち、デバイスを表します。
その他のスロットとサブスロットは、その他のデバイス機能を表す。この構造はフィールド機器の製造者によって定義される。すべてのスロットやサブスロットが物理的な機能に関連している必要はありません。スロットとサブスロッ トの割り当て、そして機能(動作モー ド、診断など)の割り当ては PROFINET コントローラのコンフィギュレーショ ンソフトウェアで行われます。
このデバイス・モデルにより、メーカーはモジュール式で柔軟な分散型フィールド・デバイスを設計できる。ユーザーは、分散型フィールドデバイスを柔軟に構成することができます。
Implemenation
Cofigure Mode
TBEN-L4‐8IOLにProfinet ControllerからIPを振り分けるにはAddressing ModeをPGM-DHCPモードに設定しましょう。
PGM-DHCP モード 600 PGM-DHCP モードでは、ゲートウェイは固定 IP アドレスが割り当てられるまで DHCP 要求を送信します。DHCP クライアントは、IP アドレスが DTM または Web サーバー経由でゲートウェイに割り当てられると、自動的に非アクティブになります。
PGM-DHCPモードを設定するにはRotaryスイッチを600に設定してください。
Download GSDML File
Profinetデバイスは同じくTurck社のTBEN-L4‐8IOLを使用しますので、HPからTBEN-L4‐8IOLのGSDML FileをDownloadしてください。
https://www.turck.us/en/product/6814082
Install the GSDML File
Codesys IDEからGSDML Fileをインストールするため、Tools>Device Repositoryをクリックします。
Installボタンをクリックします。
先ほどDownloadしたTBEN-L4‐8IOL GDSML Fileを選びましょう。
Done!GSDML FileがCodesysにインストールされました。
Configure Profinet Network
次はProfinet ネットワークを構築します。
Add Ethernet Driver
Ethernet Adapterを追加します。Deviec>右クリック>Add Deviceします。
Ethernet Adapter>Ethernetを選び、Add Deviceで進みます。
Setup Adapter
Ethernet Adapterが追加されましたが、Turck社のTBEN-L5-PLC-11にはEthernet Portが2つありますので、CodesysのProfinet IO Controllerとして使用するAdpaterを設定します。
Ethernet>General>Browseをクリックします。
アプリケーションに合わせてEthernet Adapterを設定しましょう。
Done!
Configure Profinet IO Controller
次はProfinet IO Controllerを追加します。先程追加したEthernet Adapterを右クリック>Add Deviceします。
Fieldbus>PROFINET IO>PROFINET IO Master>PN-Controllerを選び、Add Deviceで追加しましょう。
Done!PROFINET IO Controllerが追加され、General>Default Slave IP ParameterでProfinet IO デバイスの自動割り付けを設定しましょう。
下図では初めのProfinet IOデバイスのIPアドレスは192.168.13.200、そして192.168.13.254まで55ノードあります。
Configure Profinet IO Devices
今度はTBEN-L4‐8IOLを追加します。先程追加したProfinet IO Controller>右クリック>Add Deviceします。
TBEN-L4‐8IOLを追加しましょう。
Done!Station NameでProfinetのデバイス名とIPアドレスをアプリケーションに合わせて設定してください。
Login
Codesys IDEでProfinetデバイスのDevice 名やIPアドレスを設定できます。そのために、まず一回CodesysのProfinet StackをRuntimeにDownloadしましょう。
Yesで進みます。
Done!
Scan for Devices
次はProfinet Controller>右クリック>Scan for Devicesをクリックします。
TBEN-L4‐8IOLが検索できるはずなので、Station Nameでプロジェクトに設定したものと一致するようにしましょう。
Change the Profinet Devices Slot
今度は各Portの設定を変更するため、該当するSlotを右クリック>Plug Deviceします。
IN 8 BYTE/ OUT 8 BYTE(Octet)を選び>Plug Deviceをクリックします。
Done!Slot1のPort設定が変更されました。
TBEN-L4‐8IOLはIO-Linkだけじゃなく、DIDOとして構築するも可能です。
診断情報などもProfinet経由で取得可能なので、アプリケーションに合わせてDiagnosticsのSlotなどでデバイスを追加しましょう。
Result
こちらは今回記事で使用するConfigurationになります。
Program
Codesysのプログラムを組みます。
Add Library
ライブラリを追加します。
今回使用するのはCAA Memoryのライブラリです。
DUT
構造体を定義します。
DUT_Contrinex_SmartSensor_IN
こちらはContrinex社のIO-Link Sensorの入力データに合わせて作成した構造体です。
TYPE DUT_Contrinex_SmartSensor_IN : STRUCT OSS1 ,OSS2 ,TSS ,SSC1 ,SSC2 ,ALR1 ,ALR2 ,ALR3 :BIT; ScaleValue :BYTE; MeasureValue:LREAL; END_STRUCT END_TYPE |
DUT_Molex_IOLINKHub_IN
こちらはMolex社のIO-Link Hubの入力データに合わせて作成した構造体です。
TYPE DUT_Molex_IOLINKHub_IN : STRUCT i00 ,i01 ,i02 ,i03 ,i04 ,i05 ,i06 ,i07 ,i08 ,i09 ,i10 ,i11 ,i12 ,i13 ,i14 ,i15 :BIT; END_STRUCT END_TYPE |
DUT_Murr_59607_IN
こちらはMurrelektronik社のIO-Link Hub 59607の入力データに合わせて作成した構造体です。
TYPE DUT_Murr_59607_IN : STRUCT Pin4_X0 ,r0 ,Pin4_X1 ,r1 ,Pin4_X2 ,r2 ,Pin4_X3 ,r3 ,Pin4_X4 ,r4 ,Pin4_X5 ,r5 ,Pin4_X6 ,r6 ,Pin4_X7 ,r7 :BIT; DIA :WORD; ErrroPowerSupply ,ErrorTempature ,ErrorInputOutput ,GlobalStatus:BIT; END_STRUCT END_TYPE |
DUT_Murr_59607_OUT
こちらはMurrelektronik社のIO-Link Hub 59607の出力データに合わせて作成した構造体です。
TYPE DUT_Murr_59607_OUT : STRUCT Pin4_X0 ,r0 ,Pin4_X1 ,r1 ,Pin4_X2 ,r2 ,Pin4_X3 ,r3 ,Pin4_X4 ,r4 ,Pin4_X5 ,r5 ,Pin4_X6 ,r6 ,Pin4_X7 ,r7 :BIT; END_STRUCT END_TYPE |
DUT_Nassmagnet_SmartConnector_IN
こちらはNassmagnet社のSmart Connectorの入力データに合わせて作成した構造体です。
TYPE DUT_Nassmagnet_SmartConnector_IN : STRUCT ValveState ,ShortCircuitDetection ,OpenCircuitDetection ,OverHeat ,OverCurrent ,Counter1Overun ,Counter2Overrun :BIT; END_STRUCT END_TYPE |
DUT_Nassmagnet_SmartConnector_OUT
こちらはNassmagnet社のSmart Connectorの出力データに合わせて作成した構造体です。
TYPE DUT_Nassmagnet_SmartConnector_OUT : STRUCT CMD:BIT; PWM:BYTE; END_STRUCT END_TYPE DUT_OMRON_E2E_X3B4_IL3_2M_IN TYPE DUT_OMRON_E2E_X3B4_IL3_2M_IN : STRUCT MonitorData:BYTE; ControlOutput ,r0 ,r1 ,r2 ,Unstable ,TooClose ,r3 ,ERROR :BIT; END_STRUCT END_TYPE |
DUT_OMRON_E3ASHL500MN_IN
こちらはOMRON社のE3ASHL500MNの入力データに合わせて作成した構造体です。
TYPE DUT_OMRON_E3ASHL500MN_IN : STRUCT DelectValue:WORD; LightLevel:BYTE; ControlOutput1 ,ControlOutput2 ,InstabliltyAlarm ,r0 ,InsufficientAlarm ,r1 ,Warning ,ERROR :BIT; END_STRUCT END_TYPE |
DUT_OMRON_E2E_X3B4_IL3_2M_IN
こちらはOMRON社のE2E-X3B4-IL3-2Mの入力データに合わせて作成した構造体です。
TYPE DUT_OMRON_E2E_X3B4_IL3_2M_IN : STRUCT MonitorData:BYTE; ControlOutput ,r0 ,r1 ,r2 ,Unstable ,TooClose ,r3 ,ERROR :BIT; END_STRUCT END_TYPE |
GVL
TurckのIO-Link MasterとMappingするための変数をGVL内に定義します。
{attribute ‘qualified_only’} VAR_GLOBAL Port00_IN:ARRAY[0..7]OF BYTE; Port02_IN:ARRAY[0..7]OF BYTE; Port04_IN:ARRAY[0..7]OF BYTE; Port08_IN:ARRAY[0..7]OF BYTE; Port12_IN:ARRAY[0..7]OF BYTE; Port12_Out:ARRAY[0..7]OF BYTE; Port14_IN:ARRAY[0..7]OF BYTE; Port14_Out:ARRAY[0..7]OF BYTE; Baisc:ARRAY[0..3]OF USINT; Port00_Diagnostics:ARRAY[0..1]OF USINT; Port02_Diagnostics:ARRAY[0..1]OF USINT; Port04_Diagnostics:ARRAY[0..1]OF USINT; Port06_Diagnostics:ARRAY[0..1]OF USINT; Port08_Diagnostics:ARRAY[0..1]OF USINT; Port10_Diagnostics:ARRAY[0..1]OF USINT; Port12_Diagnostics:ARRAY[0..1]OF USINT; Port14_Diagnostics:ARRAY[0..1]OF USINT; Port012_Diagnostics: POINTER TO BYTE; END_VAR |
POU
今回の記事ではLD2を使用しますので、Application>Add Object>POUをクリックします。
Implementation LanguageをLD2に選び>Addで進みます。
p
POUで必要な変数を定義します。
PROGRAM p VAR _TempBytes:ARRAY[0..7]OF BYTE; _TempWORD:WORD; _TempReal:REAL; _IOPortOK:ARRAY[0..15]OF BOOL; _Port1INPUTData:DUT_Contrinex_SmartSensor_IN; _Port2INPUTData:DUT_OMRON_E3ASHL500MN_IN; _Port3INPUTData:DUT_OMRON_E2E_X3B4_IL3_2M_IN; _Port5INPUTData:DUT_Molex_IOLINKHub_IN; _Port7INPUTData:DUT_Murr_59607_IN; _Port7OUTPUTData:DUT_Murr_59607_OUT; _Port8INPUTData:DUT_Nassmagnet_SmartConnector_IN; _Port8OUTPUTData:DUT_Nassmagnet_SmartConnector_OUT; TONs:ARRAY[0..1]OF TON; END_VAR |
POUにActionを追加します。
そして追加されたActionをプログラム内に呼び出します。
Action:Unity
こちらのAction Blockは1秒ON・OFFの繰り返しBitを生成します。
Action:Port00
こちらのAction BlockはTurck のIO-Link Master TBEN-L4‐8IOLのPort00と接続する、Contrinex社のIO-Link Sensorのデータを処理します。
Action:Port02
こちらのAction BlockはTurck のIO-Link Master TBEN-L4‐8IOLのPort02と接続する、OMRON社のE3ASHL500MNのデータを処理します。
Action:Port04
こちらのAction BlockはTurck のIO-Link Master TBEN-L4‐8IOLのPort04と接続する、OMRON社のE2E-X3B4-IL3-2Mのデータを処理します。
Action:Port08
こちらのAction BlockはTurck のIO-Link Master TBEN-L4‐8IOLのPort08と接続する、Molex社のIO-Link Hubのデータを処理します。
Action:Port12
こちらのAction BlockはTurck のIO-Link Master TBEN-L4‐8IOLのPort12と接続する、Murrelektronik社のIO-Link Hub 59607データを処理します。
Action:Port14
こちらのAction BlockはTurck のIO-Link Master TBEN-L4‐8IOLのPort12と接続する、Nassmagnet社のSmart Connectorデータを処理します。
PLC_PRG
最後は先程作成したPOUをMAINプログラムに呼び出しましょう。
p(); |
Generate SFC/LD Visualizations
SFC/LDのプログラム監視画面を生成します。Project>Generate SFC/LD Visualizationをクリックします。
Visualization
次はVisualizationを追加するため、Add Object>Visualizationをクリックします。
VisuSymbols(System)を選び、Addで画面を追加します。
Add WebVisu
Webページの画面表示が必要な方は、Add Object>WebVisuでWeb画面を追加しましょう。
Screen
最後はプログラム監視用の画面を作成しましょう。
Mapping
プログラムで定義した変数を入出力データ(三菱のXY)とMappingする必要があります。
例えばPort1では、Input DataのVariable列では…のボタンがあります。
プログラム内にある適切な変数を設定しましょう。
Done!
Download
最後はプログラムをPLCにDownloadしましょう。
Start
StartボタンをクリックしRuntimeをRun Modeに変更します。
Result
TBEN-L5-PLC-11 PLCはRUN Modeになっています。
TBEN-L5-PLC-11とTBEN-L4‐8IOLのProfinet通信ができました。
Profinet Controllerは現在Runの状態になっています。
TBEN-L4‐8IOLの状態もOKになっています。
SFC/LD Visualizationも正常に動いています。
また、Browserの場合は下記のLinkでアクセスしましょう。
http://IP Address:8080/webvisu.htm
各PortのIO-Linkデバイスのデータの取得できました。
Project
下記のGithubから今回の記事のプロジェクトをDownloadしてください。
https://github.com/soup01Threes/Codesys/blob/main/Turck_TBEN_Lx_PLC_1x_Tutorial01.projectarchive