コレは何?/What is this?
擬似微分を計算するクラス。
使用例
#include "Differentiator.hh" 1 : void ControlFunctions::ControlFunction1(ControlFunctions* pCF){ 2 : // 制御用周期実行関数1 3 : 4 : // 制御用定数設定 5 : const double Ts = ConstParams::SAMPLING_TIME[0]*1e-9; // [s] 制御周期 6 : const double gpd = 3140; // [rad/s] 擬似微分器の帯域 7 : 8 : // 制御用変数宣言 9 : static double u = 0; // 擬似微分器の入力 10 : static double y = 0; // 擬似微分器の出力 11 : 12 : // 制御器等々 13 : static Differentiator* Diff1; 14 : 15 : if(pCF->CmdFlag==CTRL_INIT){ 16 : // 初期化モード (ここは制御開始時に1度だけ呼び出される(非実時間空間なので重い処理もOK)) 17 : Diff1 = new Differentiator(gpd, Ts); // 擬似微分器の生成 18 : } 19 : if(pCF->CmdFlag==CTRL_LOOP){ 20 : // 周期モード (ここは制御周期 SAMPLING_TIME[0] 毎に呼び出される(実時間空間なので処理は制御周期内に収めること)) 21 : pCF->count++; // ループカウンタを進める 22 : t=pCF->count*Ts; // 時刻の計算 23 : 24 : // 制御ここから 25 : pCF->pIF->GetTorque(TorqueRes); // [Nm] トルク応答値の取得 26 : pCF->pIF->GetPosition(PositionRes); // [rad] 位置応答値の取得 27 : 28 : // ここにやりたい制御を書くがよい!! 29 : y = Diff1->GetSignal(u); // 擬似微分の計算 30 : 31 : pCF->pIF->SetCurrent(CurrentRef); // [A] 電流指令値の出力 32 : // 制御ここまで 33 : 34 : // 任意変数値表示用 35 : pCF->IndicVars[0] = y; // 表示変数 36 : pCF->IndicVars[1] = 0; // 表示変数 37 : pCF->IndicVars[2] = 0; // 表示変数 38 : pCF->IndicVars[3] = 0; // 表示変数 39 : pCF->IndicVars[4] = 0; // 表示変数 40 : pCF->IndicVars[5] = 0; // 表示変数 41 : pCF->IndicVars[6] = 0; // 表示変数 42 : pCF->IndicVars[7] = 0; // 表示変数 43 : 44 : // 任意変数プロット 45 : pCF->PlotVars[0] = 0; 46 : pCF->PlotVars[1] = 0; 47 : 48 : // データの保存 49 : pCF->Data[0] = t; // [s] 時刻の保存 50 : pCF->Data[1] = 0; // 保存変数 51 : pCF->Data[2] = 0; // 保存変数 52 : pCF->Data[3] = 0; // 保存変数 53 : pCF->ExpData->PutData(pCF->Data,ConstParams::DATA_NUM); // データ格納 54 : } 55 : if(pCF->CmdFlag==CTRL_EXIT){ 56 : // 終了処理モード (ここは制御終了時に1度だけ呼び出される(非実時間空間なので重い処理もOK)) 57 : delete Diff1; // 擬似微分器の破棄 58 : Diff1 = NULL; 59 : } 60 : }
研究室の横の倉庫 - Side Warehouse of Laboratory
Copyright(C), Side Warehouse, All rights reserved.