こちらは新しいシリーズで、OTeeというVirtual PLCを使用し様々な記事を展開します。第8話ではOTee Platform上でEthernet/IP Scannerを立ち上げ、TURCKのIO−LINKマスターと接続します。
また、これからはOTeeのVirtual PLCをBerghofのMC-Pi Proにインストールし、記事を展開します。
さ、FAを楽しもう。

前書き
いつも私の技術ブログとYouTubeチャンネルをご覧いただき、心より感謝申し上げます。また、いまFullさん(full@桜 八重 (@fulhause) / X)と共に毎週水曜日の夜にお届けしている「高橋クリス」ラジオ番組を運営しています。
技術は独り占めせず、届けるもの
私たちは工場の生産技術や制御に関する技術情報を、ブログや動画などで無料公開しています。「知識は誰でもアクセスできるべき」という信念のもと、現場で役立つ具体的なノウハウやトラブル事例などを発信してきました。すべて無料で続けているのは、「知らなかったせいで困る人」を少しでも減らしたいからです。
また、もしあなたの現場で…
- 「このPLCとデバイスの組み合わせ、ちゃんと動くのかな?」
- 「EtherCAT通信でうまくいかない部分を検証してほしい」
- 「新しいリモートI/Oを試したいけど社内に検証環境がない」
など、困っている構成や試してみたいアイデアがあれば、ぜひお知らせください。機器の貸出や構成の共有が可能であれば、検証し、記事や動画で発信します(ご希望に応じて匿名対応も可能です)。
支援のかたち
現在、私達の活動はほぼ無償で続けており、記事や動画の制作には、時間と検証環境の整備が必要です。この活動を継続的にコンテンツを提供するためには、皆様の温かいご支援が大変重要です。
メンバーシップ(ラジオの応援)
Fullさんとのラジオをより充実させるための支援プランです。
https://note.com/fulhause/membership/join
Amazonギフトリスト
コンテンツ制作に必要な機材・書籍をリストにしています。
https://www.amazon.co.jp/hz/wishlist/ls/H7W3RRD7C5QG?ref_=wl_share
Patreon(ブログ・動画活動への応援)
月額での小さなご支援が、記事の執筆・検証環境の充実につながります。
https://www.patreon.com/user?u=84249391
Paypal
小さな支援が大きな力になります。
https://paypal.me/soup01threes?country.x=JP&locale.x=ja_JP
知ってたら助かること、届けたいだけです
あなたの応援が、知識の共有をもっと自由で持続可能なものにしてくれます。これからもどうぞよろしくお願いします。
soup01threes*gmail.com
技術はひとりじゃもったいない。
Referece Link
http://soup01.com/ja/category/otee/
http://soup01.com/ja/category/turck/
Implementation
Turck側
最初にTURCK側を構築します。

まずTURCK側から始めます。ChormeやFirefoxからTURCのIPアドレスを入力します。

こちらはTURCKのWeb serverになります。

パスワード
TURCKデバイスのDefault Passwordはpasswordです。

Default Passwordを実際の使い方によって変更するかを決めましょう。

エラー
もしTURCKモジュールがエラー発生した場合、LOCAL>Diagnosisに!の黄色マークがついてます。

ポート設定
次はTURCK IO-Link Masterの各Portを設定するため、LOCAL I/O>Parameterをクリックします。

各Portの設定画面が表示されます。

Read ボタンをクリックし現在IO-Link Portの設定を読み込みます。

OTee側
次はOTee 側を構築します。

Ethernet/IP設定を追加
OTeeのPlatformにアクセスし、プロジェクトの中にある+ボタンをクリックします。

新しい項目の追加画面が表示されます。

Drop-listからDriver Configを設定します。

次はDriverのDrop-listからEtherNet/IPを設定します。

Saveで設定を適用します。

クライアントを追加
次はEthernet/IPの設定画面を開き、”Add a Client”で新しいEthernet/IP Adapterを追加します。

Done!これで新しいEthernet/IP Adapterが追加されました。

リモートIPアドレス
Remote IP Address欄でBeckhoff TwinCAT3側で設定したIPアドレスに合わせてください。

