関数 > モーター制御関数 >

PmcmSetMotionLine

機能

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

直線補間動作について

書式

INT PmcmSetMotionLine(
    WORD wID,
    WORD wAxis,
    PMOTIONLINEPMCM pMotionLine
);

typedef struct {
    WORD wStartMode;
    FLOAT fSpeedRate;
    WORD wAccDecMode;
    FLOAT fLowSpeed;
    FLOAT fSpeed;
    WORD wAccTime;
    WORD wDecTime;
    FLOAT fSAccSpeed;
    FLOAT fSDecSpeed;
    LONG lSlowdown;
    LONG lStep[2];
    BOOL bAbsolute[2];
} MOTIONLINEPMCM, *PMOTIONLINEPMCM;

パラメータ

wID

ボードのID番号を指定します。

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

wAxis

設定する軸を指定します。2軸以上指定してください。

設定値 内容
PMCM_AXIS_X X軸
PMCM_AXIS_Y Y軸

PMC-M2C-UのwAxisに設定する値はPMCM_AXIS_X + PMCM_AXIS_Yで固定です

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

pMotionLine

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

動作パラメータ計算方法

Warning

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

下記パラメータについては、X軸・Y軸で移動量の多い軸のパラメータを設定してください。
fSpeedRate
fLowSpeed
fSpeed
wAccTime
wDecTime
fSAccSpeed
fSDecSpeed
lSlowdown

言語 C/C++ C++/CLI C# VB(.NET2002以降) VB6.0 GCC
PMOTIONLINEPMCM MOTIONLINEPMCM* ref MOTIONLINEPMCM MOTIONLINEPMCM MOTIONLINEPMCM PMOTIONLINEPMCM

wStartMode

起動モード

設定値 内容
PMCM_CONST 定速起動
PMCM_CONST_DEC 定速-減速起動
PMCM_ACC_DEC 加減速起動
言語 C/C++ C++/CLI C# VB(.NET2002以降) VB6.0 GCC
WORD unsigned short ushort Short Integer uint16_t

fSpeedRate

速度倍率
設定範囲は0.3 ~ 600

動作パラメータ計算方法を参照してください。

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

wAccDecMode

加減速モード

設定値 内容
PMCM_ACC_LINEAR 直線加減速
PMCM_ACC_SCURVE S字加減速
言語 C/C++ C++/CLI C# VB(.NET2002以降) VB6.0 GCC
WORD unsigned short ushort Short Integer uint16_t

fLowSpeed

起動速度
設定範囲は0.3 ~ 9829800[pps]

移動速度(fSpeed)以下の値を設定してください

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

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

fSpeed

移動速度
設定範囲は0.3 ~ 9829800[pps]

起動速度(fLowSpeed)以上の値を設定してください

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

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

wAccTime

加速時間
設定単位はmsec

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

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

wDecTime

減速時間
設定単位はmsec

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

言語 C/C++ C++/CLI C# VB(.NET2002以降) VB6.0 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 GCC
FLOAT float float Single Single float

fSDecSpeed

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

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

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

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

lSlowdown

スローダウンポイント

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

lStep

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

2軸の移動パルス数を設定します。
lStep[0] : X軸の移動パルス数
lStep[1] : Y軸の移動パルス数

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

bAbsolute

絶対座標指定
移動パルス数の設定値を絶対座標とすることができます。

設定値 内容
0 移動パルス数の設定値は移動量
1 移動パルス数の設定値は絶対座標

2軸の絶対座標指定を設定します。
bAbsolute[0] : X軸の絶対座標指定
bAbsolute[1] : Y軸の絶対座標指定

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

戻り値

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

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

備考

Warning

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

使用例

IDが0のボードへ、直線補間動作パラメータを設定します。

C/C++

int nResult;
WORD wAxis;
MOTIONLINEPMCM MotionLine;
wAxis = PMCM_AXIS_X + PMCM_AXIS_Y;
MotionLine.wStartMode = PMCM_CONST;
MotionLine.fSpeedRate = 1;
MotionLine.wAccDecMode = PMCM_ACC_LINEAR;
MotionLine.fLowSpeed = 100;
MotionLine.fSpeed = 100;
MotionLine.wAccTime = 0;
MotionLine.wDecTime = 0;
MotionLine.fSAccSpeed = 0;
MotionLine.fSDecSpeed = 0;
MotionLine.lSlowdown = -1;
MotionLine.lStep[0] = 1000;
MotionLine.lStep[1] = 500;
MotionLine.bAbsolute[0] = 0;
MotionLine.bAbsolute[1] = 0;
nResult = PmcmSetMotionLine(0, wAxis, &MotionLine);

