コンテンツにスキップ
関数 > モーター制御関数 >

PmcmSetMotionCp

機能

CPの動作パラメータを設定します。
動作パラメータに初期設定値はありませんので、動作開始前に動作パラメータを設定してください。

CP動作について

書式

INT PmcmSetMotionCp(
    WORD wID,
    WORD wAxis,
    PMOTIONPMCM pMotion,
    WORD wCount
);

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

動作パラメータが格納されているバッファへのポインタを指定します。

動作パラメータ計算方法

Warning

ドライバ内での計算による誤差のため、動作パラメータとして設定した値と実際に設定された値が異なる場合があります。
PmcmGetMotionCp関数を使用して実際に設定された値を確認することができます。

言語 C/C++ C++/CLI C# VB(.NET2002以降) VB6.0/VBA GCC
PMOTIONPMCM MOTIONPMCM* MOTIONPMCM MOTIONPMCM MOTIONPMCM PMOTIONPMCM

wMoveMode

動作モード

設定値 内容
PMCM_PTP 位置決め動作

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.3 ~ 4914600[pps]

加減速モードに直線加減速を指定した場合は0を設定してください

速度倍率により設定範囲が変わります。
動作パラメータ計算方法を参照してください。

言語 C/C++ C++/CLI C# VB(.NET2002以降) VB6.0/VBA GCC
FLOAT float float Single Single float

fSDecSpeed

減速S字区間
設定範囲は0.3 ~ 4914600[pps]

加減速モードに直線加減速を指定した場合は0を設定してください

速度倍率により設定範囲が変わります。
動作パラメータ計算方法を参照してください。

言語 C/C++ C++/CLI C# VB(.NET2002以降) VB6.0/VBA GCC
FLOAT float float Single Single float

lSlowdown

スローダウンポイント

設定値 内容
-1 スローダウンポイントは自動設定
減速開始点は内部で計算されます。
0 ~ 16777215 スローダウンポイントはマニュアル設定
残パルス数が設定値以下になると減速を開始します。
言語 C/C++ C++/CLI C# VB(.NET2002以降) VB6.0/VBA GCC
LONG long int Integer Long int32_t

lStep

移動パルス数、移動方向
設定範囲は-134217728 ~ +134217727

言語 C/C++ C++/CLI C# VB(.NET2002以降) VB6.0/VBA GCC
LONG long int Integer Long int32_t

bAbsolutePtp

絶対座標指定

設定値 内容
0 移動パルス数の設定値は移動量

0のみ指定可能です

言語 C/C++ C++/CLI C# VB(.NET2002以降) VB6.0/VBA GCC
BOOL long int Integer Long int32_t

wCount

設定する動作パラメータ数
設定範囲は1 ~ 96

言語 C/C++ C++/CLI C# VB(.NET2002以降) VB6.0/VBA GCC
WORD unsigned short ushort Short Integer uint16_t

戻り値

関数が正常に終了した場合は0(PMCM_RESULT_SUCCESS)が返ります。
正常に終了しなかった場合は0以外が返りますので、その場合はエラーコードを参照してください。

言語 C/C++ C++/CLI C# VB(.NET2002以降) VB6.0/VBA GCC
INT int int Integer Long int32_t

備考

Warning

本関数を実行した後、PmcmStartMotionCp関数を実行するまでの間に各種設定関数(PmcmSetxxxxConfig関数)を実行しても、設定内容が反映されずに動作する場合があります。
各種設定をおこなう場合は本関数を実行する前におこなってください。

使用例

IDが0のボードへ、X軸のCP動作パラメータを2つ設定します。

C/C++

int nResult;
WORD wAxis;
MOTIONPMCM Motion[2];
wAxis = PMCM_AXIS_X;
Motion[0].wMoveMode = PMCM_PTP;
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 = 1000;
Motion[0].bAbsolutePtp = 0;
Motion[1].wMoveMode = PMCM_PTP;
Motion[1].wStartMode = PMCM_CONST;
Motion[1].fSpeedRate = 1;
Motion[1].wAccDecMode = PMCM_ACC_LINEAR;
Motion[1].fLowSpeed = 100;
Motion[1].fSpeed = 100;
Motion[1].wAccTime = 0;
Motion[1].wDecTime = 0;
Motion[1].fSAccSpeed = 0;
Motion[1].fSDecSpeed = 0;
Motion[1].lSlowdown = -1;
Motion[1].lStep = 1000;
Motion[1].bAbsolutePtp = 0;
nResult = PmcmSetMotionCp(0, wAxis, Motion, 2);

C++/CLI