Ethernet/IP Configuration
次はTURCK のIO-LINKマスターとEIP接続するための設定を行います。

今回記事で使用するInstanceは以下です。
- Input Assembly:121
- Output Assembly:150
- Configuration Assembly:106

IP Address
IPアドレスはTURCKのDIPスイッチの設定などに合わせてください。

Module Config Instance
Modbule Config Instanceを106に設定します。

T→O
次はT→O側を設定します。

Assembly Instance
AssemblyのInstance番号を121に設定しましょう。

Data Size
データサイズは38Bytesです。

Tags
そして38BytesのデータにもTagsを定義します。

O→T
今度はO→T側です。

Assembly Instance
Assembly Instance番号150に使用します。

Data Size
Dataサイズは38 Bytesです。

Data Rate
Dataの交換周期はApplicationに合わせて設定しましょう。

Tags
そして38BytesのデータにもTagsを定義します。

Global
IOデータとMappingするGlobal変数を定義し、Linkしてください。

構造体
次は構造体を作成します。
dut_OMRON_E3A3_HL500lMN
こちらはオムロンのIO-LINKセンサーE3A3-HL500lMNです。

こちらはE3A3-HL500lMNのIO-LINK Process Data Mappingです。

dut_Murr_59719_Basic
こちらはMurrのIO-LINKデバイス59719の基本構造体です。

dut_Murr_59719
こちらはMurrのIO-LINKデバイス59719の入出力点数に合わせて作成した構造体です。

こちらは59719 IO-Link Hubの入力Process Dataになります。

Byte2とByte3はE0タイプのみで今回記事で使用した59719では適用しません。


こちらは59719 IO-Link Hubの出力Process Dataになります。

dut_Murr_5000_00501_1300001
こちらはMurrの5000-00501-1300001、アナログ→IO-LINKに変換するConverterです。

dut_OMRON_E2E_X3B4_IL3_2M
こちらはOMRON社のE2E-X3B4-IL3-2Mの入力データに合わせて作成した構造体です。



dut_NassSmartConnector_IN
こちらはNassmagnet社のSmart Connectorの出力データに合わせて作成した構造体入力データです。


dut_NassSmartConnector_OUT
こちらはNassmagnet社のSmart Connectorの出力データに合わせて作成した構造体出力データです。


dut_NassSmartConnector
こちらは先程定義したNassSmartConnectorの入出力に含めて再定義した構造体です。

dut_Murr_59607_Basic
こちらはMurrelektronik社の59607に合わせて定義した構造体です。


dut_Murr_59607
こちらはMurrelektronik社の59607の入出力に合わせて再定義した構造体です。

dut_Molex_IOLinkHub
こちらはMolex社のIOLink Hubです。

dut_Contrinex_SmartSensor
こちらはContrinex社のIO-Link Sensorの入力データに合わせて作成した構造体です。


FC
次はFCを作成します。
fcGetBitFromByte
こちらはByte変数から指定した位置の現在値TRUEとFALSEを返します。

case iPos of
0:
fcGetBitFromByte := (iByte AND 1) <> 0;
1:
fcGetBitFromByte := (iByte AND 2) <> 0;
2:
fcGetBitFromByte := (iByte AND 4) <> 0;
3:
fcGetBitFromByte := (iByte AND 8) <> 0;
4:
fcGetBitFromByte := (iByte AND 16) <> 0;
5:
fcGetBitFromByte := (iByte AND 32) <> 0;
6:
fcGetBitFromByte := (iByte AND 64) <> 0;
7:
fcGetBitFromByte := (iByte AND 128) <> 0;
end_case;
fcSetBitToByte
こちらはByte変数から指定した位置のBITをセットもしくはリセットします。


case iusiPos of
0:
if ixSetReset then
iobData := iobData OR 1;
else
iobData := iobData AND 254;
end_if;
1:
if ixSetReset then
iobData := iobData OR 2;
else
iobData := iobData AND 253;
end_if;
2:
if ixSetReset then
iobData := iobData OR 4;
else
iobData := iobData AND 251;
end_if;
3:
if ixSetReset then
iobData := iobData OR 8;
else
iobData := iobData AND 247;
end_if;
4:
if ixSetReset then
iobData := iobData OR 16;
else
iobData := iobData AND 239;
end_if;
5:
if ixSetReset then
iobData := iobData OR 32;
else
iobData := iobData AND 223;
end_if;
6:
if ixSetReset then
iobData := iobData OR 64;
else
iobData := iobData AND 191;
end_if;
7:
if ixSetReset then
iobData := iobData OR 128;
else
iobData := iobData AND 127;
end_if;
end_case;
fc2BytesToUINT
こちらのFCはBytesのデータを整数に合体します。


