32 #define arcs_assert(a) (assert(a))
35 #define EventLogVar(a)
54 : ADDR_BASE(Addr), fd(0), Memptr(nullptr)
57 fd = open(
"/dev/mem", O_RDWR|O_SYNC);
59 Memptr = (uint32_t*)mmap(
nullptr, MEMMAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, ADDR_BASE);
67 : ADDR_BASE(right.ADDR_BASE), fd(0), Memptr(right.Memptr)
69 right.Memptr =
nullptr;
76 munmap(Memptr, MEMMAP_SIZE);
82 void SetCurrent(
const double Current,
const size_t Axis){
84 UintAndFloat CurrentUnion;
85 CurrentUnion.FloatValue = -(float)Current;
86 Memptr[Axis - 1] = CurrentUnion.BinaryExpr;
92 for(
size_t i = 1; i <= N; ++i)
SetCurrent(Current[i - 1], i);
97 for(
size_t i = 1; i <= N; ++i)
SetCurrent(0, i);
105 UintAndFloat CurrentUnion;
106 CurrentUnion.BinaryExpr = Memptr[IDX_RDBASE + IDX_PER_AXIS*(Axis - 1) + IDX_GNRL];
107 return (
double)CurrentUnion.FloatValue;
113 for(
size_t i = 1; i <= N; ++i) Current[i - 1] =
GetCurrent(i);
121 UintAndFloat VelocityUnion;
122 VelocityUnion.BinaryExpr = Memptr[IDX_RDBASE + IDX_PER_AXIS*(Axis - 1) + IDX_GNRL];
123 return ((
double)VelocityUnion.FloatValue)*RPM_TO_RAD;
129 for(
size_t i = 1; i <= N; ++i) Velocity[i - 1] =
GetVelocity(i);
137 return ((
double)(ENC_MASK & Memptr[IDX_RDBASE + IDX_PER_AXIS*(Axis - 1) + IDX_POSL]))*PULSE_TO_RAD;
143 for(
size_t i = 1; i <= N; ++i) Position[i - 1] =
GetPosition(i);
151 UintAndInt NumOfRotUnion;
152 NumOfRotUnion.UnsignedExpr = Memptr[IDX_RDBASE + IDX_PER_AXIS*(Axis - 1) + IDX_POSH];
153 return NumOfRotUnion.SignedExpr;
175 UintAndFloat TorqueUnion;
176 TorqueUnion.BinaryExpr = Memptr[IDX_RDBASE + IDX_PER_AXIS*(Axis - 1) + IDX_TRQ];
177 return ((
double)TorqueUnion.FloatValue);
183 for(
size_t i = 1; i <= N; ++i) Torque[i - 1] =
GetTorque(i);
191 return Memptr[IDX_CNTBASE + Axis - 1];
197 Memptr[IDX_SERVO_ON] = 0x01;
204 Memptr[IDX_SERVO_OFF] = 0x01;
212 Memptr[IDX_ACCCTRL] = 0x01;
215 Memptr[IDX_CURCTRL] = 0x01;
225 Memptr[IDX_ERRCLR] = 0x01;
231 Memptr[IDX_ZEROCAL] = 0x01;
237 static constexpr unsigned int MEMMAP_SIZE = 0x120;
238 static constexpr size_t IDX_RDBASE = 32;
239 static constexpr size_t IDX_PER_AXIS = 4;
240 static constexpr size_t IDX_POSH = 0;
241 static constexpr size_t IDX_POSL = 1;
242 static constexpr size_t IDX_TRQ = 2;
243 static constexpr size_t IDX_GNRL = 3;
244 static constexpr size_t IDX_CNTBASE = 60;
245 static constexpr size_t IDX_SERVO_ON = 20;
246 static constexpr size_t IDX_SERVO_OFF = 21;
247 static constexpr size_t IDX_ACCCTRL = 22;
248 static constexpr size_t IDX_CURCTRL = 23;
249 static constexpr size_t IDX_ERRCLR = 24;
250 static constexpr size_t IDX_ZEROCAL = 25;
251 static constexpr double RPM_TO_RAD = 2.0*M_PI/60.0;
252 static constexpr double PULSE_TO_RAD = 2.0*M_PI/1048576.0;
253 static constexpr uint32_t ENC_MASK = 0x000FFFFF;
254 const unsigned long ADDR_BASE;
266 uint32_t UnsignedExpr;
#define PassedLog()
イベントログ用マクロ(ファイルと行番号のみ記録版)
Definition ARCSeventlog.hh:26
#define arcs_assert(a)
ARCS用assertマクロ a : assert条件
Definition ARCSassert.hh:17
USV_PCIE7インターフェースクラス ユニパルスUSV_PCIE7コントローラのための入出力機能を提供します。
Definition USV-PCIE7.hh:43
~USV_PCIE7()
デストラクタ
Definition USV-PCIE7.hh:73
void SetCurrent(const double Current, const size_t Axis)
指定した軸にq軸電流指令を設定する関数
Definition USV-PCIE7.hh:82
ControlMode
制御モードの定義
Definition USV-PCIE7.hh:46
@ CURRENT_CTRL
電流制御モード
Definition USV-PCIE7.hh:48
@ ACCELERATION_CTRL
加速度制御モード
Definition USV-PCIE7.hh:47
void TurnServosOn(void)
全軸サーボONにする関数
Definition USV-PCIE7.hh:195
void TurnServosOff(void)
全軸サーボOFFにする関数
Definition USV-PCIE7.hh:202
void GetTorque(std::array< double, N > &Torque)
全軸のトルクを取得する関数(配列版)
Definition USV-PCIE7.hh:182
void GetVelocity(std::array< double, N > &Velocity)
全軸の速度を取得する関数(配列版) (アナログ出力設定"AOMD 1 0 1.0"に設定のこと)
Definition USV-PCIE7.hh:128
int32_t GetNumOfRotation(const size_t Axis)
指定した軸の回転の数を取得する関数
Definition USV-PCIE7.hh:149
uint32_t GetCounter(const size_t Axis)
指定した軸の同期カウンタデータを取得する関数
Definition USV-PCIE7.hh:189
double GetCurrent(const size_t Axis)
指定した軸のq軸電流を取得する関数(アナログ出力設定"AOMD 4 0 1.0"に設定のこと)
Definition USV-PCIE7.hh:103
double GetFullPosition(const size_t Axis)
指定した軸の位置を取得する関数(値域±∞版)
Definition USV-PCIE7.hh:159
void ClearErrorStatus(void)
エラー状態をクリアする関数
Definition USV-PCIE7.hh:223
void SetCurrent(const std::array< double, N > &Current)
指定した軸にq軸電流指令を設定する関数(配列版)
Definition USV-PCIE7.hh:91
void GetPosition(std::array< double, N > &Position)
全軸の位置を取得する関数(値域0~2π版)(配列版)
Definition USV-PCIE7.hh:142
double GetPosition(const size_t Axis)
指定した軸の位置を取得する関数(値域0~2π版)
Definition USV-PCIE7.hh:135
double GetTorque(const size_t Axis)
指定した軸のトルクを取得する関数
Definition USV-PCIE7.hh:173
void GetFullPosition(std::array< double, N > &Position)
全軸の位置を取得する関数(値域±∞版)(配列版)
Definition USV-PCIE7.hh:166
void SetZeroCurrent(void)
全軸のq軸電流指令をゼロに設定する関数
Definition USV-PCIE7.hh:96
double GetVelocity(const size_t Axis)
指定した軸の速度を取得する関数(アナログ出力設定"AOMD 1 0 1.0"に設定のこと)
Definition USV-PCIE7.hh:119
USV_PCIE7(const unsigned long Addr)
コンストラクタ
Definition USV-PCIE7.hh:53
USV_PCIE7(USV_PCIE7 &&right)
ムーブコンストラクタ
Definition USV-PCIE7.hh:66
void SetControlMode(ControlMode Ctrl)
制御モードを設定する関数
Definition USV-PCIE7.hh:208
void GetCurrent(std::array< double, N > &Current)
全軸のq軸電流指令を取得する関数(配列版) (アナログ出力設定"AOMD 4 0 1.0"に設定のこと)
Definition USV-PCIE7.hh:112
void CalibrateZeroTorque(void)
トルクセンサのゼロ校正を実行する関数
Definition USV-PCIE7.hh:229