今回の記事ではSPT Frameworkを紹介します。第2話はFB_SingleSolenoidとFB_SingleSolenoidFeedbackを紹介し、またFactoryIOとOPC UA連携して実際の動作を検証します。
さ、FAを楽しもう。
Reference Link
Reference Video
自分のSPTフレームワークの紹介ビデオとライブコード動画です。
Download Library
下記のGithubからBeckhoff USAのSPT ライブラリをDownloadできます。
https://github.com/Beckhoff-USA-Community/SPT-Libraries
DownloadされたZIPを解凍します。
Add Library
SPTライブラリを追加するため、References>Add Libraryします。
Advancedボタンをクリックします。
Library Respository..を開きます。
Library Respositoryの設定画面が表示されました。
Edit LocationsをクリックしLibraryの格納Locationを追加します。
Add で新しいライブラリを追加します。
…をクリックします。
先程GithubからDownloadされたライブラリにSPT-Libraries-main>Library Repositoryを指定します。
Nameは特に指定する必要がありませんが、今回は仮にSPTにします。
Done!
CompanyにBeckhoff Automation LLC(つまりBeckhoff USA)が作ったライブラリが見えました。
中にSPT Driversなどのライブラリがあります。
あとはAdd Libraryを使ってSPT ライブラリをプロジェクトに追加すればOKです。
Implementation1
最初にFB_SingleSolenoidを紹介します。
FB_SingleSolenoid
FB_SingleSolenoidは単一のソレノイド(オン => EXTENDコマンド)とフィードバックなしのシリンダを表Function Blockになります。
- extends FB_ComponentBase
- implements I_Solenoid
こちらはFB_SingleSolenoidの図になります。
Properties
こちらはFB_SingleSolenoidのPropertyの説明になります。
- R=読み
- W=書き込む
Property名 | データ・タイプ | アクセス | 用途 |
Extended | BOOL | R | TRUE=シリンダーがEXTENDされていた |
ExtendedOutput | BOOL | R | TRUE=EXTENDコマンド発行中 |
ExtendTime | LREAL | RW | EXTENDのタイムアウト時間の取得/設定(ミリ秒単位) |
Retracted | BOOL | R | TRUE=シリンダーがRetractedしていた |
RetractOutput | BOOL | R | TRUE=Retractedコマンド発行中 |
RetractTime | LREAL | RW | retractのタイムアウト時間の取得/設定(ミリ秒単位) |
Methods
こちらはFB_SingleSolenoidのPropertyの説明になります。
Method名 | 戻り値データ・タイプ | 用途 |
Extend | null | シリンダーをExtend出力するコマンド |
Retract | null | シリンダーをRetract出力するコマンド |
MAINプログラム
次はTwinCAT3でプログラムを作成しましょう。
GVL
こちらはシステムを手動モードに指定するか設定する変数です。
VAR_GLOBAL xManualMode:BOOL; END_VAR |
GVL_OPCUA
こちらはFactory IOのOPC UA Serverと接続するための変数です。
{attribute ‘qualified_only’} VAR_GLOBAL {attribute ‘OPC.UA.DA’ := ‘1’} qReturn:BOOL; END_VAR |
VAR
こちらはImplementation1で使用した変数になります。
- Pusher0はFB_SingleSolenoidのInstanceです。
- xExtendCmdは手動モードではないとき、Pusher0をExtendComd発行できます。
- xManualModeはPusher0を手動モードに切り替えます。
PROGRAM MAIN VAR Pusher0:FB_SingleSolenoid; xExtendCmd:BOOL; xManualMode:BOOL; test1:LREAL; END_VAR |
Code
こちらはPusher0の制御部分になります。
Pusher0.Name:=’Pusher0′; Pusher0.CyclicLogic(); IF xManualMode THEN Pusher0.AllowHMIControl(); ELSE Pusher0.BlockHMIControl(); END_IF; IF NOT xManualMode THEN IF xExtendCmd THEN Pusher0.Extend(); ELSE Pusher0.Retract(); END_IF END_IF; GVL_OPCUA.qReturn:= Pusher0.Extended; |
Pusher0.Name:=’Pusher0′;
Pusher0のデバイス名を設定します。
Pusher0.CyclicLogic();
Pusher0の周期ロジックプログラムを有効にします。
Pusher0.Extend();/Pusher0.Retract();
Pusher0のExtendやRestractコマンドを手動モード以外のときに発行するMethodを呼び出し
ます。
GVL_OPCUA.qReturn:=Pusher0.Extended;
Pusher0の出力状態をFactoryIOに反映させます。
Visualization
Result
こちらの動画はFB_SingleSolenoidとFactoryIOを連携した動画です。
Beckhoff.Playing FB_SingleSolenoid and Factory IO
Imeplementation2
次はFB_SingleSolenoidFeedbackを紹介します。
FB_SingleSolenoidFeedback
FB_SingleSolenoidFeedbackは単一のソレノイド(オン =>EXTENDコマンド)と、extended/retractedを示すフィードバック・デバイスを持つシリンダを表すラFunction Blockになります。また、アクチュエータの実際の状態がタイムアウト時間よりも長く異なる場合にスローされるアラーム機能を含みます。
- extends FB_SingleSolenoid
こちらがFB_SingleSolenoidFeedbackの図になります。
Properties
こちらはFB_SingleSolenoidFeedbackのPropertyの説明になります。
- R=読み
- W=書き込む
Property名 | データ・タイプ | アクセス | 用途 |
ExtendedInput | BOOL | W | EXTENDEDフィードバック装置の状態設定 |
RetractedInput | BOOL | W | RETRACTEDフィードバック装置の状態設定 |
MAINプログラム
次はTwinCAT3でプログラムを作成しましょう。
GVL_OPCUA
こちらはFactory IOのOPC UA Serverと接続するための変数です。
{attribute ‘qualified_only’} VAR_GLOBAL {attribute ‘OPC.UA.DA’ := ‘1’} qReturn:BOOL; {attribute ‘OPC.UA.DA’ := ‘1’} iSignleSolExtFeedback:BOOL; {attribute ‘OPC.UA.DA’ := ‘1’} iSignleSolRetFeedback:BOOL; {attribute ‘OPC.UA.DA’ := ‘1’} qSignleSolCoomand:BOOL; END_VAR |
VAR
こちらはImplementation2で使用した変数になります。
- Pusher2はFB_SingleSolenoidFeedbackのInstanceです。
- xExtendCmdは手動モードではないとき、Pusher0をExtendComd発行できます。
- xManualModeはPusher2を手動モードに切り替えます。
- 今回の記事では実機がありませんので、xSimはPusher2をSimulation Modeに振り返るためのデバイス
PROGRAM pSingleSolWithFeedback VAR Pusher2:FB_SingleSolenoidFeedback; xManualMode:BOOL; xSim:BOOL; xGO:BOOL; END_VAR |
Code
こちらはPusher2の制御部分になります。
xManualMode:=GVL.xManualMode; Pusher2.Name:=’Pusher2′; Pusher2.CyclicLogic(); Pusher2.InSimulation:=xSim; Pusher2.ExtendedInput:=GVL_OPCUA.iSignleSolExtFeedback; Pusher2.RetractedInput:=GVL_OPCUA.iSignleSolRetFeedback; IF xManualMode THEN Pusher2.AllowHMIControl(); ELSE Pusher2.BlockHMIControl(); END_IF; IF NOT xManualMode THEN IF xGO THEN Pusher2.Extend(); ELSE Pusher2.Retract(); END_IF END_IF; GVL_OPCUA.qSignleSolCoomand:= Pusher2.Extended; |
Pusher2.Name:=’Pusher2′;
Pusher2のデバイス名を設定します。
Pusher2.CyclicLogic();
Pusher2の周期ロジックプログラムを有効にします。
Pusher2.InSimulation:=xSim;
Pusher2をSimulationモードに切り替えます。
Pusher0.Extend();/Pusher0.Retract();
Pusher0のExtendやRestractコマンドを手動モード以外のときに発行するMethodを呼び出し
ます。
Pusher2.ExtendedInput:=GVL_OPCUA.iSignleSolExtFeedback;
FactoryIOのSensorシミュレーション状態をOPC UA経由でTwinCAT3にFeedbackします。
GVL_OPCUA.qReturn:=Pusher2.Extended;
Pusher2の出力状態をFactoryIOに反映させます。
Visualization
SPT FrameworkにあるHMI機能を活かすため、VisualizationにSPT FrameworkのHMI構造体をパラメータとして使用し、Templateを作成します。
Result
こちらの動画はFB_SingleSolenoidFeedbackとFactoryIOを連携した動画です。