FactoryIO#Beckhoff TwinCAT3と連携しよう

Factory I/Oシリーズです!今回はFactory I/Oの一部の基本操作やBeckhoff TwinCAT3 TF6100とOPCUAでつながるの説明いたします。

この記事はFactory IO側とTwinCAT側に分かれています。

Factory IO側 

新規追加

FactoryIO起動して新しいプロジェクトを作成しましょう。

Newをクリックします。

このような空き工場の画面に変わります。

Parts-Conveyor追加

右側のWindowからAllのDrop Listから様々な一般的に工場があるあるのObjectがあります。

ここでLight Load Partsを選びましょう。

画面から色々なコンベヤうやLifterが出てきます。

これらのObjectはすべてあなたの空き工場から追加することができます。

では、2mのコンベヤを追加します。コンベヤを選んだまま左にひっばります。

Configuration

コンベヤに右クリックし>Configuration>するとDigital・Digitial+/-とAnalogが選びます。

Digitalだと片方だけ回しします。

Digital+/-だとコンベヤが時計回と逆時計回りができます。

Analogだと数字で変速するができます。

そしてUse EncoderのCheckboxが入ると、SignalA SignalBの高速Counterシグナルがついてきます。

今回はシンプルで行きますのでDigitalのままします。

そしてBarにある歯車をクリックします。

そうするとObjectの名前が表示するようになります。

Run Mode

BarにあるPlay ButtonでRun Modeに切り替えます。

ボタンの絵が四角に変わり、もう一回押しますとRun ModeがStopします。

動いてみよう-AlwaysON/OFF

ではコンベヤをRun Modeで動かして見ましょう。

Run Modeに切り替え、View>Actuators TagsとSesnor Tagsをクリックします。

そしてDock All Tagsをクリック。

画面の左側でいまあるObjectのINPUT/OUTPUTが一覧見えます。

メガネマックをクリックしますと、Always ONに変わります。

コンベヤの上にある名前Tagがオレンジ色になりコンベヤが回ってるも見えるはずです。

先の画面もう一度押しますとコンベヤの状態がAlways OFF>Normalに切り替えます。

それは各ICONの意味です。実は先やったのはObjectのFailureシミュレーションです。FactoryIOはこのようにSensorや出力をAlwaysONすることによってtroubleshootingの練習

できます。ですが、その”Failure”信号はPartsとControllerの信号を書きできます。

動いてみよう-ForceON/OFF

次は強制ON/OFFを試してみましょう。

緑のボタンをクリックします。

そうするとボタン色が明るい青くなり、いま強制ONしてると示しています。

もう一度押すと強制状態をリリースします。

コンベヤの上にある名前Tagが青い色になりコンベヤが回ってるも見えるはずです。

先の画面もう一度押しますとコンベヤの状態Force>Normalに切り替えます。

こちら各ICONの意味です。

今回はDigitalですが、Analogや数字の場合でも強制変更できます。

Parts-Box追加

コンベヤだけと少しつまらないので、箱も追加してみます。

Itemsをクリックします。

ダンボールを選び、そのままDropします。

MOUSEをダンボール押しながら引っばりますとダンボールの場所が移動できます。

次はKeyboard ”V”を押しながらダンボール移動すると上下に場所が変えれます。

先の操作で書いたようにダンボールをコンベヤの上に置きましょう。

例えばちゃんと上に乗せなくても、Run Modeにかけると勝手にコンベヤの上に落ちてきますので場所は大体でよいです。

RunMode

この状態でまたRun Modeかけ、コンベヤをOnしますと、ダンボールは搬送はじめ、最後は床に落ちます。

RESET

赤矢印のボタンを押しますと、シミュレーションはまたはじめの状態にリセットします。

このような操作になりますね!

Pause

こちらのボタンで一時停止ができます。もう一回押すと再開って感じですね。

Parts-Sensor追加

ダンボール、コンベヤの次はSensorを追加してみましょうか。

Items>Sensorsをクリックします。

青い色なのはphotoelectric sensorなので、今回はこっちを使用しますね。

LED: 赤は検知中

検知できるもの:固体

検知距離:0-1.6m

Sensorをコンベヤの上にのせます。次は検知の方向を設定します。

このように直線だけではなく、斜めでも検知できます。

Parts-滑り台追加

