今回の記事はSelmo Studioを使って簡単なプログラムの生成方法をFlowから1からCodesysと連携する手順を説明します。また、Selmo StudioのHMI機能も少しお見せします。
さ、はじめよう。

Reference Link
Implementation
Machine Simulation
こちらは今回FactoryIOのSimulation 装置です。
Flow
こちらは今回記事のFlowです。

Logic Layer
最初にLogic Layerを作成します。
Add Step
Stepを追加します。
前回の記事ではStepに関しては説明しましたので、ここでは説明いたしません。
Flow
こちらは今回記事のLogic Layer構成になります。
System Layer
次はSystem Layerを開き、制御のMatrix表を作成します。
System Layer画面には先程定義したStepが表示されます。
Zone1:Input, Wait the Button is pressed
Zone1を定義します。こちらはスタートボタンを押した動作を作ります。

Zone Inを追加します。
Zone Inが追加されました。Zoneに関しては前回の記事で紹介しましたので、ここでは詳しく説明しません。
Zone Inに適切な名前を設定します。
Zone Inの名前を設定し、Zone Inputを”i_xStartButton”に設定します。
その”i_xStartButton”はInput信号になります。
Zone2:Input, Wait the Button is Released
Zone2を定義します。こちらはスタートボタンを押したあと離した動作を作ります。

先と同じようにZone Inを追加し、適切な名前を定義しましょう。
Zone InputはZone1のi_xStartButtonと同じ信号に設定し、Input invertedのCheckboxを入れます。それはi_xStartButtonの反転信号を監視することを意味し、つまりFalse=条件成立になります。
Done!Input信号がInvertedされたZoneでは青いIconがついています。
Zone1、Zone2にもSを設定します。
Group your Zones
複数のZoneをアプリケーションの動作によってGroup化し管理できます。グループ化したいZoneを複数選択し>Edit Zoneをクリックします。
Group Nameを設定し>Okで確定します。
Done!
Zone3:In-OutLoad the Packages
Zone2を定義します。こちらはFactoryIOのPackageを生成する動作を作ります。

Zone In-Outを追加します。
Done!こちらのZoneはStep3”箱を生成する”に割り付けます。
Zone Inputの信号をInvertedしたi_xSensorB1に設定します。
Zone Outputの信号をo_xLoadPackageに設定します。
つまり、o_xLoadPackageがTrueになり、i_xSensorB1=False(Sensorが箱を検知した)、次のStepに進みます。
Fully qualified variable nameでは実際PLC XML Formatとして出力したとき、該当するZoneの入出力の変数名になります。
Done!
Zone4:Input,Wait Sensor1
Zone4を定義します。こちらはSensor1が箱を検知した動作を作ります。

Zone Inを追加します。
Zone Inputをi_xSensorB1に定義します。
こちらのZoneはStep4”箱をConveyor1に搬送する”に割り付けます。
Zone5:In-Out,Transfer package to Conveyor End
Zone5を定義します。こちらはConveyor1で箱を搬送する動作を作ります。

Zone In-Outを定義します。
次はConveyor1をSensor 2がTrueになるまで(箱が検知した)出力する動作を作成します。

Zone Inputをi_xSensorB2の反転信号に定義します。
Zone Outputをo_xConveyro1に定義します。
そしてZone OutputのOutput Group ”Conveyor1”に設定します。
Zone5を定義し、Step4に割り付けました。
Zone6:In-Out,Transfer Package Between Conveyor1 and Conveyor2
Zone6を定義します。こちらはConveyor2で箱を搬送する動作を作ります。Conveyor1とConveyor2を同時にONしないと、箱がConveyor1からConveyor2に搬送できませんので。

Zone In-Outを定義します。
Zone Inputをi_xSensorB2信号に定義します。
Zone Outputをo_xConveyro1に定義します。
そしてZone OutputのOutput Group ”Conveyor1”に設定します。
Zone6をStep5 Transfer Package Between Conveyor1 and Conveyor2に割り付けました。
Zone7:In-Out,Transfer It to End of Conv2
Zone7を定義します。こちらのZoneはConveyor2がSensor3=True(箱が検知した)するまでONする動作を作ります。

Zone7を定義します。こちらはConveyor2で箱を搬送する動作を作ります。
Zone Inputをi_xSensorB3の反転信号に定義します。
Zone Outputをo_xConveyro2に定義します。
そしてZone OutputのOutput Group ”Conveyor2”に設定します。
Zone8:End
Zone8を定義します。こちらのZoneはConveyor2がSensor3=False(箱が運び終わった)するまでONする動作を作ります。

Zone In-Outを定義します。
Zone Inputをi_xSensorB3信号に定義します。
Zone Outputをo_xConveyro2に定義します。
そしてZone OutputのOutput Group ”Conveyor2”に設定します。
Output Group?
ここでOutput Groupの説明します。
こちらはGroup設定したOutputです。
こちらはGroup設定しなかったOutputです。みなさんも気付いたかもしれませんが、Group設定したOutputはOR条件で出力する代わりに、Group設定しなかったOutputはSelmo Basic LibarayのMethodから直接出力します。
なので、複数のZoneで同じ出力をON/OFF制御したい場合、Group設定する必要があります。その設定をしなかったら、出力の更新動作が変になります。
Generate Code
ここまできて、Generate PLC-CodeでPLCコードを生成します。
Import the PLC Code
Applicationを選択した状態でProject>Import PLCOpenXMLをクリックします。
すべて選択し、OKで進みます。
Done!
Import Libaray into Codesys
Selmo StudioでCodesysのSelmo ライブラリをExportし、Codesysにインストールします。
Libarary Repositoryをクリックします。
Installをクリックします。
先ほどExportしたライブラリを選びます。
最後はAdd LibraryでSelmo Basic Libarayを追加します。
Program
次はGlobalControl()とGlobalUtilities()を呼び出します。
Configure OPC UA in Factory IO
FactoryIOにOPC UA Serverとして設定してください。
IOをOPC UA ServerとMappingします。
Configure the OPC UA Target
Target SystemでCodesys TargetするHardwareを設定します。
Generate HMI
今回の記事ではHMIの設定を説明しませんが、Selmo Studioでは自動的にHMIを生成することができます。Generate HMI and start the executableをクリックします。
Done!HMIが自動生成され、起動しました。
Go to Auto Mode
赤枠のボタンをクリックしMenuを展開します。
Done!
AutomをクリックしシステムをAutoModeにシフトします。
下図のような操作になります。
Start!
HWZoneのボタンを3秒長押しでStartします!
Done!シーケンスが起動しました。
Monitor From Selmo Studio
System LayerでConenct to PLCのボタンをクリックすれば、Selmo Studioから現在状態を監視できます。
Done!
Result
こちらの動画で実際の動作を確認できます。