Parameters.hh
00001 // 定数値変数値格納用クラス
00002 // 2011/04/12 Yuki YOKOKURA
00003 //
00004 // ARCSに必要な定数値および変数値を格納します。
00005 //
00006 // Copyright (C) 2011 Yuki YOKOKURA
00007 // This program is free software;
00008 // you can redistribute it and/or modify it under the terms of the GNU General Public License
00009 // as published by the Free Software Foundation; either version 3 of the License, or any later version.
00010 // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
00011 // without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00012 // See the GNU General Public License for more details <http://www.gnu.org/licenses/>.
00013 // Besides, you can negotiate about other options of licenses instead of GPL.
00014 // If you would like to get other licenses, please contact us<yuki@katsura.sd.keio.ac.jp>.
00015 
00016 #ifndef PARAMETERS
00017 #define PARAMETERS
00018 
00019 #include <string>
00020 #include "DataStorage.hh"
00021 
00022 using namespace ARCS;
00023 
00024 // 定数値格納用名前空間 (参照するための using namespace は極力禁止)
00025 namespace ConstParams {
00026         // ARCS改訂番号(ARCSコード改変時にちゃんと変えること)
00027         const char *const ARCS_REVISION = "[REV.20110721-A]";   // (16文字以内)
00028         
00029         // 実験データファイルの設定
00030         const char *const       DATA_NAME       = "DATA.csv";           //              ファイル名
00031         const SaveType          DATA_TYPE       = STRG_FORMAT_CSV;      //              CSV形式「STRG_FORMAT_CSV」DAT形式(TAB区切り)「STRG_FORMAT_DAT」
00032         const double            DATA_TIME       = 10;                           // [s]  保存時間
00033         const unsigned int      DATA_NUM        = 3;                            //              保存する変数の数
00034         
00035         // RTAI実時間スレッドの設定
00036         const unsigned int THREAD_NUM = 2;      // 動作させるスレッドの数 (最大数8つまで)
00037         const unsigned long Ts[8]={
00038         //      s  m  u  n      制御周期は Ts[0] ≦ Ts[1] ≦ Ts[2] ≦ … ≦ Ts[7] になるようにすること
00039                     100000,     // [ns] 制御用周期実行関数0 (スレッド0) 制御周期
00040                     100000,     // [ns] 制御用周期実行関数1 (スレッド1) 制御周期
00041                    3000000,     // [ns] 制御用周期実行関数2 (スレッド2) 制御周期
00042                    4000000,     // [ns] 制御用周期実行関数3 (スレッド3) 制御周期
00043                    5000000,     // [ns] 制御用周期実行関数4 (スレッド4) 制御周期
00044                    6000000,     // [ns] 制御用周期実行関数5 (スレッド5) 制御周期
00045                    7000000,     // [ns] 制御用周期実行関数6 (スレッド6) 制御周期
00046                    8000000      // [ns] 制御用周期実行関数7 (スレッド7) 制御周期
00047         };
00048         
00049         // ARCSの設定
00050         const unsigned long ARCS_UPDATE_TIME = 50000;   // [us] ARCS画面描画の更新時間
00051         
00052         // 任意変数値表示の設定
00053         const unsigned int MAX_OPT_VARS = 8;            // 表示変数最大数
00054         const unsigned int NUM_OPT_VARS = 2;            // 表示したい変数の数 (最大数 8 まで)
00055         const std::string OPT_VAR_NAMES[MAX_OPT_VARS] = {
00056                 "Fdis     [N]", // 任意に表示したい変数値の変数名(12文字まで入力可)
00057                 "Xres    [mm]", // 任意に表示したい変数値の変数名(12文字まで入力可)
00058                 "            ", // 任意に表示したい変数値の変数名(12文字まで入力可)
00059                 "            ", // 任意に表示したい変数値の変数名(12文字まで入力可)
00060                 "            ", // 任意に表示したい変数値の変数名(12文字まで入力可)
00061                 "            ", // 任意に表示したい変数値の変数名(12文字まで入力可)
00062                 "            ", // 任意に表示したい変数値の変数名(12文字まで入力可)
00063                 "            ", // 任意に表示したい変数値の変数名(12文字まで入力可)
00064         };
00065         
00066         // グラフA(上側)描画の設定
00067         const char *const       GRAPH_A_TITLE   = "FORCE [N]";  // グラフのタイトル
00068         const int                       GRAPH_A_YMAX    =  5;                   // グラフの縦軸最大値 (整数のみ対応)
00069         const int                       GRAPH_A_YMIN    = -5;                   // グラフの縦軸最小値 (整数のみ対応)
00070         const unsigned int      MAX_GRAPH_A             =  8;                   // グラフA変数最大値
00071         const unsigned int      GRAPH_A_NUM             =  1;                   // 表示したい変数の数 (最大数 8 まで)
00072         const std::string       GRAPH_A_NAMES[MAX_GRAPH_A] = {
00073                 "Fdis    ",     // 凡例に表示する変数名 (8文字まで入力可)
00074                 "        ",     // 凡例に表示する変数名 (8文字まで入力可)
00075                 "        ",     // 凡例に表示する変数名 (8文字まで入力可)
00076                 "        ",     // 凡例に表示する変数名 (8文字まで入力可)
00077                 "        ",     // 凡例に表示する変数名 (8文字まで入力可)
00078                 "        ",     // 凡例に表示する変数名 (8文字まで入力可)
00079                 "        ",     // 凡例に表示する変数名 (8文字まで入力可)
00080                 "        ",     // 凡例に表示する変数名 (8文字まで入力可)
00081         };
00082         
00083         // グラフB(下側)描画の設定
00084         const char *const       GRAPH_B_TITLE   = "POSITION [mm]";      // グラフのタイトル
00085         const int                       GRAPH_B_YMAX    =  40;                          // グラフの縦軸最大値 (整数のみ対応)
00086         const int                       GRAPH_B_YMIN    = -40;                          // グラフの縦軸最小値 (整数のみ対応)
00087         const unsigned int      MAX_GRAPH_B             =  8;                           // グラフA変数最大値
00088         const unsigned int      GRAPH_B_NUM             =  1;                           // 表示したい変数の数 (最大数 8 まで)
00089         const std::string       GRAPH_B_NAMES[MAX_GRAPH_B] = {
00090                 "Xres    ",     // 凡例に表示する変数名 (8文字まで入力可)
00091                 "        ",     // 凡例に表示する変数名 (8文字まで入力可)
00092                 "        ",     // 凡例に表示する変数名 (8文字まで入力可)
00093                 "        ",     // 凡例に表示する変数名 (8文字まで入力可)
00094                 "        ",     // 凡例に表示する変数名 (8文字まで入力可)
00095                 "        ",     // 凡例に表示する変数名 (8文字まで入力可)
00096                 "        ",     // 凡例に表示する変数名 (8文字まで入力可)
00097                 "        ",     // 凡例に表示する変数名 (8文字まで入力可)
00098         };
00099         
00100         
00101         // D/A変換器 PCI-3340 の設定 (ボード1枚目をA,2枚目をB,3枚目をC…)
00102         const unsigned int NUM_CH_3340 = 8; // PCI-3340 チャネル数
00103         // 先頭アドレスの設定
00104         // Interface Corp. "Device ID"=0x0D0C (scanpci -v か lspci -v で調べること)
00105         const int Base3340_A = 0x0000CA00;      // PCI-3340 1枚目 先頭アドレス0
00106         
00107         // エンコーダ計数器 PCI-6205 の設定 (ボード1枚目をA,2枚目をB,3枚目をC…)
00108         const unsigned int NUM_CH_6205 = 8; // PCI-6205 チャネル数
00109         // 先頭アドレスの設定
00110         // Interface Corp. "Device ID"=0x183D (scanpci -v か lspci -v で調べること)
00111         const int Base6205_A[4]={       // PCI-6205 1枚目 
00112                 0x0000CF00,     // 先頭アドレス0
00113                 0x0000CE00,     // 先頭アドレス1
00114                 0x0000CD00,     // 先頭アドレス2
00115                 0x0000CC00      // 先頭アドレス3
00116         };
00117         
00118         // 推力/トルク定数の設定 [D/A変換器 PCI-3340 1枚目 に対応するアクチュエータ]
00119         // アクチュエータのデータシートに従って変更すること
00120         const double Kf_A[NUM_CH_3340]={
00121                 22,             // [N/A] or [Nm/A] CH1 アクチュエータ 推力 or トルク定数
00122                 3.33,   // [N/A] or [Nm/A] CH2 アクチュエータ 推力 or トルク定数
00123                 3.33,   // [N/A] or [Nm/A] CH3 アクチュエータ 推力 or トルク定数
00124                 3.33,   // [N/A] or [Nm/A] CH4 アクチュエータ 推力 or トルク定数
00125                 3.33,   // [N/A] or [Nm/A] CH5 アクチュエータ 推力 or トルク定数
00126                 3.33,   // [N/A] or [Nm/A] CH6 アクチュエータ 推力 or トルク定数
00127                 3.33,   // [N/A] or [Nm/A] CH7 アクチュエータ 推力 or トルク定数
00128                 3.33    // [N/A] or [Nm/A] CH8 アクチュエータ 推力 or トルク定数
00129         };
00130         
00131         // 慣性の設定 [D/A変換器 PCI-3340 1枚目 に対応するアクチュエータ]
00132         // アクチュエータのデータシートに従って変更すること
00133         const double Mn_A[NUM_CH_3340]={
00134                 0.3,    // [kg] or [kgm^2] CH1 アクチュエータ 慣性
00135                 0.245,  // [kg] or [kgm^2] CH2 アクチュエータ 慣性
00136                 0.245,  // [kg] or [kgm^2] CH3 アクチュエータ 慣性
00137                 0.245,  // [kg] or [kgm^2] CH4 アクチュエータ 慣性
00138                 0.245,  // [kg] or [kgm^2] CH5 アクチュエータ 慣性
00139                 0.245,  // [kg] or [kgm^2] CH6 アクチュエータ 慣性
00140                 0.245,  // [kg] or [kgm^2] CH7 アクチュエータ 慣性
00141                 0.245   // [kg] or [kgm^2] CH8 アクチュエータ 慣性
00142         };
00143         
00144         // 定格電流の設定 [D/A変換器 PCI-3340 1枚目 に対応するアクチュエータ]
00145         // アクチュエータのデータシートに従って変更すること
00146         const double Irat_A[NUM_CH_3340]={
00147                 0.4,    // [A] CH1 アクチュエータ 定格電流
00148                 0.81,   // [A] CH2 アクチュエータ 定格電流
00149                 0.81,   // [A] CH3 アクチュエータ 定格電流
00150                 0.81,   // [A] CH4 アクチュエータ 定格電流
00151                 0.81,   // [A] CH5 アクチュエータ 定格電流
00152                 0.81,   // [A] CH6 アクチュエータ 定格電流
00153                 0.81,   // [A] CH7 アクチュエータ 定格電流
00154                 0.81    // [A] CH8 アクチュエータ 定格電流
00155         };
00156         
00157         // 最大電流の設定 [D/A変換器 PCI-3340 1枚目 に対応するアクチュエータ]
00158         // アクチュエータのデータシートに従って変更すること
00159         const double Imax_A[NUM_CH_3340]={
00160                 1.6,    // [A] CH1 アクチュエータ 最大電流
00161                 2.7,    // [A] CH2 アクチュエータ 最大電流
00162                 2.7,    // [A] CH3 アクチュエータ 最大電流
00163                 2.7,    // [A] CH4 アクチュエータ 最大電流
00164                 2.7,    // [A] CH5 アクチュエータ 最大電流
00165                 2.7,    // [A] CH6 アクチュエータ 最大電流
00166                 2.7,    // [A] CH7 アクチュエータ 最大電流
00167                 2.7             // [A] CH8 アクチュエータ 最大電流
00168         };
00169         
00170         // サーボアンプ電圧電流換算ゲインの設定 [D/A変換器 PCI-3340 1枚目 に対応するサーボアンプ]
00171         // サーボアンプの設定に従い定数を変更すること
00172         // サーボアンプの設定例:3V/0.7275A → 3V 与えると 0.7275A 流す
00173         // 駆動電流の方向とエンコーダの方向に注意(向きが違う場合,下記の値は負になる)
00174         const double VAconv_A[NUM_CH_3340]={
00175                 -3.0/0.154,     // [V/A] CH1 サーボアンプ電圧電流換算ゲイン
00176                 3.0/0.7275,     // [V/A] CH2 サーボアンプ電圧電流換算ゲイン
00177                 3.0/0.7275,     // [V/A] CH3 サーボアンプ電圧電流換算ゲイン
00178                 3.0/0.7275,     // [V/A] CH4 サーボアンプ電圧電流換算ゲイン
00179                 3.0/0.7275,     // [V/A] CH5 サーボアンプ電圧電流換算ゲイン
00180                 3.0/0.7275,     // [V/A] CH6 サーボアンプ電圧電流換算ゲイン
00181                 3.0/0.7275,     // [V/A] CH7 サーボアンプ電圧電流換算ゲイン
00182                 3.0/0.7275      // [V/A] CH8 サーボアンプ電圧電流換算ゲイン
00183         };
00184         
00185         // エンコーダ分解能の設定 [エンコーダカウンタ PCI-6205 1枚目 に対応するエンコーダ]
00186         // エンコーダのデータシートに従って変更すること
00187         const double EncResolutions_A[NUM_CH_6205]={
00188                 50e-9,  // [m] or [rad] CH1 エンコーダ分解能
00189                 100e-9, // [m] or [rad] CH2 エンコーダ分解能
00190                 100e-9, // [m] or [rad] CH3 エンコーダ分解能
00191                 100e-9, // [m] or [rad] CH4 エンコーダ分解能
00192                 100e-9, // [m] or [rad] CH5 エンコーダ分解能
00193                 100e-9, // [m] or [rad] CH6 エンコーダ分解能
00194                 100e-9, // [m] or [rad] CH7 エンコーダ分解能
00195                 100e-9  // [m] or [rad] CH8 エンコーダ分解能
00196         };
00197 
00198 }
00199 
00200 // Parametersクラス
00201 // 実時間スレッド間,ARCS の間で共有される各種変数を格納する
00202 // 以下の変数は Spinlock or Mutex で保護されるべきである(がとりあえず排他制御なしで様子見)
00203 class VariableParams {
00204         private:
00205                 
00206         public:
00207                 // 以下はインターフェース関連の変数
00208                 volatile double IrefA[ConstParams::NUM_CH_3340];        // [A] PCI-3340 1枚目 電流指令値
00209                 volatile double XresA[ConstParams::NUM_CH_6205];        // [m] PCI-6205 1枚目 位置応答値
00210                 
00211                 // 以下はスレッド関連の変数
00212                 volatile double Time;                                                                   // [s]  時刻 (一番速いスレッド THREAD0 の時刻)
00213                 volatile long PeriodicTime[ConstParams::THREAD_NUM];    // [ns] 計測された制御周期
00214                 volatile long ComputationTime[ConstParams::THREAD_NUM]; // [ns] 計測された消費時間
00215                 
00216                 // 以下は任意変数値表示のための変数
00217                 volatile double OptionalVars[ConstParams::NUM_OPT_VARS];// ここに書き込めば好きな値を表示できる(最大8つまで)
00218                 
00219                 // 以下はグラフ描画関連の変数
00220                 double GraphA[ConstParams::MAX_GRAPH_A];        // グラフA(上側)の表示値格納用
00221                 double GraphB[ConstParams::MAX_GRAPH_B];        // グラフB(下側)の表示値格納用
00222 
00223 };
00224 
00225 #endif
00226 
 All Classes Files