Beckhoff#JobManagementFrameworkを使ってみよう

こちらは新しいシリーズでBeckhoffジャパンが開発してるPLC_JobManagementFrameworkを使って様々な記事を展開していきます。最初にPLC_JobManagementFrameworkの簡単な説明・インストール方法・使用方法までを説明し、プログラムを作ってEtherCATとOMRONのCouplerを接続し、検証していきます。

さ、FAを楽しもう。

前書き

いつも私の技術ブログと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

PLC_JobManagementFramework

PLC_JobManagementFrameworkは上でさまざまな制御アクティビティを定義するためのフレームワークであり、InterfaceFuture インタフェースを実装した Future と呼ばれるユニットオブジェクトが、FB_Executor と呼ばれる実行エンジンによって実行されます。

Reference Link

https://github.com/Beckhoff-JP/PLC_JobManagementFramework

Class 

こちらは全体のクラス図です。

こちらはFB_ExecutorのClass図です。

Implementation

論よりRUN!では実際動かしてみて導入方法や動きを確認しましょう。

Install the library

Beckhoff JapanのライブラリをGithubからDownloadできます。下記のLinkをアクセスし、Local>Downloa ZIPをクリックします。

https://github.com/Beckhoff-JP/PLC_JobManagementFramework

GithubからDownloadされたZIP FILEを解凍します。

次はTwinCAT XAEから先のプロジェクトFILEを開き、右クリック>Save as library and Installをクリックします。

ライブラリを適切なLocationに保存してください。

Add Library in your project

次は新規プロジェクトを作成し、先ほどインストールしてたJobManagementFrameworkライブラリを追加します。Reference>Add Libraryします。

Beckhoff-JP>Unitily>JobManagementFrameworkを選び、OKで進みます。

Add Function Block – Extends From FB_AbstructFuture

最初はプロジェクトに実現したいFBを追加します。今回の記事では設定した時間内に信号をON/OFF繰り返しする動作になります。

POUs>右クリック>Add>POUをクリックします。

VAR

こちらはFB_AbstructFutureからExtendsしたFBの変数定義です。

FUNCTION_BLOCK fbController  EXTENDS FB_AbstructFuture
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
  _own_parameter: TIME;
  _set_time: TIME;
  process_timer: TON;
  blink_timer: TON;
  _result :UDINT;
  _own_output: REFERENCE TO BOOL;
END_VAR

FBの名前を入力し、TypeをFunction Blockに設定してください。

次はFBをFB_AbstructFutureからExtendsするように設定します。そのために…ボタンをクリックしてください。

Jobmgnt>POUs>Model>Library>FB_AbstructFutureを選択し、Okで進みます。

実はBeckhoffジャパンからPLC_JobManagementFrameworkのClass図がありまして、現在わたちたちがExrendsしてるFBはJOBの初期化・リセット・実行などのMethodとPropertyがあります。

Done!このfbControllerがFB_AbstructFutureからExtendsされたので、中にはすでにFBを初期化するInit Methodや現在状態を取得するStateなどが存在しています。

PROPERTY own_output : REFERENCE TO BOOL

Set

own_output のSet PropertyはfbControllerの出力のONもしくはOFFを制御します。

_own_output REF= own_output;

PROPERTY own_parameter : TIME

Set

own_parameterのSet PropertyはfbControllerの内部パラメータown_parameter(ON/OFF繰り返しの時間)を設定します。

_own_parameter := own_parameter;

Get

own_parameterのSet PropertyはfbControllerの内部パラメータown_parameter)を取得します。

own_parameter := _own_parameter;

METHOD abort : BOOL 

abort Methodを実行すると、中断処理完了時にTRUEがReturnします。

abort Methodが実行されているとき、タイマーが稼働中であれば残り時間を一時保存します。そしてタイマーをリセットし、Return値をTRUEにします。

(* Return TRUE if finish.*)
IF process_timer.IN THEN
    _set_time := process_timer.PT – process_timer.ET;
  END_IF
  process_timer(IN := FALSE);
  _own_output := FALSE;
  abort := TRUE;

METHOD execute : BOOL

