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

Reference Link
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
皆様のサポートが、私たちの活動をより充実させる力となります。
どうぞよろしくお願いします。
メールアドレス(*=@)
X
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値 | 説明 |
Disable | BOOL | 軸を無効にする |
Enable | BOOL | 軸を有効にする |
Home | BOOL | 軸をホーム動作する |
Jog | BOOL | 軸をJog動作する |
MoveAbsolute | BOOL | 軸を絶対位置決め動作する |
MoveRelative | BOOL | 軸を相対位置決め動作する |
MoveVelocity | BOOL | 軸を定速動作する |
Reset | BOOL | 軸をリセットする |
Properties
FB_BasicAxisにはたくさんの実用的なPropertiesが実装されていますが、今回の記事で使用したPropertiesのみを説明します。
Properties名 | タイプ | 説明 |
ActualAcceleration | LREAL GET | 軸の実際の加速度を取得 |
ActualPosition | LREAL GET | 軸の実際の位置を取得 |
ActualVelocity | LREAL GET | 軸の実際の速度を取得 |
Enabled | BOOL GET | TRUE=軸が有効した |
Velocity | LREAL SET | 軸の速度を設定する |
InPosition | BOOL GET | TRUE=軸が目標位置ウィンドウ内にある |
MoveAbsolute | BOOL | 絶対移動を開始する |
MoveRelative | BOOL | 相対移動を開始する |
MoveVelocity | BOOL | 連続速度移動を開始する |
Jog | BOOL | Jog移動を開始する |
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
こちらの動画で動作の確認をできます。