次はダンボールがそのまま床に落ちるではなく滑りながら床にいくの滑り台を追加します。

Parts-制御Box追加

次はOpeatorがEstop/ON/OFF/Resetなどのボタンを追加したいと考えます。

Items>Operations>白い制御Boxをひっばります。

Parts-ボタン追加

次はESTOP/ON/OFF/RESETボタンも追加します。

自分はあまりセンスないですが、このような配置でいいかな?

各ボタンでもMomentary Action(押すときだけ信号あり)とAlternate Action(信号反転)の2種類があります。自分はMomentary Actionのほうが好きです。

Parts-Display追加

いま何個のダンボールが搬送されたかCountしたいので、Displayも追加しますね。

うん、いい感じに配置しましたね。

DisplayにもAnalog・BCD・整数など様々な表示を設定できます。今回は整数にします。

Parts-出口Sensor追加

最後は滑り台の出口にもSensor追加しましょう。

Simulationのリセット用です。

Parts-名前変更

最後はView>Dock all TagsでいまのTagsをAll表示します。

Partsの名前は少しわかりにくいので、ちゃんとした名前に変えましょう。

よし、これでOKです。

Driver設定

次は通信を設定します。FILE>Driversをクリックします。

NoneのDrop Listから通信Driverを選ぶことが可能です。

その前に、まずTagの隣に緑や青い色の四角見えますか?これはTagのData Typeを示しています。

緑=1 Bytes単位のBool

青=4 Bytes単位のReal

オレンジ=4 Bytes単位のDINT

白=Any Type

になります。

今回はBeckhoff のTwinCATと通信しますので、OPC Client DA/UAを使用します。

TwinCAT側

OPCUA Serverの立ち上げは以下の記事に参考してください:

Beckhoff#TwinCAT3 TF6100 OPCUA _Part1_Server立ち上げよう

Project

TwinCATのプロジェクトはDUT(構造体作成)・GVL(Global Variable List)とMAINプログラムに分けています。

DUT

DUT_Switch_2States

PBとPL、つまりトリガー用のデバイスとその表示です。

TYPE DUT_Switch_2States :
STRUCT
PB:BOOL;
PL:BOOl;
END_STRUCT
END_TYPE

DUT_FactoryIO_System

FactoryIO用のIOです。

TYPE DUT_FactoryIO_System :
STRUCT
Reset :DUT_Switch_2States;
Run :DUT_Switch_2States;
Pause :DUT_Switch_2States;
TimeScale :REAL;
CameraPosition :INT;
END_STRUCT
END_TYPE

DUT_ConveyorSystem1 

実際コンベヤシステムで使う部品です。

TYPE DUT_ConveyorSystem1 :
STRUCT
ESTOP :DUT_Switch_2States;
Start :DUT_Switch_2States;
Pause :DUT_Switch_2States;
Reset :DUT_Switch_2States;
ConveyorFW :BOOL;
Flags :ARRAY[0..10]OF BOOL;
CountDisplay:INT;
ConveyorExit_Exit_Sensor :BOOL;
Conveyor1_Exit_Sensor :BOOL;
END_STRUCT
END_TYPE

GVL

最後は先作ったDUT で変数を宣言します。

そのやり方だと{attribute ‘OPC.UA.DA’ := ‘1’}の数が少なく済むのメリットがあります。Beckhoff TwinCATのOPCUA Server使用するとき、Tagの上に{attribute ‘OPC.UA.DA’ := ‘1’}を宣言する必要があります。

{attribute ‘qualified_only’}

VAR_GLOBAL
{attribute ‘OPC.UA.DA’ := ‘1’}
System :DUT_FactoryIO_System;
{attribute ‘OPC.UA.DA’ := ‘1’}
Conveyor1 :DUT_ConveyorSystem1;
END_VAR

プログラム

最後はプログラムです。簡単なボタン押したらコンベヤ回し、もう一回押したら止まる、あとESTOPの緊急停止制御とダンボールの数えです。

VAR

VAR
b:BOOL;
bReset :BOOL;
bEnable :BOOL;
bConveyorFW :BOOL;
Fault :ARRAY[0..15]OF BOOL;
i :INT;
R_TRIG :ARRAY[0..2]OF R_TRIG;
counter :INT;
i2:INT;
TON :array[0..2]of ton;