int result;
unsigned short axis;
MOTIONPMCM motion[2];
axis = PMCM_AXIS_X;
motion[0].wMoveMode = PMCM_PTP;
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 = 1000;
motion[0].bAbsolutePtp = 0;
motion[1].wMoveMode = PMCM_PTP;
motion[1].wStartMode = PMCM_CONST;
motion[1].fSpeedRate = 1;
motion[1].wAccDecMode = PMCM_ACC_LINEAR;
motion[1].fLowSpeed = 100;
motion[1].fSpeed = 100;
motion[1].wAccTime = 0;
motion[1].wDecTime = 0;
motion[1].fSAccSpeed = 0;
motion[1].fSDecSpeed = 0;
motion[1].lSlowdown = -1;
motion[1].lStep = 1000;
motion[1].bAbsolutePtp = 0;
result = PmcmSetMotionCp(0, axis, motion, 2);

C#

int result;
ushort axis;
Pmcm.MOTIONPMCM[] motion = new Pmcm.MOTIONPMCM[2];
axis = Pmcm.PMCM_AXIS_X;
motion[0].wMoveMode = Pmcm.PMCM_PTP;
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 = 1000;
motion[0].bAbsolutePtp = 0;
motion[1].wMoveMode = Pmcm.PMCM_PTP;
motion[1].wStartMode = Pmcm.PMCM_CONST;
motion[1].fSpeedRate = 1;
motion[1].wAccDecMode = Pmcm.PMCM_ACC_LINEAR;
motion[1].fLowSpeed = 100;
motion[1].fSpeed = 100;
motion[1].wAccTime = 0;
motion[1].wDecTime = 0;
motion[1].fSAccSpeed = 0;
motion[1].fSDecSpeed = 0;
motion[1].lSlowdown = -1;
motion[1].lStep = 1000;
motion[1].bAbsolutePtp = 0;
result = Pmcm.SetMotionCp(0, axis, motion, 2);

VB(.NET2002以降)

Dim result As Integer
Dim axis As Short
Dim motion(1) As MOTIONPMCM
axis = PMCM_AXIS_X
motion(0).wMoveMode = PMCM_PTP
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 = 1000
motion(0).bAbsolutePtp = 0
motion(1).wMoveMode = PMCM_PTP
motion(1).wStartMode = PMCM_CONST
motion(1).fSpeedRate = 1
motion(1).wAccDecMode = PMCM_ACC_LINEAR
motion(1).fLowSpeed = 100
motion(1).fSpeed = 100
motion(1).wAccTime = 0
motion(1).wDecTime = 0
motion(1).fSAccSpeed = 0
motion(1).fSDecSpeed = 0
motion(1).lSlowdown = -1
motion(1).lStep = 1000
motion(1).bAbsolutePtp = 0
result = PmcmSetMotionCp(0, axis, motion, 2)

VB6.0/VBA

Dim lngResult As Long
Dim intAxis As Integer
Dim Motion(1) As MOTIONPMCM
intAxis = PMCM_AXIS_X
Motion(0).wMoveMode = PMCM_PTP
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 = 1000
Motion(0).bAbsolutePtp = 0
Motion(1).wMoveMode = PMCM_PTP
Motion(1).wStartMode = PMCM_CONST
Motion(1).fSpeedRate = 1
Motion(1).wAccDecMode = PMCM_ACC_LINEAR
Motion(1).fLowSpeed = 100
Motion(1).fSpeed = 100
Motion(1).wAccTime = 0
Motion(1).wDecTime = 0
Motion(1).fSAccSpeed = 0
Motion(1).fSDecSpeed = 0
Motion(1).lSlowdown = -1
Motion(1).lStep = 1000
Motion(1).bAbsolutePtp = 0
lngResult = PmcmSetMotionCp(0, intAxis, Motion(0), 2)

GCC

int32_t result;
uint16_t axis;
MOTIONPMCM motion[2];
axis = PMCM_AXIS_X;
motion[0].wMoveMode = PMCM_PTP;
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 = 1000;
motion[0].bAbsolutePtp = 0;
motion[1].wMoveMode = PMCM_PTP;
motion[1].wStartMode = PMCM_CONST;
motion[1].fSpeedRate = 1;
motion[1].wAccDecMode = PMCM_ACC_LINEAR;
motion[1].fLowSpeed = 100;
motion[1].fSpeed = 100;
motion[1].wAccTime = 0;
motion[1].wDecTime = 0;
motion[1].fSAccSpeed = 0;
motion[1].fSDecSpeed = 0;
motion[1].lSlowdown = -1;
motion[1].lStep = 1000;
motion[1].bAbsolutePtp = 0;
result = PmcmSetMotionCp(0, axis, motion, 2);