ARCS6 AR6-REV.24062600
読み取り中…
検索中…
一致する文字列を見つけられません
ARCSscrparams.hh
[詳解]
1
6//
7// Copyright (C) 2011-2024 Yokokura, Yuki
8// MIT License. For details, see the LICENSE file.
9
10#ifndef ARCSSCRPARAMS
11#define ARCSSCRPARAMS
12
13#include <pthread.h>
14#include <array>
15#include "ARCSparams.hh"
16#include "EquipParams.hh"
17#include "ConstParams.hh"
18#include "ArcsMatrix.hh"
19
20namespace ARCS { // ARCS名前空間
23 public:
26
27 // リアルタイムスレッド関連の関数
28 double GetTime(void);
29 void SetTime(const double t);
30 std::tuple<double, double, double, double>
31 GetTimeVars(const unsigned int ThreadNum);
32 void GetTimeVars(
33 std::array<double, ARCSparams::THREAD_MAX>& PT,
34 std::array<double, ARCSparams::THREAD_MAX>& CT,
35 std::array<double, ARCSparams::THREAD_MAX>& Max,
36 std::array<double, ARCSparams::THREAD_MAX>& Min
37 );
38 void SetTimeVars(
39 const std::array<double, ARCSparams::THREAD_MAX>& PT,
40 const std::array<double, ARCSparams::THREAD_MAX>& CT,
41 const std::array<double, ARCSparams::THREAD_MAX>& Max,
42 const std::array<double, ARCSparams::THREAD_MAX>& Min
43 );
44
45 // 状態フラグ関連の関数
46 bool GetNetworkLink(void);
47 void SetNetworkLink(const bool LinkFlag);
48 bool GetInitializing(void);
49 void SetInitializing(const bool InitFlag);
50
51 // アクチュエータ関連の関数
52 std::tuple<double, double>
53 GetCurrentAndPosition(const unsigned int ActNum);
55 std::array<double, EquipParams::ACTUATOR_NUM>& Current,
56 std::array<double, EquipParams::ACTUATOR_NUM>& Position
57 );
61 );
62
63 // 任意変数インジケータ関連の関数
64 void GetVarIndicator(std::array<double, ARCSparams::INDICVARS_MAX>& Vars);
65 void SetVarIndicator(const std::array<double, ARCSparams::INDICVARS_MAX>& Vars);
66
69 template<typename T1, typename... T2> // 可変長引数テンプレート
70 void SetVarIndicator(const T1& u1, const T2&... u2){
71 // 再帰で順番に可変長引数を読み込んでいく
72 if(VarIndicCount < ARCSparams::INDICVARS_MAX){
73 VarIndicatorBuf.at(VarIndicCount) = (double)u1; // 有効な範囲内であれば指定値でバッファを埋める
74 }
75 ++VarIndicCount; // 再帰カウンタをインクリメント
76 SetVarIndicator(u2...); // 自分自身を呼び出す(再帰)
77 }
78 void SetVarIndicator(){
79 // 再帰の最後に呼ばれる関数
80 VarIndicCount = 0; // すべての作業が終わったので,再帰カウンタを零に戻しておく
81 SetVarIndicator(VarIndicatorBuf);
82 }
83
84 // オンライン設定変数関連の関数
85 void GetOnlineSetVars(std::array<double, ARCSparams::ONLINEVARS_MAX>& Vars);
86 void SetOnlineSetVar(const unsigned int VarNum, const double VarVal);
87 void SetOnlineSetVars(const std::array<double, ARCSparams::ONLINEVARS_MAX>& Vars);
88
91 template<typename T1, typename... T2> // 可変長引数テンプレート
92 void GetOnlineSetVar(T1& u1, T2&... u2){
93 // 再帰で順番に可変長引数に書き込んでいく
94 if(SetVarCount < ARCSparams::ONLINEVARS_MAX){
95 u1 = OnlineSetVar.at(SetVarCount); // 有効な範囲内であれば要素を返す
96 }
97 ++SetVarCount; // 再帰カウンタをインクリメント
98 GetOnlineSetVar(u2...); // 自分自身を呼び出す(再帰)
99 }
100 void GetOnlineSetVar(){
101 // 再帰の最後に呼ばれる関数
102 SetVarCount = 0; // すべての作業が終わったので,再帰カウンタを零に戻しておく
103 }
104
107 template<typename T1, typename... T2> // 可変長引数テンプレート
108 void InitOnlineSetVar(const T1& u1, const T2&... u2){
109 // 再帰で順番に可変長引数に書き込んでいく
110 if(InitSetVarCount < ARCSparams::ONLINEVARS_MAX){
111 OnlineSetVarIni.at(InitSetVarCount) = (double)u1; // 有効な範囲内であれば指定値で要素を埋める
112 }
113 ++InitSetVarCount; // 再帰カウンタをインクリメント
114 InitOnlineSetVar(u2...); // 自分自身を呼び出す(再帰)
115 }
116 void InitOnlineSetVar(){
117 // 再帰の最後に呼ばれる関数
118 InitSetVarCount = 0; // すべての作業が終わったので,再帰カウンタを零に戻しておく
119 SetOnlineSetVars(OnlineSetVarIni); // オンライン設定変数に書き込む
120 }
121
122 private:
123 ARCSscrparams(const ARCSscrparams&) = delete;
124 const ARCSscrparams& operator=(const ARCSscrparams&) = delete;
125
126 // Mutexロック
127 pthread_mutex_t TimeMutex;
128 pthread_mutex_t ActMutex;
129 pthread_mutex_t IndicMutex;
130 pthread_mutex_t OnsetMutex;
131
132 // リアルタイムスレッド関連の変数
133 double Time;
134 std::array<double, ARCSparams::THREAD_MAX> PeriodicTime;
135 std::array<double, ARCSparams::THREAD_MAX> ComputationTime;
136 std::array<double, ARCSparams::THREAD_MAX> MaxTime;
137 std::array<double, ARCSparams::THREAD_MAX> MinTime;
138
139 // 状態フラグ関連の変数
140 bool NetworkLink;
141 bool Initializing;
142
143 // アクチュエータ関連の変数
144 std::array<double, EquipParams::ACTUATOR_NUM> CurrentRef;
145 std::array<double, EquipParams::ACTUATOR_NUM> PositionRes;
146
147 // 任意変数インジケータ関連の変数
148 std::array<double, ARCSparams::INDICVARS_MAX> VarIndicator;
149 std::array<double, ARCSparams::INDICVARS_MAX> VarIndicatorBuf;
150 size_t VarIndicCount;
151
152 // オンライン設定変数関連の変数
153 std::array<double, ARCSparams::ONLINEVARS_MAX> OnlineSetVar;
154 std::array<double, ARCSparams::ONLINEVARS_MAX> OnlineSetVarIni;
155 size_t SetVarCount;
156 size_t InitSetVarCount;
157 };
158}
159
160#endif
161
ARCSシステムコード共通パラメータ設定静的クラス
ARCS-Matrix 行列演算クラス
実験装置用定数値格納用クラス ARCSに必要な実験装置に特有な定数値を格納します。
定数値格納用クラス ARCSに必要な定数値を格納します。
static constexpr size_t INDICVARS_MAX
表示変数最大数 (変更不可)
Definition ARCSparams.hh:69
static constexpr size_t ONLINEVARS_MAX
オンライン設定変数最大数 (変更不可)
Definition ARCSparams.hh:72
ARCS画面パラメータ格納クラス
Definition ARCSscrparams.hh:22
void SetOnlineSetVar(const unsigned int VarNum, const double VarVal)
オンライン設定変数に値を設定する関数
Definition ARCSscrparams.cc:219
void GetVarIndicator(std::array< double, ARCSparams::INDICVARS_MAX > &Vars)
任意変数インジケータの配列を返す関数
Definition ARCSscrparams.cc:186
void SetCurrentAndPosition(const ArcsMat< EquipParams::ACTUATOR_NUM, 1 > &Current, const ArcsMat< EquipParams::ACTUATOR_NUM, 1 > &Position)
電流と位置の配列を設定する関数
Definition ARCSscrparams.cc:174
std::tuple< double, double, double, double > GetTimeVars(const unsigned int ThreadNum)
実際の制御周期,消費時間,制御周期の最大値,最小値を返す関数
Definition ARCSscrparams.cc:73
void SetVarIndicator(const std::array< double, ARCSparams::INDICVARS_MAX > &Vars)
任意変数インジケータの配列を設定する関数
Definition ARCSscrparams.cc:194
void SetTimeVars(const std::array< double, ARCSparams::THREAD_MAX > &PT, const std::array< double, ARCSparams::THREAD_MAX > &CT, const std::array< double, ARCSparams::THREAD_MAX > &Max, const std::array< double, ARCSparams::THREAD_MAX > &Min)
実際の制御周期,消費時間,制御周期の最大値,最小値の配列を設定する関数
Definition ARCSscrparams.cc:108
void InitOnlineSetVar(const T1 &u1, const T2 &... u2)
オンライン設定変数の初期値を設定する関数
Definition ARCSscrparams.hh:108
std::tuple< double, double > GetCurrentAndPosition(const unsigned int ActNum)
電流と位置を取得する関数
Definition ARCSscrparams.cc:149
void GetOnlineSetVar(T1 &u1, T2 &... u2)
オンライン設定変数から値を取得する関数
Definition ARCSscrparams.hh:92
~ARCSscrparams()
デストラクタ
Definition ARCSscrparams.cc:48
bool GetInitializing(void)
ロボット初期化フラグを取得する関数
Definition ARCSscrparams.cc:136
void SetInitializing(const bool InitFlag)
ロボット初期化フラグを設定する関数
Definition ARCSscrparams.cc:142
void GetOnlineSetVars(std::array< double, ARCSparams::ONLINEVARS_MAX > &Vars)
オンライン設定変数の配列を返す関数
Definition ARCSscrparams.cc:202
void SetTime(const double t)
時刻を設定する関数
Definition ARCSscrparams.cc:64
bool GetNetworkLink(void)
実際の制御周期,消費時間,制御周期の最大値,最小値の配列を設定する関数
Definition ARCSscrparams.cc:124
void SetNetworkLink(const bool LinkFlag)
ネットワークリンクフラグを設定する関数
Definition ARCSscrparams.cc:130
void SetOnlineSetVars(const std::array< double, ARCSparams::ONLINEVARS_MAX > &Vars)
オンライン設定変数の配列を設定する関数
Definition ARCSscrparams.cc:210
double GetTime(void)
時刻を取得する関数
Definition ARCSscrparams.cc:54
ARCSscrparams()
コンストラクタ
Definition ARCSscrparams.cc:17
void SetVarIndicator(const T1 &u1, const T2 &... u2)
任意変数インジケータに値を設定する関数
Definition ARCSscrparams.hh:70
ARCS-Matrix 行列演算クラス
Definition ArcsMatrix.hh:89