END_VAR

CODE

bReset:=GVL_FactoryIO.Conveyor1.Reset.PB;

//Fault
//[0]-ESTOP is pressed
IF NOT GVL_FactoryIO.Conveyor1.ESTOP.PB THEN
Fault[0]:=TRUE;
END_IF

//Enable
bEnable:=NOT fault[0] ;

//Conveyor Operation
IF bEnable AND  GVL_FactoryIO.Conveyor1.Pause.PB THEN
IF GVL_Factoryio.Conveyor1.Start.PB THEN
bConveyorFW:=TRUE;
END_IF;
ELSE
bConveyorFW:=FALSE;
END_IF;

GVL_Factoryio.Conveyor1.ConveyorFW:=bConveyorFW;

//Counter Display
R_TRIG[0](
CLK:=GVL_FactoryIO.Conveyor1.ConveyorExit_Exit_Sensor
);
IF R_Trig[0].Q THEN
counter:=counter+1;
END_IF
GVL_FactoryIO.Conveyor1.CountDisplay:=Counter;


//Factory IO Reset
R_TRIG[1](
CLK:=GVL_FactoryIO.Conveyor1.ConveyorExit_Exit_Sensor
);
IF R_TRIG[1].Q THEN
GVL_Factoryio.System.Reset.PB:=TRUE;
END_IF;

TON[0](in:=GVL_Factoryio.System.Reset.PB
,PT:=T#0.3S
);
IF ton[0].Q THEN
GVL_Factoryio.System.Reset.PB:=False;
END_IF


//Reset Operations
IF bReset THEN
FOR i :=0 TO 15 DO
fault[i]:=FALSE;
END_FOR
END_IF

注意

Tag追加したあとにもう一度Configurationを書き込まないとServerが更新してくれませんので:

Data Access>Write Configuration to Targetをクリックします。

上書きでいいですか?って。Yesします。

そしてConfigurationが書き込まれました、と。

OKします。

OPC Server再起動しますか?って。

YESします。

再起動しまいた。OKします。

UaExpertを使用しでTagがちゃんと更新したかどうかを確認できます。

更新できていればOKです。

Driver設定

Factory IOに戻り、CONFIGURATIONをクリックします。

BROWSE SERVERSします。

TwinCATから立ち上げたServerを選択します。

Limitは何個まで割付できますかと。とりあえず100にします。

FilterのところはGVL_FactoryIOを入れます。

Filterかけないと今回使わないTagもたくさん出てきますので、Filterをいれてくださいね。

設定終わったらBROWSEボタンでOPCUA ServerのNodeを検索します。

うん…構造体になりますとどうやら最後のTag名しか表示しませんね。

でも一応もつながっていますね。

ですが、Mouseを近く移動しますとちゃんと名前が表示されています。

最後やるのは割り付けたいTagをそのままひっばっていくだけですね。


Simulation Tag

みんなさんも気がつくと思いますが、FactoryIOにはいくつのSystem IOがあります。

Sensor

Factory I/O(Pasued)

True=シミュレーションが一時停止中

Factory I/O(Reset)

True1秒=シミュレーションがリセット

Facotry I/O(Running)

True=シミュレーションが実行中

Factory I/O(Time Scale)

シミュレーションのTime Scaleを設定します。

0=停止やEDIT MODE

0.1=Slowモーション

1=Run モード

2/3/4=早送り

Actators

Factory I/O(Camera Position)

カメラ視覚を保存された場所に移動します。

Factory I/O(Pause)

シミュレーションを一時停止します。

Factory I/O(Reset)

シミュレーションをリセットします。

Factory I/O(Run)

シミュレーションを実行します。

割付

準備揃いたら、最後はTagの割付ですね。


テスト

実際繋がってるかどうかをCheckします。

うん、大丈夫そうですね。

結果

すごく簡単な装置になりましたね!

最後

はーい、お疲れ様です。

今後はFactoryIO x TwinCATでOOP・他のFunctionとコラボするにも考えています。

あと他のメーカのPLCやModbus TCPとかもね。

世界は広いです。

もしなにか質問あれば、メール・コメント・Twitterなどでもどうぞ!

Twitterのご相談:@3threes2

メールのご相談:soup01threes*gmail.com (*を@に)

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

シェアする

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

フォローする