_uiTemp:=BYTE_TO_UINT(IN:=iByte1);
_uiTemp:=_uiTemp * 256;
fc2BytesToUINT:=BYTE_TO_UINT(
IN := iByte0
)+_uiTemp;
fcScaling
こちらはScalingするFCです。


rTemp:=rRawUpper-rRawLower;
if rTemp <= 0.0 then
rTemp:= 10.0;
end_if;
fcScaling:=(rInput-rRawLower)*((rEngUnitUpper-rEngUnitLower)/rRawUpper-rRawLower)+rEngUnitLower;
FB
今度は各IO-LINKデバイスに合わせてFBを作成します。
fb_OMRON_E3A3_HL500lMN
こちらはオムロンのIO-LINKセンサーE3A3-HL500lMNに合わせて作成したFBです。
VAR_IN_OUT
こちらは先ほど定義したdut_OMRON_E3A3_HL500lMNを入出力パラメータとして使用します。

VAR_INPUT
こちらはIOLink経由で入力した生データです。

Program
こちらはプログラムです。
_uiTemp:=BYTE_TO_UINT(IN:=iByte1);
_uiTemp:=_uiTemp * 256;
dutIO.uiDetectionValue:=BYTE_TO_UINT(
IN := iByte0
)+_uiTemp
;
dutIO.usiLightIntensityLevel:=BYTE_TO_USINT(
IN := iByte3
);
dutIO.xOutput0:=fcGetBitFromByte(iByte:=iByte3,iPos:=0);
dutIO.xOutput1:=fcGetBitFromByte(iByte:=iByte3,iPos:=1);
dutIO.xLightIntensityLevel:=fcGetBitFromByte(iByte:=iByte3,iPos:=2);
dutIO.xSufficientLightIntensity:=fcGetBitFromByte(iByte:=iByte3,iPos:=4);
dutIO.xWarning:=fcGetBitFromByte(iByte:=iByte3,iPos:=6);
dutIO.xError:=fcGetBitFromByte(iByte:=iByte3,iPos:=7);
fb_Murr_59719
こちらはMurrのIO-LINKセンサー59719に合わせて作成したFBです。
VAR_IN_OUT
こちらは先ほど定義したdut_Murr_59719を入出力パラメータとして使用します。

VAR_INPUT
こちらはIOLink経由で入力した生データです。