execute Methodは実行されているとき、出力信号をON/OFF繰り返します。

(* Return TRUE if finish.*)
  blink_timer(IN := NOT blink_timer.Q, PT := T#0.5S);
IF _own_output AND blink_timer.Q THEN
    _own_output := FALSE;
  ELSIF blink_timer.Q THEN
    _own_output := TRUE;
  END_IF
  process_timer(IN := TRUE,PT := _set_time);
  execute := process_timer.Q;

METHOD init : BOOL (* Return TRUE if finish.*)

init Methodは実行されているとき、出力をOFFをし、内部パラメータを更新します。

(* Return TRUE if finish.*)
  _own_output := FALSE;
  _set_time := _own_parameter;
  process_timer(IN := FALSE);
  blink_timer(IN := FALSE);
  init := TRUE;

METHOD quit : BOOL (* Return TRUE if finish.*)

quit Methodは実行されているとき、init Methodを実行します。

(* Return TRUE if finish.*)
THIS^.init();
  quit := TRUE;

MAIN

次はMainプログラムを作成します。プログラム内にPROCESS IN/OUT変数も定義し、EtherCAT経由で通信するOMRON Couplerの入出力を読み書きします。

PROGRAM MAIN
VAR
  fbTask1         : fbController;
output  : BOOL; //
  executor        : FB_Executor;
  start    : BOOL; //
  _state          : UDINT;

  Inputs AT %I*:UINT;
  Outputs   AT %Q*:UINT;
END_VAR
start:=Inputs.0;

CASE _state OF
  0:
    _state := 1;
  1: // Configure the Job
    fbTask1.own_output REF= output; // Outputs
    fbTask1.own_parameter := T#4S;   // Configure the Flashing Time
    fbTask1.future_name := ‘Blinker’; // Configure the Future name
    executor.future := fbTask1; // Set the future inside exector
    executor.init(); // Init
    _state := 2;
  2: //

    IF  executor.execute() THEN // Execute and Moniting
      _state := 0;
    END_IF

    // Start Conidiiton
    IF start AND  executor.ready THEN
      executor.start();
      start := FALSE;
    END_IF

END_CASE

Outputs.0:=output;

その中で注意するのはexecutorというFBが作成されていることです。プログラム内ではexecutorに実効するJOB(今回の記事では(fbController)を渡す必要があります。

Init()

Case=0のときにはInit() Methodを呼び出して、executorを初期化します。また、executor.futureに実行や管理したいJOB(今回の例ではfbController1)を渡してください。

ready

executor準備状態を確認します。

start()

executor.start()でJOBをスタート状態に遷移します。

execute()

そしてexecutor.execute()でJOBを実行しましょう。

Add EtherCAT Master

最後はEtherCATネットワークを構築します。I/O>Devices>Add New Itemをクリックします。

EtherCAT>EtherCAT masterをクリックし、OKで進みます。

Configure Ethernet Adapter

先ほど追加したEtherCATマスターをダブルクリックし、AdapterのTabでSearchボタンをクリックしてください。

EtherCAT Masterとして使用するEthernet Adapterを選択し、Okで進みます。

Done!

Scan EtherCAT Slave

先ほど追加したEtherCAT Masterを右クリックし>Scanでネットワーク内のEtherCAT スレーブを検索します。

Done!今回記事で使用するOMORN Couplerを見つかりました。

OMRON Couplerにインストールした入出力モジュールにも認識されました。

Mapping Inputs

入力モジュールをMappingします。

入力モジュールをMappingするためにInput Bit 16 bitsをクリックします。

プログラムのPROCESS INPUT変数と接続してください。

Mapping Output

次は出力データをMappingするためにOutput Bits 16 bitを右クリックし、Change Linkします。

プログラムのPROCESS 出力変数と接続してください。

Active Cofiguration

Active ConfigurationをクリックしプロジェクトのHard構成をTwinCAR RuntimeにDownloadします。

Login

プログラムをTwinCAR RuntimeにDowloadします。

Yesですすみます。

Start

TwinCAR Runtimeをスタートします。

Result

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

シェアする

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

フォローする