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の立ち上げは以下の記事に参考してください:
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 (*を@に)