Program
こちらはプログラムです。
dutIO.stInput.xX0Pin4:=fcGetBitFromByte(iByte:=iByte1,iPos:=0);
dutIO.stInput.xX0Pin2:=fcGetBitFromByte(iByte:=iByte1,iPos:=1);
dutIO.stInput.xX1Pin4:=fcGetBitFromByte(iByte:=iByte1,iPos:=2);
dutIO.stInput.xX1Pin2:=fcGetBitFromByte(iByte:=iByte1,iPos:=3);
dutIO.stInput.xX2Pin4:=fcGetBitFromByte(iByte:=iByte1,iPos:=4);
dutIO.stInput.xX2Pin2:=fcGetBitFromByte(iByte:=iByte1,iPos:=5);
dutIO.stInput.xX3Pin4:=fcGetBitFromByte(iByte:=iByte1,iPos:=6);
dutIO.stInput.xX3Pin2:=fcGetBitFromByte(iByte:=iByte1,iPos:=7);
dutIO.stInput.xX4Pin4:=fcGetBitFromByte(iByte:=iByte0,iPos:=0);
dutIO.stInput.xX4Pin2:=fcGetBitFromByte(iByte:=iByte0,iPos:=1);
dutIO.stInput.xX5Pin4:=fcGetBitFromByte(iByte:=iByte0,iPos:=2);
dutIO.stInput.xX5Pin2:=fcGetBitFromByte(iByte:=iByte0,iPos:=3);
dutIO.stInput.xX6Pin4:=fcGetBitFromByte(iByte:=iByte0,iPos:=4);
dutIO.stInput.xX6Pin2:=fcGetBitFromByte(iByte:=iByte0,iPos:=5);
dutIO.stInput.xX7Pin4:=fcGetBitFromByte(iByte:=iByte0,iPos:=6);
dutIO.stInput.xX7Pin2:=fcGetBitFromByte(iByte:=iByte0,iPos:=7);
_xTemp:=fcSetBitToByte(iusiPos:=0,ixSetReset:=dutIO.stOutput.xX0Pin4,iobData:=oByte1);
_xTemp:=fcSetBitToByte(iusiPos:=1,ixSetReset:=dutIO.stOutput.xX0Pin2,iobData:=oByte1);
_xTemp:=fcSetBitToByte(iusiPos:=2,ixSetReset:=dutIO.stOutput.xX1Pin4,iobData:=oByte1);
_xTemp:=fcSetBitToByte(iusiPos:=3,ixSetReset:=dutIO.stOutput.xX1Pin2,iobData:=oByte1);
_xTemp:=fcSetBitToByte(iusiPos:=4,ixSetReset:=dutIO.stOutput.xX2Pin4,iobData:=oByte1);
_xTemp:=fcSetBitToByte(iusiPos:=5,ixSetReset:=dutIO.stOutput.xX2Pin2,iobData:=oByte1);
_xTemp:=fcSetBitToByte(iusiPos:=6,ixSetReset:=dutIO.stOutput.xX3Pin4,iobData:=oByte1);
_xTemp:=fcSetBitToByte(iusiPos:=7,ixSetReset:=dutIO.stOutput.xX3Pin2,iobData:=oByte1);
_xTemp:=fcSetBitToByte(iusiPos:=0,ixSetReset:=dutIO.stOutput.xX4Pin4,iobData:=oByte0);
_xTemp:=fcSetBitToByte(iusiPos:=1,ixSetReset:=dutIO.stOutput.xX4Pin2,iobData:=oByte0);
_xTemp:=fcSetBitToByte(iusiPos:=2,ixSetReset:=dutIO.stOutput.xX5Pin4,iobData:=oByte0);
_xTemp:=fcSetBitToByte(iusiPos:=3,ixSetReset:=dutIO.stOutput.xX5Pin2,iobData:=oByte0);
_xTemp:=fcSetBitToByte(iusiPos:=4,ixSetReset:=dutIO.stOutput.xX6Pin4,iobData:=oByte0);
_xTemp:=fcSetBitToByte(iusiPos:=5,ixSetReset:=dutIO.stOutput.xX6Pin2,iobData:=oByte0);
_xTemp:=fcSetBitToByte(iusiPos:=6,ixSetReset:=dutIO.stOutput.xX7Pin4,iobData:=oByte0);
_xTemp:=fcSetBitToByte(iusiPos:=7,ixSetReset:=dutIO.stOutput.xX7Pin2,iobData:=oByte0);
fb_Murr_5000_00501_1300001
こちらはMurrのIO-LINKセンサー5000-00501-130001に合わせて作成したFBです。
VAR_IN_OUT
こちらは先ほど定義したdut_Murr_5000_00501_1300001を入出力パラメータとして使用します。

VAR_INPUT
こちらはIOLink経由で入力した生データです。

Program
こちらはプログラムです。
udtIO.uiRawValue:=fc2BytesToUINT(iByte0:=iByte0,iByte1:=iByte1);
udtIO.rScaledValue:=fcScaling(
rInput:=UINT_TO_REAL(IN := udtIO.uiRawValue)
,rRawLower:=rRawLower
,rRawUpper:=rRawUpper
,rEngUnitLower:=rEngUnitLower
,rEngUnitUpper:=rEngUnitUpper
);
fb_OMRON_E2E_X3B4_IL3_2M
こちらはオムロンのIO-LINKセンサーE2E-X3B4-IL3-2Mに合わせて作成したFBです。
VAR_IN_OUT
こちらは先ほど定義したdut_OMRON_E2E_X3B4_IL3_2MNを入出力パラメータとして使用します。

