Beckhoff#SPT Framework_Part3_FB_BasicAxis

こちらの記事ではBeckhoff USAのSPT Frameworkを紹介するシリーズになります。第3話はFB_BasicAxisを説明し、Virtual軸と一緒に動作検証します。

さ、FAを楽しもう。

Reference Link

Beckhoff#SPT Framework_Part1
Beckhoff#SPT Framework_Part2_FB_SingleSolenoidFeedback

Reference Video

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

前書き

いつも私の技術ブログとYouTubeチャンネルをご覧いただき、心より感謝申し上げます。また、いまFullさん(full@桜 八重 (@fulhause) / X)と共に毎週水曜日の夜にお届けしている「高橋クリス」ラジオ番組を運営しています。

現在、私達の活動はほぼ無償で続けており、より多くのコンテンツを提供するためには、皆様の温かいご支援が大変重要です。もし可能であれば、以下のリンクから応援していただけると大変嬉しく思います。

高橋クリスのメンバーシップ

こちらはFullさん(full@桜 八重 (@fulhause) / X)と共にやっているラジオにメンバーシップを登録いただけます。

https://note.com/fulhause/membership/join

AMAZON ギフトリスト

こちらは自分のブログのコンテンツ制作や設備の充実に大いに役立てさせていただきます。

https://www.amazon.co.jp/hz/wishlist/ls/H7W3RRD7C5QG?ref_=wl_share

Patreon

こちらは自分のブログのコンテンツ制作や設備の充実に対する小さな応援の気持ちのPatreonです。

https://www.patreon.com/user?u=84249391

皆様のサポートが、私たちの活動をより充実させる力となります。

どうぞよろしくお願いします。

メールアドレス(*=@)

soup01threes*gmail.com

X

https://x.com/3threes2

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

Implementation

最初にFB_BasicAxisを紹介します。FB_BasicAxis を使用することで、単軸のJOG動作から位置決めまで簡単にできるメリットがあります。また、PackML コンポーネントとして使用する場合は、FB_Component_BasicAxis を使用してください。FB_Component_BasicAxisは次回の記事でご紹介します。

また、CyclicLogic()ははプログラムに常に呼び出す必要があり、そして各コマンドではTRUEとしてReturnされますが、それはあくまでも”コマンドを受け付けました”だけなので、実際コマンドの実行状態を確認するには”Busy”を監視してください。

Methods

FB_BasicAxisにはたくさんの実用的なMethodが実装されていますが、今回の記事で使用したMethodのみを説明します。

Method名Return値説明
DisableBOOL軸を無効にする
EnableBOOL軸を有効にする
HomeBOOL軸をホーム動作する
JogBOOL軸をJog動作する
MoveAbsoluteBOOL軸を絶対位置決め動作する
MoveRelativeBOOL軸を相対位置決め動作する
MoveVelocityBOOL軸を定速動作する
ResetBOOL軸をリセットする

Properties

FB_BasicAxisにはたくさんの実用的なPropertiesが実装されていますが、今回の記事で使用したPropertiesのみを説明します。

Properties名タイプ説明
ActualAccelerationLREAL GET軸の実際の加速度を取得
ActualPositionLREAL GET軸の実際の位置を取得
ActualVelocityLREAL GET軸の実際の速度を取得
EnabledBOOL GETTRUE=軸が有効した
VelocityLREAL SET軸の速度を設定する
InPositionBOOL GETTRUE=軸が目標位置ウィンドウ内にある
MoveAbsoluteBOOL絶対移動を開始する
MoveRelativeBOOL相対移動を開始する
MoveVelocityBOOL連続速度移動を開始する
JogBOOLJog移動を開始する

pSPTMotion

こちらはFB_BasicAxisを使用し、仮想軸を制御するプログラムです。

VAR

こちらはプログラムに使用する変数を定義します。

PROGRAM pSPTMotion
VAR
myAxis:FB_BasicAxis;
END_VAR

VAR
xInitCompleted:BOOL;
xEnable:BOOL;
xEnabled:BOOL;
xHome:BOOL;
xHomed:BOOL;
xJogFW,xJogBW:BOOL;
rCurrentVel,rCurrentPosition:REAL;
rVel,rVel2,rJogSpeed:REAL;
xReset,xError:BOOL;
rVelSpeed:REAL;
xMoveVel:BOOL;
xMovingVel:BOOL;
xMoveAbs,xMoveRel:BOOL;
rAbsVel,rRelVel:REAL;
rPositon,rDistance:REAL;
stMCStatus:ST_AxisStatus;
xSetPosition:BOOL;
xInPosition:BOOL;

