PmcmSetMotion¶
機能¶
動作パラメータを設定します。
動作パラメータに初期設定値はありませんので、動作開始前に動作パラメータを設定してください。
連続動作について
原点復帰動作について
位置決め動作について
書式¶
INT PmcmSetMotion(
WORD wID,
WORD wAxis,
PMOTIONPMCM pMotion
);
typedef struct {
WORD wMoveMode;
WORD wStartMode;
FLOAT fSpeedRate;
WORD wAccDecMode;
FLOAT fLowSpeed;
FLOAT fSpeed;
WORD wAccTime;
WORD wDecTime;
FLOAT fSAccSpeed;
FLOAT fSDecSpeed;
LONG lSlowdown;
LONG lStep;
BOOL bAbsolutePtp;
} MOTIONPMCM, *PMOTIONPMCM;
パラメータ¶
wID¶
ボードのID番号を指定します。
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | WORD | unsigned short | ushort | Short | Integer | uint16_t |
wAxis¶
設定する軸を指定します。複数の軸を指定することができます。
設定値 | 内容 |
---|---|
PMCM_AXIS_X | X軸 |
PMCM_AXIS_Y | Y軸 |
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | WORD | unsigned short | ushort | Short | Integer | uint16_t |
pMotion¶
動作パラメータが格納されているバッファへのポインタを指定します。
バッファは2軸分用意してください
Warning
ドライバ内での計算による誤差のため、動作パラメータとして設定した値と実際に設定された値が異なる場合があります。
PmcmGetMotion関数を使用して実際に設定された値を確認することができます。
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | PMOTIONPMCM | MOTIONPMCM* | MOTIONPMCM | MOTIONPMCM | MOTIONPMCM | PMOTIONPMCM |
wMoveMode¶
動作モード
設定値 | 内容 |
---|---|
PMCM_JOG | 連続動作 |
PMCM_ORG | 原点復帰動作 |
PMCM_PTP | 位置決め動作 |
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | WORD | unsigned short | ushort | Short | Integer | uint16_t |
wStartMode¶
起動モード
設定値 | 内容 |
---|---|
PMCM_CONST | 定速起動 |
PMCM_CONST_DEC | 定速-減速起動 |
PMCM_ACC_DEC | 加減速起動 |
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | WORD | unsigned short | ushort | Short | Integer | uint16_t |
fSpeedRate¶
速度倍率
設定範囲は0.3 ~ 600
動作パラメータ計算方法を参照してください。
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | FLOAT | float | float | Single | Single | float |
wAccDecMode¶
加減速モード
設定値 | 内容 |
---|---|
PMCM_ACC_LINEAR | 直線加減速 |
PMCM_ACC_SCURVE | S字加減速 |
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | WORD | unsigned short | ushort | Short | Integer | uint16_t |
fLowSpeed¶
起動速度
設定範囲は0.3 ~ 9829800[pps]
移動速度(fSpeed)以下の値を設定してください
速度倍率により設定範囲が変わります。
動作パラメータ計算方法を参照してください。
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | FLOAT | float | float | Single | Single | float |
fSpeed¶
移動速度
設定範囲は0.3 ~ 9829800[pps]
起動速度(fLowSpeed)以上の値を設定してください
速度倍率により設定範囲が変わります。
動作パラメータ計算方法を参照してください。
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | FLOAT | float | float | Single | Single | float |
wAccTime¶
加速時間
設定単位はmsec
速度倍率・起動速度・移動速度により設定範囲が変わります。
動作パラメータ計算方法を参照してください。
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | WORD | unsigned short | ushort | Short | Integer | uint16_t |
wDecTime¶
減速時間
設定単位はmsec
速度倍率・起動速度・移動速度により設定範囲が変わります。
動作パラメータ計算方法を参照してください。
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | WORD | unsigned short | ushort | Short | Integer | uint16_t |
fSAccSpeed¶
加速S字区間
設定範囲は0, 0.3 ~ 4914600[pps]
0を設定した場合は直線加速部分のないS字加速動作となります。
加減速モードに直線加減速を指定した場合は0を設定してください
速度倍率により設定範囲が変わります。
動作パラメータ計算方法を参照してください。
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | FLOAT | float | float | Single | Single | float |
fSDecSpeed¶
減速S字区間
設定範囲は0, 0.3 ~ 4914600[pps]
0を設定した場合は直線減速部分のないS字減速動作となります。
加減速モードに直線加減速を指定した場合は0を設定してください
速度倍率により設定範囲が変わります。
動作パラメータ計算方法を参照してください。
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | FLOAT | float | float | Single | Single | float |
lSlowdown¶
スローダウンポイント
設定値 | 内容 |
---|---|
-1 | スローダウンポイントは自動設定 減速開始点は内部で計算されます。 |
0 ~ 16777215 | スローダウンポイントはマニュアル設定 残パルス数が設定値以下になると減速を開始します。 動作モードがPMCM_PTPの時に有効となります。 |
Tip
位置決め動作の時のみ有効となります。
連続動作、原点復帰動作の時は-1または0を設定してください。
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | LONG | long | int | Integer | Long | int32_t |
lStep¶
移動パルス数、移動方向
動作モードによって設定値が異なります。
動作モード | 設定値 |
---|---|
PMCM_JOG PMCM_ORG | PMCM_DIR_CW : +方向 PMCM_DIR_CCW : -方向 |
PMCM_PTP | -134217728 ~ +134217727 |
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | LONG | long | int | Integer | Long | int32_t |
bAbsolutePtp¶
絶対座標指定
移動パルス数の設定値を絶対座標とすることができます。
動作モードがPMCM_PTPの時に有効となります。
設定値 | 内容 |
---|---|
0 | 移動パルス数の設定値は移動量 |
1 | 移動パルス数の設定値は絶対座標 |
動作モードがPMCM_JOG・PMCM_ORGの時は0を設定してください
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | BOOL | long | int | Integer | Long | int32_t |
戻り値¶
関数が正常に終了した場合は0(PMCM_RESULT_SUCCESS)が返ります。
正常に終了しなかった場合は0以外が返りますので、その場合はエラーコードを参照してください。
言語 | C/C++ | C++/CLI | C# | VB(.NET2002以降) | VB6.0/VBA | GCC |
---|---|---|---|---|---|---|
型 | INT | int | int | Integer | Long | int32_t |
備考¶
複数軸同時に設定しない場合でも、動作パラメータバッファは2軸分用意し、配列の先頭アドレスを関数へ設定するようにしてください。
MOTIONPMCM Motion[2]; ←2軸分用意
Motion[0] ←X軸の動作パラメータ
Motion[1] ←Y軸の動作パラメータ
Warning
本関数を実行した後、PmcmStartMotion関数を実行するまでの間に各種設定関数(PmcmSetxxxxConfig関数)を実行しても、設定内容が反映されずに動作する場合があります。
各種設定をおこなう場合は本関数を実行する前におこなってください。
使用例¶
IDが0のボードへ、X軸の動作パラメータを設定します。
C/C++¶
int nResult;
WORD wAxis;
MOTIONPMCM Motion[2];
wAxis = PMCM_AXIS_X;
Motion[0].wMoveMode = PMCM_JOG;
Motion[0].wStartMode = PMCM_CONST;
Motion[0].fSpeedRate = 1;
Motion[0].wAccDecMode = PMCM_ACC_LINEAR;
Motion[0].fLowSpeed = 100;
Motion[0].fSpeed = 100;
Motion[0].wAccTime = 0;
Motion[0].wDecTime = 0;
Motion[0].fSAccSpeed = 0;
Motion[0].fSDecSpeed = 0;
Motion[0].lSlowdown = -1;
Motion[0].lStep = PMCM_DIR_CW;
Motion[0].bAbsolutePtp = 0;
nResult = PmcmSetMotion(0, wAxis, Motion);
C++/CLI¶
int result;
unsigned short axis;
MOTIONPMCM motion[2];
axis = PMCM_AXIS_X;
motion[0].wMoveMode = PMCM_JOG;
motion[0].wStartMode = PMCM_CONST;
motion[0].fSpeedRate = 1;
motion[0].wAccDecMode = PMCM_ACC_LINEAR;
motion[0].fLowSpeed = 100;
motion[0].fSpeed = 100;
motion[0].wAccTime = 0;
motion[0].wDecTime = 0;
motion[0].fSAccSpeed = 0;
motion[0].fSDecSpeed = 0;
motion[0].lSlowdown = -1;
motion[0].lStep = PMCM_DIR_CW;
motion[0].bAbsolutePtp = 0;
result = PmcmSetMotion(0, axis, motion);
C#¶
int result;
ushort axis;
Pmcm.MOTIONPMCM[] motion = new Pmcm.MOTIONPMCM[2];
axis = Pmcm.PMCM_AXIS_X;
motion[0].wMoveMode = Pmcm.PMCM_JOG;
motion[0].wStartMode = Pmcm.PMCM_CONST;
motion[0].fSpeedRate = 1;
motion[0].wAccDecMode = Pmcm.PMCM_ACC_LINEAR;
motion[0].fLowSpeed = 100;
motion[0].fSpeed = 100;
motion[0].wAccTime = 0;
motion[0].wDecTime = 0;
motion[0].fSAccSpeed = 0;
motion[0].fSDecSpeed = 0;
motion[0].lSlowdown = -1;
motion[0].lStep = Pmcm.PMCM_DIR_CW;
motion[0].bAbsolutePtp = 0;
result = Pmcm.SetMotion(0, axis, motion);
VB(.NET2002以降)¶
Dim result As Integer
Dim axis As Short
Dim motion(1) As MOTIONPMCM
axis = PMCM_AXIS_X
motion(0).wMoveMode = PMCM_JOG
motion(0).wStartMode = PMCM_CONST
motion(0).fSpeedRate = 1
motion(0).wAccDecMode = PMCM_ACC_LINEAR
motion(0).fLowSpeed = 100
motion(0).fSpeed = 100
motion(0).wAccTime = 0
motion(0).wDecTime = 0
motion(0).fSAccSpeed = 0
motion(0).fSDecSpeed = 0
motion(0).lSlowdown = -1
motion(0).lStep = PMCM_DIR_CW
motion(0).bAbsolutePtp = 0
result = PmcmSetMotion(0, axis, motion)
VB6.0/VBA¶
Dim lngResult As Long
Dim intAxis As Integer
Dim Motion(1) As MOTIONPMCM
intAxis = PMCM_AXIS_X
Motion(0).wMoveMode = PMCM_JOG
Motion(0).wStartMode = PMCM_CONST
Motion(0).fSpeedRate = 1
Motion(0).wAccDecMode = PMCM_ACC_LINEAR
Motion(0).fLowSpeed = 100
Motion(0).fSpeed = 100
Motion(0).wAccTime = 0
Motion(0).wDecTime = 0
Motion(0).fSAccSpeed = 0
Motion(0).fSDecSpeed = 0
Motion(0).lSlowdown = -1
Motion(0).lStep = PMCM_DIR_CW
Motion(0).bAbsolutePtp = 0
lngResult = PmcmSetMotion(0, intAxis, Motion(0))
GCC¶
int32_t result;
uint16_t axis;
MOTIONPMCM motion[2];
axis = PMCM_AXIS_X;
motion[0].wMoveMode = PMCM_JOG;
motion[0].wStartMode = PMCM_CONST;
motion[0].fSpeedRate = 1;
motion[0].wAccDecMode = PMCM_ACC_LINEAR;
motion[0].fLowSpeed = 100;
motion[0].fSpeed = 100;
motion[0].wAccTime = 0;
motion[0].wDecTime = 0;
motion[0].fSAccSpeed = 0;
motion[0].fSDecSpeed = 0;
motion[0].lSlowdown = -1;
motion[0].lStep = PMCM_DIR_CW;
motion[0].bAbsolutePtp = 0;
result = PmcmSetMotion(0, axis, motion);