ARCS6 AR6-REV.24062600
読み取り中…
検索中…
一致する文字列を見つけられません
ControlFunctions.hh
[詳解]
1
5//
6// Copyright (C) 2011-2024 Yokokura, Yuki
7// MIT License. For details, see the LICENSE file.
8
9#ifndef CONTROL_FUNCTIONS
10#define CONTROL_FUCNTIONS
11
12#include <array>
13#include <functional>
14#include "ConstParams.hh"
15#include "InterfaceFunctions.hh"
16#include "UserPlot.hh"
17
18// 前方宣言
19namespace ARCS{
20 class ARCSmemory;
21 class ARCSscrparams;
22 class ARCSgraphics;
23}
24
25namespace ARCS { // ARCS名前空間
29 public:
36
39 : Screen(SP), // 画面パラメータへの参照
40 Graph(GP), // グラフィックスへの参照
41 Memory(DM), // データメモリへの参照
42 Interface(), // インターフェースクラスの初期化
43 UsrGraph(GP), // ユーザカスタムプロットクラスの初期化
44 CmdFlag(CTRL_INIT), // 動作モード設定フラグの初期化
45 CtrlFuncObj(), // 各制御用周期実行関数の関数オブジェクト配列の初期化
46 count(0), // ループカウンタの初期化
47 NetworkLink(false), // ネットワークリンクフラグの初期化
48 Initializing(false) // ロボット初期化フラグの初期化
49 {
50 PassedLog(); // イベントログにココを通過したことを記録
51
52 // 各制御用周期実行関数の関数オブジェクトを格納 (実時間スレッド生成に必要な作業)
53 CtrlFuncObj[0] = [&](const double t, const double Tact, const double Tcmp){ return ControlFunction1(t, Tact, Tcmp); }; // ラムダ式でメンバ関数を返す
54 CtrlFuncObj[1] = [&](const double t, const double Tact, const double Tcmp){ return ControlFunction2(t, Tact, Tcmp); }; // ラムダ式でメンバ関数を返す
55 CtrlFuncObj[2] = [&](const double t, const double Tact, const double Tcmp){ return ControlFunction3(t, Tact, Tcmp); }; // ラムダ式でメンバ関数を返す
56
57 PassedLog(); // イベントログにココを通過したことを記録
58 }
59
62 PassedLog(); // イベントログにココを通過したことを記録
63 }
64
66 void InitialProcess(void){
67 PassedLog(); // イベントログにココを通過したことを記録
68 // 初期化モードでの各制御用周期実行関数の実行
69 CmdFlag = CTRL_INIT;// フラグを初期化モードに設定して,
70 for(size_t i = 0; i < ConstParams::THREAD_NUM; ++i) CtrlFuncObj[i](0, 0, 0); // 各々の制御関数(関数の配列)を実行
71 CmdFlag = CTRL_LOOP;// フラグを周期モードに設定
72 PassedLog(); // イベントログにココを通過したことを記録
73 }
74
76 void ExitProcess(void){
77 PassedLog(); // イベントログにココを通過したことを記録
78 // 終了処理モードでの各制御用周期実行関数の実行
79 CmdFlag = CTRL_EXIT;// フラグを終了処理モードに設定して,
80 for(size_t i = 0; i < ConstParams::THREAD_NUM; ++i) CtrlFuncObj[i](0, 0, 0); // 各々の制御関数(関数の配列)を実行
81 PassedLog(); // イベントログにココを通過したことを記録
82 }
83
84 void UpdateControlValue(void);
85
88 std::array<std::function<bool(const double, const double, const double)>, ARCSparams::THREAD_MAX>
89 GetCtrlFuncObject(void) const{
90 return CtrlFuncObj;
91 }
92
93 private:
94 ControlFunctions(const ControlFunctions&) = delete;
95 const ControlFunctions& operator=(const ControlFunctions&) = delete;
96
97 ARCSscrparams& Screen;
98 ARCSgraphics& Graph;
99 ARCSmemory& Memory;
100 InterfaceFunctions Interface;
101 UserPlot UsrGraph;
102 CtrlFuncMode CmdFlag;
103 std::array< std::function<bool(const double, double, const double)>, ARCSparams::THREAD_MAX> CtrlFuncObj;
104 unsigned long count;
105 bool NetworkLink;
106 bool Initializing;
107
108 // 制御用周期実行関数群
109 // 以下の関数は初期化モード若しくは終了処理モードのときに非実時間空間上で動作する
110 // 周期モードのときは実時間スレッド( SFthread.cc の RealTimeThread関数 ) から関数ポインタを経由して,以下の関数が呼ばれる
111 bool ControlFunction1(const double t, const double Tact, const double Tcmp);
112 bool ControlFunction2(const double t, const double Tact, const double Tcmp);
113 bool ControlFunction3(const double t, const double Tact, const double Tcmp);
114};
115}
116
117#endif
118
#define PassedLog()
イベントログ用マクロ(ファイルと行番号のみ記録版)
Definition ARCSeventlog.hh:26
インターフェースクラス
定数値格納用クラス ARCSに必要な定数値を格納します。
ユーザカスタムプロットクラス
グラフィッククラス
Definition ARCSgraphics.hh:23
データメモリクラス
Definition ARCSmemory.hh:22
static constexpr size_t THREAD_MAX
リアルタイムスレッド最大数 (変更不可)
Definition ARCSparams.hh:50
ARCS画面パラメータ格納クラス
Definition ARCSscrparams.hh:22
制御用周期実行関数群クラス 実際の制御プログラムを実行します。
Definition ControlFunctions.hh:28
void ExitProcess(void)
終了処理モードの実行
Definition ControlFunctions.hh:76
std::array< std::function< bool(const double, const double, const double)>, ARCSparams::THREAD_MAX > GetCtrlFuncObject(void) const
制御用周期実行関数の関数オブジェクト配列を返す関数
Definition ControlFunctions.hh:89
~ControlFunctions()
デストラクタ
Definition ControlFunctions.hh:61
void UpdateControlValue(void)
制御用変数値を更新する関数
Definition ControlFunctions.cc:131
ControlFunctions(ARCSscrparams &SP, ARCSgraphics &GP, ARCSmemory &DM)
コンストラクタ
Definition ControlFunctions.hh:38
CtrlFuncMode
動作モードの定義
Definition ControlFunctions.hh:31
@ CTRL_EXIT
終了処理モード
Definition ControlFunctions.hh:34
@ CTRL_INIT
初期化モード
Definition ControlFunctions.hh:32
@ CTRL_LOOP
周期モード
Definition ControlFunctions.hh:33
void InitialProcess(void)
初期化モードの実行
Definition ControlFunctions.hh:66
static constexpr size_t THREAD_NUM
動作させるスレッドの数 (最大数は ARCSparams::THREAD_NUM_MAX 個まで)
Definition ConstParams.hh:34
ユーザカスタムプロットクラス
Definition UserPlot.hh:26
インターフェースクラス 「電流指令,位置,トルク,…等々」と「DAC,エンコーダカウンタ,ADC,…等々」との対応を指定します。
Definition InterfaceFunctions.hh:27