END_VAR

Program

こちらは実際のプログラムです。

xInPosition:=myAxis.InPosition;

//Run Cyclic Logic
myAxis.CyclicLogic();

//Status
rCurrentVel:=myAxis.ActualVelocity;
rCurrentPosition:=myAxis.ActualPosition;

xError:=myAxis.Error;

//Enable
IF xEnable THEN
myAxis.Enable();
ELSE
myAxis.Disable();
END_IF

xEnabled:=myAxis.Enabled;


xInitCompleted:=myAxis.InitComplete;

//Home
IF xHome THEN
myAxis.Home();
xHome:=FALSE;
END_IF

//Reset
IF xReset THEN
myAxis.Reset();
xReset:=FALSE;
END_IF;

//Move Vel
IF xMoveVel THEN
xMovingVel:=myAxis.MoveVelocity(Velocity:=rVelSpeed,FALSE);
END_IF;

//Move Abs
IF xMoveAbs THEN
myAxis.Velocity:=rVel;
myAxis.MoveAbsolute(Position:=rPositon,FALSE);
END_IF

//Move Rel
IF xMoveRel THEN
myAxis.Velocity:=rVel2;
myAxis.MoveRelative(Distance:=rDistance,FALSE);
END_IF

//Get Status
stMCStatus:=myAxis.Axis.Status;

//Jog
myAxis.Jog(
JogFW:=xJogFW
,JogBW:=xJogBW
,JogMode:=E_JogMode.MC_JOGMODE_CONTINOUS
,Position:=1.0
);
IF xJogBW OR xJogFW THEN
myAxis.Velocity:=rJogSpeed;
END_IF

//Busy
IF myAxis.Busy THEN
xMoveRel:=FALSE;
xMoveAbs:=FALSE;
xMoveVel:=FALSE;
END_IF

こちらは軸の現在Position Windows内にいるかを確認します。

xInPosition:=myAxis.InPosition;

こちらはFB_BasicAxisの周期ロジックを実行します。

//Run Cyclic Logic
myAxis.CyclicLogic();

こちらは軸の現在速度・現在位置・エラー状態を取得します。

//Status
rCurrentVel:=myAxis.ActualVelocity;
rCurrentPosition:=myAxis.ActualPosition;

xError:=myAxis.Error;

こちらは軸を有効・無効にします。

//Enable
IF xEnable THEN
myAxis.Enable();
ELSE
myAxis.Disable();
END_IF

xEnabled:=myAxis.Enabled;

こちらは軸の初期化状態をCheckします。

xInitCompleted:=myAxis.InitComplete;

こちらは軸のホーム動作を実行します。

//Home
IF xHome THEN
myAxis.Home();
xHome:=FALSE;
END_IF

こちらは軸をリセットします。

//Reset
IF xReset THEN
myAxis.Reset();
xReset:=FALSE;
END_IF;

こちらは軸に連続速度移動コマンドを発行します。

//Move Vel
IF xMoveVel THEN
xMovingVel:=myAxis.MoveVelocity(Velocity:=rVelSpeed,FALSE);
END_IF;

こちらは軸に絶対位置決めコマンドを発行します。

//Move Abs
IF xMoveAbs THEN
myAxis.Velocity:=rVel;
myAxis.MoveAbsolute(Position:=rPositon,FALSE);
END_IF

こちらは軸に相対位置決めコマンドを発行します。

//Move Rel
IF xMoveRel THEN
myAxis.Velocity:=rVel2;
myAxis.MoveRelative(Distance:=rDistance,FALSE);
END_IF

こちらは軸の状態を取得します。注意するのは、プログラム内にはSPT Frameworkを使用していますが、本来NC軸の生状態にもアクセスできるところです。

//Get Status
stMCStatus:=myAxis.Axis.Status;

こちらは軸にJOGコマンドを発行します。

//Jog
myAxis.Jog(
JogFW:=xJogFW
,JogBW:=xJogBW
,JogMode:=E_JogMode.MC_JOGMODE_CONTINOUS
,Position:=1.0
);
IF xJogBW OR xJogFW THEN
myAxis.Velocity:=rJogSpeed;
END_IF

こちらは軸のコマンド実行状態を確認します。

//Busy
IF myAxis.Busy THEN
xMoveRel:=FALSE;
xMoveAbs:=FALSE;
xMoveVel:=FALSE;
END_IF

Visualization

こちらは軸の操作画面になります。

Result

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

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

シェアする

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

フォローする