今回の記事では、Selmo StudioでBeckhoff TwinCAT3やPLCOpenXML対応したモデル定義からPLCのコードを自動生成できる次世代のSolutionについて紹介します。Selmo StudioさまからTrialライセンスを貸してくださって本当にありがとうござます。
さ、はじめよう!
Selmo?
Selmoは2018年にSelmo Automation GmbHが設立され、続いて2019年にSelmo Technology GmbHが設立されました。2021年には国際特許出願を行い、2022年には状態爆発の問題を解決する学術的証明を達成し、権威あるオーストリアの国家特許賞にノミネートされた、次世代のAutomation Solutionを提供する会社です。
Selmo Studio?
Selmo Studioはソフトウェアの開発時間を大幅に短縮できるSolutionでもあり、いままで手作業によるプログラミングの代わりに、プロセスモデリングとエラーのないPLCコードへの自動変換を実現できます。それにより、プログラミングの知識がない人でも効率的に機械を自動化することができます。
Selmo Studiohaはすべての機械状態を自動的に定義し、エラーのないPLCコードに変換できる優秀なSolutionです。Drag-and-dropのみでプログラムし、プログラミングスキルのないユーザーでも、簡単かつ効率的にSelmo Studioを使用することができます。
4 steps to your ready-to-use software
Selmo Studioでコードを自動生成するには大きく4つのStepがあります。
Step1 Model the Process
まず機械のProcessを定義し、必要な機能に基づいてモデルに変換します。そのとき必要な操作はDrop-Down のみです。
Step2 Generate PLC and HMI
次はStep1から作成したモデルから、PLC コード(PLCopen XML)と HMI を生成します。
Step3 Choose the target system
PLC コードをエクスポートするターゲットシステムを選択するだけです。モデルはあらゆる PLC オープンハードウェア用に生成できます。
Step4 Implement & go live
コードを生成した後、ターゲットシステムに実装すれば完成です。あなたが必要な作業はIOチェックのみを行い、そしてSelmo Studioで自動生成されたHMIでシステムを起動し、コミッショニングするだけです。
Installation
Selmo からインストールのFileをいただき、インストールを起動します。
Selmo Stuidoは.NET Core -6.0.11以上が必要がありまして、PCがインストールされていない場合はエラーが発生します。
.NET 6.0
下記のLinkから.NET 6.0をDownloadします。
DownloadされたFileを起動します。
Installで進みます。
しばらくまちます…
Done!
Again
今回はSelmo Stuidoのインストールにはエラーがなくなりました。Nextで進みます。
ライセンスを同意しNextで進みます。
Completeをインストールすのが一番無難でしょう。
Installボタンをクリックし進みます。
しばらくまちます…
Done!
Start your Application!
DesktopにSelmo StudioのShortCutが自動的に作成されましたので、アプリケーションを起動しましょう。
しばらくまちます…
Enter License
Selmo Studioを使用するにはライセンスが必要です。
OKをクリックするとライセンスのインストール画面に変わります。
もしSelmoからTrial Softwareをもらった場合、彼らからライセンスFileも一緒に送ってくれるはずですので、ここで”Install Product License from File”をクリックします。
ライセンスを選び>Openします。
Done!
ライセンスがActivateされました。
そしてSelmo Studioも起動しました!
New Project
今回の記事ではまず簡単な操作からSelmo Studioの操作・考え方などを説明しながら進めようと思います。
Selmo Studio
File>New Projectで新規プロジェクトを作成します。
プロジェクトの保存先を設定します。
Done!新規プロジェクトが作成されました。
Project Stucture
次の説明を進める前に、まずSelmo Studioのプロジェクト構造を説明します。
- プロジェクトの最上位レベルはPlantと呼ばれ、システム全体を表します。
- Plantは常に少なくとも1つのサブレベルのHardwarezoneがあります。
- Hardwarezoneには、1つ以上のSequenceを持つことができます。
- そのSequenceは、常に1つのHardwarezoneしか割り当てられません。
- そのSequenceは、論理的なプロセス記述を定義するSub-Systemです。
- そのSequenceは、また以下の部品をもっています。
- Logic Layer:プロセスを記述する
- System Layer:Zoneの状態を定義する
- MXIC:Manual modeのインタロックを定義する
- CMZ:Zoneの状態を監視する
Plant
産業界ではPlantという言葉は、製品や原材料の製造や加工に使用される施設や設備を表現しています。例えば工場、プラント、発電所、製油所…などなど。このような”Plant”では多くの場合、製品を生産したり原料を加工するために、特定のシーケンスで作動する複数のユニットがあります。Plantは非常に大規模で複雑な場合もありますし、運転や維持には専門的な知識や技術が必要になることが多く、一般的には複数のエンジニア、技術者、労働者など、複数の専門家と一緒に協力しPlantを運転します。Selmo Studioにある”Plant”はそのことを示しています。
HWZ(Hardware Zone)
HwZoneでは自動制御と手動制御があるマシンまたはセル・エリアの特定のエリアを示しています。各HwZoneには自分の構成があり、その規模はマシンまたはセルの構成に依存され、また1つや複数のシーケンスから制御されています。Selmo Studioにある”Hardware Zone”がそのことを示しています。
Sequence
Sequcnseとは、あらかじめ定義されたステップや状態のシーケンスを実行する制御システムでもあります。例えばStep Controllerでは複数のメモリも搭載しており、各Stepの動作や状態を表現しています。そんなStep Controllerは外部入力や内部ロジック制御されます。Selmo Studioにある”Sequence”がそのことを示しています。
Create Logic
Selmo Studioでは製造機械のロジックはLogic LayerとSystem Layer2つのレイヤーに分けられています。
Logic Layer
Logic Layerには、マシンの技術的要件が含まれ、Selmo Studioには5種類の部品が提供され、個々のステップ間の関係を表現できます。
System Layer
System Layerは、機械と他のシステムとのインターフェースなどを定義します。
Logic Layer
最初にLogic Layerから機械のStepを作成しましょう。
先程Logic Layerは5種類の部品が提供していますと言いましたが、それは:
- Step
- Timer
- Decision
- Jump
- Repeater
になります。
Step1:Wait Button Press
Step1ではボタンの動作をTrueになるまで待機しますので、Step部品をFlowに追加します。
Done!Step部品が追加されました。
Stepの名前は自由に変更できます。変更したい場合は直接部品をダブルクリックしてください。
Done!Step1はPress a Buttonという名前に変わりました。
Step2:Timer
ボタンが押されたあと5秒待ちたいので、Timer Stepを追加します。
Done!Timer Stepが追加され、先程の”Press a Button”のStepと繋がりました。
もちろんLogic Layerの修正自由度が大きく、部品も場所も自由に変更できます。
Step3:Turn on the Lamp
今度は5秒待ったらLampの出力をTrueにするStepを追加します。
Done!
Step4,Step5
先程と同じ操作で5秒待ちのTimerとLampの出力をFalseにするStepを追加しましょう。それで今回記事のLogic Layerの追加は可能です。
System Layer
Logic Layerの作成が完了したら、今度はSystem Layerを編集します。System Layerでは:
- プログラムがモデル化される
- ゾーンが定義される
- マシンの状態や監視を定義する。
になります。
各Zoneでは’0′, ‘I’,’S’, ‘M’, ‘D1’, ‘D2’, ‘J’, ‘C’のOperandsを設定できます。
Zone?
System LayerのStepを定義する前にZoneの考え方を説明します。Zoneでは用途と要件により、システムの異なるエリアを定義し、コントロールすることができます。Selmo Studioでは異なるZoneの機能やPropertiesをしっかり把握することが大事で、Selmo StudioにはつのZoneが分かれています。
- In
- InOut
- Out
- Mem
また、特定のアクションをトリガまたはチェックするためにZoneで使用できるオペランドにもあります。
Zone In-?
Zone-InはSensorや入力だとイメージしやすいと思います。特にSelmo Studioではアプリケーション中にあるSensorは、必ずZone-Inを使用する必要があります。センサー
センサーは1つの入力信号だけをシステムに送り、常にTrue・False状態を監視します。
Assignment of signals
実際Selmo Studio上でコード生成したあと、すべてZone-Inの信号もInputMappingにあります。
Zone-IN-out?
Zone-In-Outはデバイスが出力しながらなにかのFeedbackをシステムに返すことを表現しています。例えば:
- 位置センサーがついているシリンダーがある方向に動作します。Zone-In-Outはその位置センサーのFeedbackに期待する。
- Servo MotorがあるPositionに位置決めします。Zone-In-OutはそのServo Motorの現在値Feedbackを期待する
Assignment of signals
実際Selmo Studio上でコード生成したあと、すべてZone-In-Outの信号もInputMappingにあります。
Zone-OUT?
Zone-OutではFeedbackなしの出力だとイメージしやすく、例えばランプ、Buzzerやactuators 出力などに該当します。ですが、Zone-Outは出力状態の不確実性につながるため、可能であれば避けるべきだと思います。
Assignment of signals
実際Selmo Studio上でコード生成したあと、すべてZone-Outの信号もOutputMappingにあります。
Add Zone!
Zoneを追加するには、Add Zonesのところから直接Zone InやZone Outをクリックすればよいです。今回の記事ではZone-IN1つ、Zone-In-Out2つ、Zone-Outは1つに定義します。
Operands?
先程各Zoneでは’0′, ‘I’,’S’, ‘M’, ‘D1’, ‘D2’, ‘J’, ‘C’のOperandsを設定できますと書きましたが、今回記事で使用したOperandsを紹介させていただきます。
I:Interlock
Interlockは、入力信号の状態を監視するOperandであり、Stepの遷移を制御するために、Monitorされた信号がTrueになる必要があります。
S:Sequence Check
SはZoneのStepに設定できるOperandsでもあり、Zoneに関連する信号(例えば入力)のブール値変化をチェックします。その信号の状態変化は遷移と呼ばれ、つまり0から1の変換をだと考えたらイメージし易いと思います。状態遷移が完了したら、Step Counterが加算されます。
Zone-In-OutでSを使用することにより、出力のFeedback信号をMonitorしたり、Timer Delayしたりすることも可能です。
簡単にまとめると、SはStep間の遷移や監視をする役割であります。
0: don’t care
Zoneが信号を監視しないOperandsになります、0がOutput Zoneに設定された場合、出力がFalseになります。
Step1 Press a Button
Step1ではInput Buttonの信号待ちです、OperandsがIに設定しました。
まず、この#1はLogic Layerの”Press a Button”に該当します。
そして”Press a Button”のInterlock信号は実際Selmo Studioの”i_Push”信号として定義され、Input MappingにもComment-outの形として宣言されています。
Step2 Timer
Step2は5sのタイマーなので、”S”を設定します。
Step3 Turn On the Lamp
Step3はLampをTrueに出力させます。
そして”Turn On the Lamp”は実際Selmo Studioの”q_Lampout”信号として定義され、Output MappingにもComment-outの形として宣言されています。
Step4 Timer
Step4は5sのタイマーなので、”S”を設定します。
Step5 Turn Off the Lamp
Stepは5sのタイマーなので、”S”を設定します。
Target System
Target system>Select Target Systemからコードの実行環境を設定します。
今回の例ではBeckhoff TwinCAT3になります。
Generate Code
ここまできたら、Generate>PLC-Codeでコードを生成します。
コードの生成先を設定します。
Export Library
Selmo Studioの専用ライブラリをExportするため、Tools>PLC Libraries>Export PLC Library “SELMOcoreTwinCAT3_XXX”をクリックします。
Export先を設定し、LibraryをExportしましょう。
Beckhoff Side
Selmo Studioからコードを生成しましたので、TwinCAT3でこのコードをImportします。
Add library
Referenceをクリックし、Selmo Studio専用のライブラリをImportします。
Library repositoryをクリックします。
Installをクリックします。
先程ExportしたLibrary Fileを選択します。
Done!Selmo Studioの専用ライブラリがImportされました。
次はAdd Libraryでライブラリを追加します。
Applicationの中にある”Selmo basic”と”Util”を追加しましょう。
Done!
Import
次はコードをImportするため、Folderに右クリック>Import PLCOepnXMLを選択します。
Okで進みます。
Done!
Mapping
今度は各Zoneにある入出力をMappingします。下記はSequence1_InputMappingのプログラムです。
実際アプリケーションで使用する変数と紐づけましょう。
下記はSequence1_OutputMappingのプログラムです。
実際アプリケーションで使用する変数と紐づけましょう。
Call
MainプログラムでGlobalControlとGlobalUtilitiesプログラムを呼び出します。
Download
最後はActivate ConfigurationでプログラムをDownloadします。
Okで進みます。
TwinCAT RuntimeをRun Modeに切り替えます。
Result
Done!いまi_PushがTrueになると、q_Lampは5s ON・5s Offという簡単な制御をしました。
Finally..
Selmo Studioを軽く使用した感想としては、Solutionは非常に優れていて、コードを自動生成するまではほぼなにもプログラムも書きませんでした。ですが、コードを自動生成するには、実際に必要なのはプログラムする知識だけではありません。プログラムする人は機械に対するさらに深い理解・全体像がどこまで把握できないかも重要になります。さらに、コード生成ツールを使用することは、先程言ってた機械の理解だけではなく、PLC Runtimeに対するプログラム知識にも高く求められています。
ですが、これからもSelmo Studioという優秀なSolutionを発信し続けたいと思っています。
(もしSelmoさまがまたライセンス貸してくれたの話ですが)
No matter how much technology evolves, I think we have to do the muddy part.
技術がどんなに進化しても、泥臭いところは私たちがやらないといけないと思うんだ。