VAR_INPUT
こちらはIOLink経由で入力した生データです。

Program
こちらはプログラムです。
dutIO.xControlOuput :=fcGetBitFromByte(iByte:=iByte0,iPos:=0);
dutIO.usMonitorOutput:=BYTE_TO_USINT(
IN := iByte1
);
fb_Nass_Connector
こちらはNassのIO-LINK Smart Connectorに合わせて作成したFBです。
VAR_IN_OUT
こちらは先ほど定義したdut_NassSmartConnectorを入出力パラメータとして使用します。

VAR_INPUT
こちらはIOLink経由で入力した生データです。

VAR_OUTPUT
こちらはIOLink経由で出力する生データです。

Program
こちらはプログラムです。
(*Input Data*)
udtio.in.xValveState:=fcGetBitFromByte(iByte:=iByte0,iPos:=0);
udtio.in.xShortCircuit:=fcGetBitFromByte(iByte:=iByte0,iPos:=1);
udtio.in.xOpenCircuit:=fcGetBitFromByte(iByte:=iByte0,iPos:=2);
udtio.in.xOverHeat:=fcGetBitFromByte(iByte:=iByte0,iPos:=3);
udtio.in.xOverCurrent:=fcGetBitFromByte(iByte:=iByte0,iPos:=4);
udtio.in.xCounter1OverRun:=fcGetBitFromByte(iByte:=iByte0,iPos:=5);
udtio.in.xCounter2OverRun:=fcGetBitFromByte(iByte:=iByte0,iPos:=6);
(*Output Data*)
(*PWM*)
oByte0:=USINT_TO_BYTE(
IN := udtio.out.usiPWM
);
oByte0:=
SHL(
IN := oByte0,
N := 1
);
(*Valve ON/OFF*)
_xTemp:=fcSetBitToByte(iusiPos:=0,ixSetReset:=udtio.out.xValueON,iobData:=oByte0);
fb_Murr_59607
こちらはMurrのIO-LINKセンサー59607に合わせて作成したFBです。
VAR_IN_OUT
こちらは先ほど定義したdut_Murr_59607を入出力パラメータとして使用します。

VAR_INPUT
こちらはIOLink経由で入力した生データです。

VAR_OUTPUT
こちらはIOLink経由で出力する生データです。

Program
こちらはプログラムです。
dutIO.stInput.xX0Pin4:=fcGetBitFromByte(iByte:=iByte1,iPos:=0);
dutIO.stInput.xX1Pin4:=fcGetBitFromByte(iByte:=iByte1,iPos:=2);
dutIO.stInput.xX2Pin4:=fcGetBitFromByte(iByte:=iByte1,iPos:=4);
dutIO.stInput.xX3Pin4:=fcGetBitFromByte(iByte:=iByte1,iPos:=6);
dutIO.stInput.xX4Pin4:=fcGetBitFromByte(iByte:=iByte0,iPos:=0);
dutIO.stInput.xX5Pin4:=fcGetBitFromByte(iByte:=iByte0,iPos:=2);
dutIO.stInput.xX6Pin4:=fcGetBitFromByte(iByte:=iByte0,iPos:=4);
dutIO.stInput.xX7Pin4:=fcGetBitFromByte(iByte:=iByte0,iPos:=6);
_xTemp:=fcSetBitToByte(iusiPos:=0,ixSetReset:=dutIO.stOutput.xX0Pin4,iobData:=oByte1);
_xTemp:=fcSetBitToByte(iusiPos:=2,ixSetReset:=dutIO.stOutput.xX1Pin4,iobData:=oByte1);
_xTemp:=fcSetBitToByte(iusiPos:=4,ixSetReset:=dutIO.stOutput.xX2Pin4,iobData:=oByte1);
_xTemp:=fcSetBitToByte(iusiPos:=6,ixSetReset:=dutIO.stOutput.xX3Pin4,iobData:=oByte1);
_xTemp:=fcSetBitToByte(iusiPos:=0,ixSetReset:=dutIO.stOutput.xX4Pin4,iobData:=oByte0);
_xTemp:=fcSetBitToByte(iusiPos:=2,ixSetReset:=dutIO.stOutput.xX5Pin4,iobData:=oByte0);
_xTemp:=fcSetBitToByte(iusiPos:=4,ixSetReset:=dutIO.stOutput.xX6Pin4,iobData:=oByte0);
_xTemp:=fcSetBitToByte(iusiPos:=6,ixSetReset:=dutIO.stOutput.xX7Pin4,iobData:=oByte0);
fb_Molex_IOLinkHub
こちらはMolexのIO-LINK Hubに合わせて作成したFBです。
VAR_IN_OUT
こちらは先ほど定義したdut_Molex_IOLinkHubを入出力パラメータとして使用します。

