Beckhoff#SPT Framework_Part1

今回の記事ではSPT Frameworkを紹介します。最初はSPT FrameWorkの基本な考え方・Function Block・Interfaceを説明し、次はFB_DigitalSensorのFunction Blockを使用しSimulationモードとEtherCAT IOを実装します。

EtherCAT IOがPhoenixContactのAXL E EC DI8 DO8 M12 6Pになります。

さ、始めましょう!

Video

自分のSPTフレームワークの紹介ビデオとライブコード動画です。

SPT Application Framework?

SPT Application Frameworkは機械制御ソフトウェアを標準化するためのライブラリとパターンのコレクションで、Beckhoff USAがメンテナンスや管理を行っています。

Libraries

SPT FrameworkはPackMLライブラリを利用することで、制御プログラムを作成するための定義された状態の管理ができるようになります。制御設計で重要な要素は、適切なコマンドを適切なタイミングで与えることで、機械の他の部分と連携することであります。


Cyclic Logic vs Single Method Calls

SPT Frameworkは、M_ExtendCylider や M_ResetAxis のように、特定の制御を呼び出し実行するためにMethodを使用します。これらのMethodは場合によって一回だけの呼び出しや複数の呼び出しも可能です。(例えばMethodが実行成功になるまで)

さらに、SPT Frameworkは、特定のステート中にコマンドを呼び出すためのメソッドを使用できます。例えば、ModuleをリセットするためにResetting Methodを必要なタイミングで呼び出し状態をリセットしたりします。

また、SPT FrameworkはCyclic method callsを使用し、モジュール状態を監視し、変化するとAlarmやFaultに、他の状態に切り替えることもできます。

SPT Base Types

SPT Framework LibraryのほとんどのFunction Blockは、FB_CyclicFBを継承してI_CyclicFBを実装することによって、初期化・呼び出し方などに共通のパターンを使用します。

FB_CyclicFBでは、InitComplete Properties経由でLocal変数_InitCompleteにアクセスし、該当するFunction Blockの初期化状態を確認できます。これによって、Function Blockが必要な初期化ステップがすべて実行されたことを保証することができます。(例えば、ポインタを参照する前にポインタが初期化されていることを確認するなど)

Interface

I_BaseFB

SPT Frameworkで使用されるFunction Blockの一番基本的な機能を定義します。

Properties
PropertyTypeRead/WriteDescription
BusyBOOLR1=Function BlockがTask実行中
ErrorBOOLR1=Function Blockがエラーあり
ErrorIDUDINTRエラー情報

I_CyclicFB

こちらのInterfaceはI_BaseFBから拡張されたんです。I_CyclicFBはI_BaseFBに加え、CyclicLogic()をMethodを追加し周期で呼び出すための機能が定義されました。

Properties
PropertyTypeRead/WriteDescription
InitCompleteBOOLR1=Function Blockが使用可能
Methods
MethodTypeReturnDescription
CyclicLogicBOOLnull制御プログラムを周期で実行する

Function Block

FB_BaseFB

こちらはabstract Function BlockでI_BaseFBから実装されたものです。FB_BaseFBはすべての I_BaseFB Propertiesを含め、SPT Framework機能の最も基本的な構成要素です。

FB_CyclicFB

(abstract, extends FB_BaseFB, implements I_CyclicFB)

FB_CyclicFBはすべての I_CyclicFBのプロパティが含まれ、 CyclicLogic()を利用し周期ロジックを実行します。

SPT Components

こちらはI_ComponentBase を実装したFunction Blockです。

Interface

I_ComponentBase

SPT Components に必要な基本機能を定義するInterfaceです。

Properties
PropertyTypeRead/WriteDescription
CurrentAlarmSeverityTcEventSeverityR現在アクティブなイベントの中で、最も重大度が高いものを返します。
InSimulationBOOLRWTrue=該当する部品がSimulation中
NameSTRINGRW部品名
ParentResponseDefinitionsARRAY[0..4] OF E_AlarmResponseRW
Methods
MethodTypeReturnDescription
AllowHMIControlBOOLnull部品がHMI経由の外部機能を許可する
BlockHMIControlBOOLnull部品がHMI経由の外部機能をブロックする
ResetBOOLnull部品のエラーをリセットする

I_DigitalSensorBase

SPT FrameWorkのデジタルセンサーの機能を定義するInterfaceになります。

Function Block

FB_ComponentBase

(abstract, extends FB_CyclicFB, implements I_ComponentBase)

I_ComponentBaseとFB_CycliceFBの機能が揃えられたFunction Blockで、すべてのPROTECTEDメソッドは、はSUPER^.Method()を使用して呼び出す必要があります。

FB_DigitalSensor

FUNCTION_BLOCK FB_DigitalSensor EXTENDS FB_ComponentBase IMPLEMENTS I_DigitalSensorBase

こちらはデジタル信号用の基本的なFunction Blockで、ローカル定義の HardwareInput AT %I* : ハードウェアにリンクするための BOOLも含まれています。

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です。

Program

こちらはFB_DigitalSensorの使用したプログラム例です。

PROGRAM MAIN
VAR

Sensor :FB_DigitalSensor;
Simulate :BOOL;
Activte :BOOL;
t1,t2 :TIME;
Traced :BOOL;
inData :BOOL;
END_VAR


Sensor.SimulationMode:=E_SensorSimulationMode.InputDriven;
Sensor.Name:=’My Sensor’;
Sensor.InSimulation:=Simulate;
Sensor.SimulationInput:=inData;

Activte:=Sensor.Active;
t1:=Sensor.TimeActive;
t2:=Sensor.TimeInactive;

Sensor.CyclicLogic();

IF t1 >= T#5S THEN

IF NOT Traced THEN
Traced:=TRUE;
Sensor.Trace(Message:=’The sensor is on more than 5s’);
END_IF
ELSE
Traced:=FALSE;
END_IF

Result

SensorというInstanceを展開してFBの状態を確認しましょう。

_InitCompleteがTrueになり、初期化が成功したことを示しています。

_Nameはプログラムで設定したデバイス名を示しています。

_SimulateがFalseになり、シミュレーションモードがOffになっています。

Sensor.InSimulationをTrueにすることによって、シミュレーションモードを開始します。

_SimulateがTrueになり、いまFBがシミュレーションモードに変わりました。

Sensor.SimulationInputをTrueすると、Sensor.ActiveがTrueになります。

つまりいまSensorがONになってる状態を示しています。

Connect with EtherCAT IO

次は実際のEtherCAT IOと繋がります。I/O>Deviecs>Add New ItemでEtherCAT Masterを追加します。

Done!EtherCAT Masterが追加されました。

SearchでNetwork Adapterを設定します。

EtherCAT Networkとして使用するNetwork Adapterを設定します。

Done!

Add New Slave

EtherCAT Masterを右クリック>Add New Itemで新しいEtherCAT Slaveを追加します。

今回使用するAXL E EC DI8 DO8 M12 6Pを選択し、Okで追加します。

Done!

Link Variables

Sensorと接続してるChannelを右クリック>Change Linkします。

Sensor.HardwareInputはFB_DigitalSensorのProcessIO変数です。

Result

こちらのYoutube動画で動作確認できます。

Download Sample Project

GithubからサンプルプロジェクトをDownloadできます。

https://github.com/soup01Threes/TwinCAT3/blob/main/TwinCAT%20_SPTFrameWork_Example01.tnzip

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

シェアする

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

フォローする