C++/CLI

int result;
unsigned short axis;
MOTIONLINEPMCM motionLine;
axis = PMCM_AXIS_X + PMCM_AXIS_Y;
motionLine.wStartMode = PMCM_CONST;
motionLine.fSpeedRate = 1;
motionLine.wAccDecMode = PMCM_ACC_LINEAR;
motionLine.fLowSpeed = 100;
motionLine.fSpeed = 100;
motionLine.wAccTime = 0;
motionLine.wDecTime = 0;
motionLine.fSAccSpeed = 0;
motionLine.fSDecSpeed = 0;
motionLine.lSlowdown = -1;
motionLine.lStep[0] = 1000;
motionLine.lStep[1] = 500;
motionLine.bAbsolute[0] = 0;
motionLine.bAbsolute[1] = 0;
result = PmcmSetMotionLine(0, axis, &motionLine);

C#

int result;
ushort axis;
Pmcm.MOTIONLINEPMCM motionLine = new Pmcm.MOTIONLINEPMCM();
motionLine.Initialize();
axis = Pmcm.PMCM_AXIS_X + Pmcm.PMCM_AXIS_Y;
motionLine.wStartMode = Pmcm.PMCM_CONST;
motionLine.fSpeedRate = 1;
motionLine.wAccDecMode = Pmcm.PMCM_ACC_LINEAR;
motionLine.fLowSpeed = 100;
motionLine.fSpeed = 100;
motionLine.wAccTime = 0;
motionLine.wDecTime = 0;
motionLine.fSAccSpeed = 0;
motionLine.fSDecSpeed = 0;
motionLine.lSlowdown = -1;
motionLine.lStep[0] = 1000;
motionLine.lStep[1] = 500;
motionLine.bAbsolute[0] = 0;
motionLine.bAbsolute[1] = 0;
result = Pmcm.SetMotionLine(0, axis, ref motionLine);

VB(.NET2002以降)

Dim result As Integer
Dim axis As Short
Dim motionLine As MOTIONLINEPMCM
motionLine.Initialize()
axis = PMCM_AXIS_X + PMCM_AXIS_Y
motionLine.wStartMode = PMCM_CONST
motionLine.fSpeedRate = 1
motionLine.wAccDecMode = PMCM_ACC_LINEAR
motionLine.fLowSpeed = 100
motionLine.fSpeed = 100
motionLine.wAccTime = 0
motionLine.wDecTime = 0
motionLine.fSAccSpeed = 0
motionLine.fSDecSpeed = 0
motionLine.lSlowdown = -1
motionLine.lStep(0) = 1000
motionLine.lStep(1) = 500
motionLine.bAbsolute(0) = 0
motionLine.bAbsolute(1) = 0
result = PmcmSetMotionLine(0, axis, motionLine)

VB6.0

Dim lngResult As Long
Dim intAxis As Integer
Dim MotionLine As MOTIONLINEPMCM
intAxis = PMCM_AXIS_X + PMCM_AXIS_Y
MotionLine.wStartMode = PMCM_CONST
MotionLine.fSpeedRate = 1
MotionLine.wAccDecMode = PMCM_ACC_LINEAR
MotionLine.fLowSpeed = 100
MotionLine.fSpeed = 100
MotionLine.wAccTime = 0
MotionLine.wDecTime = 0
MotionLine.fSAccSpeed = 0
MotionLine.fSDecSpeed = 0
MotionLine.lSlowdown = -1
MotionLine.lStep(0) = 1000
MotionLine.lStep(1) = 500
MotionLine.bAbsolute(0) = 0
MotionLine.bAbsolute(1) = 0
lngResult = PmcmSetMotionLine(0, intAxis, MotionLine)

GCC

int32_t result;
uint16_t axis;
MOTIONLINEPMCM motion_line;
axis = PMCM_AXIS_X + PMCM_AXIS_Y;
motion_line.wStartMode = PMCM_CONST;
motion_line.fSpeedRate = 1;
motion_line.wAccDecMode = PMCM_ACC_LINEAR;
motion_line.fLowSpeed = 100;
motion_line.fSpeed = 100;
motion_line.wAccTime = 0;
motion_line.wDecTime = 0;
motion_line.fSAccSpeed = 0;
motion_line.fSDecSpeed = 0;
motion_line.lSlowdown = -1;
motion_line.lStep[0] = 1000;
motion_line.lStep[1] = 500;
motion_line.bAbsolute[0] = 0;
motion_line.bAbsolute[1] = 0;
result = PmcmSetMotionLine(0, axis, &motion_line);