VAR_INPUT
こちらはIOLink経由で入力した生データです。

Program
こちらはプログラムです。
dutIO.x00:=fcGetBitFromByte(iByte:=iByte1,iPos:=0);
dutIO.x01:=fcGetBitFromByte(iByte:=iByte1,iPos:=1);
dutIO.x02:=fcGetBitFromByte(iByte:=iByte1,iPos:=2);
dutIO.x03:=fcGetBitFromByte(iByte:=iByte1,iPos:=3);
dutIO.x04:=fcGetBitFromByte(iByte:=iByte1,iPos:=4);
dutIO.x05:=fcGetBitFromByte(iByte:=iByte1,iPos:=5);
dutIO.x06:=fcGetBitFromByte(iByte:=iByte1,iPos:=6);
dutIO.x07:=fcGetBitFromByte(iByte:=iByte1,iPos:=7);
dutIO.x08:=fcGetBitFromByte(iByte:=iByte0,iPos:=0);
dutIO.x09:=fcGetBitFromByte(iByte:=iByte0,iPos:=1);
dutIO.x10:=fcGetBitFromByte(iByte:=iByte0,iPos:=2);
dutIO.x11:=fcGetBitFromByte(iByte:=iByte0,iPos:=3);
dutIO.x12:=fcGetBitFromByte(iByte:=iByte0,iPos:=4);
dutIO.x13:=fcGetBitFromByte(iByte:=iByte0,iPos:=5);
dutIO.x14:=fcGetBitFromByte(iByte:=iByte0,iPos:=6);
dutIO.x15:=fcGetBitFromByte(iByte:=iByte0,iPos:=7);
fb_Contrinex_SmartSensor
こちらはContrinexのIO-LINKセンサーに合わせて作成したFBです。
VAR_IN_OUT
こちらは先ほど定義したdut_Contrinex_SmartSensorを入出力パラメータとして使用します。

VAR_INPUT
こちらはIOLink経由で入力した生データです。

Program
こちらはプログラムです。
_uiTemp:=fc2BytesToUINT(iByte0:=iByte0,iByte1:=iByte1);
dutIO.rMeasureValue :=fcScaling(
rInput:=UINT_TO_REAL(IN := _uiTemp)
,rRawLower:=0.0
,rRawUpper:=16383.0
,rEngUnitLower:=0.0
,rEngUnitUpper:=110.0
);
dutIO.xOSS1 :=fcGetBitFromByte(iByte:=iByte2,iPos:=0);
dutIO.xOSS2 :=fcGetBitFromByte(iByte:=iByte2,iPos:=1);
dutIO.xTSS :=fcGetBitFromByte(iByte:=iByte2,iPos:=2);
dutIO.xSSC1 :=fcGetBitFromByte(iByte:=iByte2,iPos:=3);
dutIO.xSSC2 :=fcGetBitFromByte(iByte:=iByte2,iPos:=4);
dutIO.xALR1 :=fcGetBitFromByte(iByte:=iByte2,iPos:=5);
dutIO.xALR2 :=fcGetBitFromByte(iByte:=iByte2,iPos:=6);
dutIO.xALR3 :=fcGetBitFromByte(iByte:=iByte2,iPos:=7);
dutIO.bScaledValue:=iByte3;
OB_IOLINKMaster

(**)
(*0.2 ON->OFF Timer*)
fbTON(
(* Inputs *)
IN := NOT_BOOL(
IN := xfbTONq
),
PT := T#0.2s,
(* InOuts *)
(* Outputs *)
Q => xfbTONq
);
(*0.2s UP*)
fbR_TRIG(
(* Inputs *)
CLK := xfbTONq,
(* InOuts *)
(* Outputs *)
Q => xR_TRIGq
);
(*Port1*)
(*FB*)
fbTurckIOLINKPort1(
(* Inputs *)
iByte0 := gbEIPTurckRawInput6,
iByte1 := gbEIPTurckRawInput7,
iByte2 := gbEIPTurckRawInput8,
iByte3 := gbEIPTurckRawInput9,
(* InOuts *)
dutIO := stOMRON_E3A3_HIL500IMN
(* Outputs *)
);
(*Port2*)
(*FB*)
fbTurckIOLinkPort2(
(* Inputs *)
iByte0 := gbEIPTurckRawInput10,
iByte1 := gbEIPTurckRawInput11,
iByte2 := gbEIPTurckRawInput12,
iByte3 := gbEIPTurckRawInput13,
(* InOuts *)
dutIO := stMurr59719,
(* Outputs *)
oByte0 => gbEIPTurckRawOutput8,
oByte1 => gbEIPTurckRawOutput9,
oByte2 => gbEIPTurckRawOutput10,
oByte3 => gbEIPTurckRawOutput11
);
(*Port3*)
(*FB*)
fbTurckIOLinkPort3(
(* Inputs *)
iByte0 := gbEIPTurckRawInput14,
iByte1 := gbEIPTurckRawInput15,
rRawLower := 0.0,
rRawUpper := 32511.0,
rEngUnitLower := 0.0,
rEngUnitUpper := 11.7,
(* InOuts *)
udtIO := stMurr5000_00501_1300001
(* Outputs *)
);
(*Port4*)
(*FB*)
fbTurckIOLinkPort4(
(* Inputs *)
iByte0 := gbEIPTurckRawInput18,
iByte1 := gbEIPTurckRawInput19,
(* InOuts *)
dutIO := stOMRON_E2E_X3B4_IL3_2M
(* Outputs *)
);
(*Port5*)
(*FB*)
fbTurckIOLinkPort5(
(* Inputs *)
iByte0 := gbEIPTurckRawInput22,
iByte1 := gbEIPTurckRawInput23,
(* InOuts *)
udtio := stNassSmartConnector,
(* Outputs *)
oByte0 => gbEIPTurckRawOutput20,
oByte1 => gbEIPTurckRawOutput21
);
(*Port6*)
(*FB*)
fbTurckIOLinkPort6(
(* Inputs *)
iByte0 := gbEIPTurckRawInput26,
iByte1 := gbEIPTurckRawInput27,
iByte2 := gbEIPTurckRawInput28,
iByte3 := gbEIPTurckRawInput29,
(* InOuts *)
dutIO := stMurr59607,
(* Outputs *)
oByte0 => gbEIPTurckRawOutput24,
oByte1 => gbEIPTurckRawOutput25,
oByte2 => gbEIPTurckRawOutput26,
oByte3 => gbEIPTurckRawOutput27
);
(*Port7*)
(*FB*)
fbTurckIOLinkPort7(
(* Inputs *)
iByte0 := gbEIPTurckRawInput30,
iByte1 := gbEIPTurckRawInput31,
iByte2 := gbEIPTurckRawInput32,
iByte3 := gbEIPTurckRawInput33,
(* InOuts *)
dutIO := stMolexIOHub,
(* Outputs *)
oByte0 => gbEIPTurckRawOutput28,
oByte1 => gbEIPTurckRawOutput29,
oByte2 => gbEIPTurckRawOutput30,
oByte3 => gbEIPTurckRawOutput31
);
(*Port8*)
(*FB*)
fbTurckIOLinkPort8(
(* Inputs *)
iByte0 := gbEIPTurckRawInput34,
iByte1 := gbEIPTurckRawInput35,
iByte2 := gbEIPTurckRawInput36,
iByte3 := gbEIPTurckRawInput37,
(* InOuts *)
dutIO := stContrinexSmartSensor
(* Outputs *)
);
ダウンロード
最後はプロジェクトをOTee RuntimeにDownloadしてください。
結果
こちらの動画で動作確認できます。