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

YduPmcsSetMotionEx

機能

速度倍率を含めた動作パラメータを設定します。
動作中に速度変更をおこなう場合はYduPmcsSetMotion関数ではなく、こちらの関数を使用してください。

Note

速度倍率については、動作パラメータ計算方法を参照してください。

連続動作について
原点復帰動作について
位置決め動作について

書式

INT YduPmcsSetMotionEx(
    WORD unitId,
    WORD axis,
    WORD moveMode,
    MOTIONEXPMCS* motionEx
);

// 動作パラメータ構造体
typedef struct {
    WORD wSpeedRate;
    WORD wAccMode;
    DWORD dwLowSpeed;
    DWORD dwSpeed;
    WORD wAccTime;
    LONG lStep;
} MOTIONEXPMCS, *PMOTIONEXPMCS;

パラメータ

unitId

ユニットのID番号を指定します。

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

axis

動作パラメータを設定する軸を指定します。
複数の軸を指定することができます。

定義
PMC_AXIS_X0 0x01 X0軸
PMC_AXIS_Y0 0x02 Y0軸
PMC_AXIS_Z0 0x04 Z0軸
PMC_AXIS_U0 0x08 U0軸
PMC_AXIS_X1 0x10 X1軸
PMC_AXIS_Y1 0x20 Y1軸
PMC_AXIS_Z1 0x40 Z1軸
PMC_AXIS_U1 0x80 U1軸
言語 C# VB(.NET2002以降) VB6.0/VBA C++/CLI C/C++
ushort Short Integer unsigned short WORD

moveMode

パラメータを設定する動作モードを指定します。

定義 動作モード
PMC_JOG 0 連続動作
PMC_ORG 1 原点復帰動作
PMC_PTP 2 位置決め動作
言語 C# VB(.NET2002以降) VB6.0/VBA C++/CLI C/C++
ushort Short Integer unsigned short WORD

motionEx

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

動作パラメータ計算方法

Note

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

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

wSpeedRate

速度倍率

設定範囲 ユニット および ドライバ
1 ~ 300 「ユニットのシリアルNo.が300000以上」
かつ
「ドライバがVer.3.10.0以上」の場合
1 ~ 50 「ユニットのシリアルNo.が299999以下」
または
「ドライバがVer.3.01以下」の場合

Note

「ユニットのシリアルNo.」と「ドライバのバージョン」によって設定範囲が異なります。

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

wAccMode

加減速モード

定義 加減速モード
PMC_ACC_NORMAL 0 直線加減速
PMC_ACC_SIN 1 S字加減速
言語 C# VB(.NET2002以降) VB6.0/VBA C++/CLI C/C++
ushort Short Integer unsigned short WORD

dwLowSpeed

起動時速度 [PPS]

設定範囲 ユニット および ドライバ
1 ~ 2457300 「ユニットのシリアルNo.が300000以上」
かつ
「ドライバがVer.3.10.0以上」の場合
1 ~ 409550 「ユニットのシリアルNo.が299999以下」
または
「ドライバがVer.3.01以下」の場合

Note

移動速度(dwSpeed)以下の値を設定してください。
また「ユニットのシリアルNo.」と「ドライバのバージョン」によって設定範囲が異なります。

速度倍率によって設定できる範囲が変わります。
速度倍率による設定範囲外の値を指定した場合は設定範囲内の値に変更されます。
(設定範囲については動作パラメータ計算方法を参照してください)

言語 C# VB(.NET2002以降) VB6.0/VBA C++/CLI C/C++
uint Integer Long unsigned long DWORD

dwSpeed

移動速度 [PPS]

設定範囲 ユニット および ドライバ
1 ~ 2457300 「ユニットのシリアルNo.が300000以上」
かつ
「ドライバがVer.3.10.0以上」の場合
1 ~ 409550 「ユニットのシリアルNo.が299999以下」
または
「ドライバがVer.3.01以下」の場合

Note

起動時速度(dwLowSpeed)以上の値を設定してください。
また「ユニットのシリアルNo.」と「ドライバのバージョン」によって設定範囲が異なります。

速度倍率によって設定できる範囲が変わります。
速度倍率による設定範囲外の値を指定した場合は設定範囲内の値に変更されます。
設定範囲については動作パラメータ計算方法を参照してください。

言語 C# VB(.NET2002以降) VB6.0/VBA C++/CLI C/C++
uint Integer Long unsigned long DWORD

wAccTime

加減速時間
設定単位はmsec

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

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

lStep

移動方向・移動パルス数
動作モードによって値が異なります。

動作モードが「連続動作(PMC_JOG)」または「原点復帰動作(PMC_ORG)」の場合

定義 移動方向
PMC_DIR_CW 1 +方向
PMC_DIR_CCW -1 -方向

動作モードが「位置決め動作(PMC_PTP)」の場合

値(設定範囲) 設定内容
-16777215 ~ +16777215 移動パルス数
言語 C# VB(.NET2002以降) VB6.0/VBA C++/CLI C/C++
int Integer Long long LONG

戻り値

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

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

備考

動作パラメータを複数軸同時に設定することができます。
各軸の動作パラメータは以下のように設定されますので、動作パラメータ格納バッファ(MOTIONEXPMCS)は軸数分用意し、配列の先頭アドレスを関数へ設定するようにしてください。

// 4軸の場合
MOTIONEXPMCS motionEx\[4\];   // 4軸分用意
motionEx\[0\] // X0の動作パラメータ
motionEx\[1\] // Y0の動作パラメータ
motionEx\[2\] // Z0の動作パラメータ
motionEx\[3\] // U0の動作パラメータ

// 8軸の場合
MOTIONEXPMCS motionEx\[8\];   // 8軸分用意
motionEx\[0\] // X0の動作パラメータ
motionEx\[1\] // Y0の動作パラメータ
motionEx\[2\] // Z0の動作パラメータ
motionEx\[3\] // U0の動作パラメータ
motionEx\[4\] // X1の動作パラメータ
motionEx\[5\] // Y1の動作パラメータ
motionEx\[6\] // Z1の動作パラメータ
motionEx\[7\] // U1の動作パラメータ

使用例

ユニットIDが0のユニットへ、X0軸とZ0軸の動作パラメータを設定します。

C#

YduPmcs.MOTIONEXPMCS[] motionEx = new YduPmcs.MOTIONEXPMCS[4];
motionEx[0].wSpeedRate = 1;
motionEx[0].wAccMode = YduPmcs.PMC_ACC_SIN;
motionEx[0].dwLowSpeed = 200;
motionEx[0].dwSpeed = 2000;
motionEx[0].wAccTime = 300;
motionEx[0].lStep = YduPmcs.PMC_DIR_CW;
motionEx[2].wSpeedRate = 1;
motionEx[2].wAccMode = YduPmcs.PMC_ACC_SIN;
motionEx[2].dwLowSpeed = 100;
motionEx[2].dwSpeed = 3000;
motionEx[2].wAccTime = 1000;
motionEx[2].lStep = YduPmcs.PMC_DIR_CW;
var result = YduPmcs.SetMotionEx(0, YduPmcs.PMC_AXIS_X0 + YduPmcs.PMC_AXIS_Z0, YduPmcs.PMC_JOG, motionEx);

VB(.NET2002以降)

Dim motionEx(3) As MOTIONEXPMCS
motionEx(0).wSpeedRate = 1
motionEx(0).wAccMode = PMC_ACC_SIN
motionEx(0).dwLowSpeed = 200
motionEx(0).dwSpeed = 2000
motionEx(0).wAccTime = 300
motionEx(0).lStep = PMC_DIR_CW
motionEx(2).wSpeedRate = 1
motionEx(2).wAccMode = PMC_ACC_SIN
motionEx(2).dwLowSpeed = 100
motionEx(2).dwSpeed = 3000
motionEx(2).wAccTime = 1000
motionEx(2).lStep = PMC_DIR_CW
Dim result As Integer = YduPmcsSetMotionEx(0, PMC_AXIS_X0 + PMC_AXIS_Z0, PMC_JOG, motionEx)

VB6.0/VBA

Dim result As Long
Dim motionEx(3) As MOTIONEXPMCS
motionEx(0).wSpeedRate = 1
motionEx(0).wAccMode = PMC_ACC_SIN
motionEx(0).dwLowSpeed = 200
motionEx(0).dwSpeed = 2000
motionEx(0).wAccTime = 300
motionEx(0).lStep = PMC_DIR_CW
motionEx(2).wSpeedRate = 1
motionEx(2).wAccMode = PMC_ACC_SIN
motionEx(2).dwLowSpeed = 100
motionEx(2).dwSpeed = 3000
motionEx(2).wAccTime = 1000
motionEx(2).lStep = PMC_DIR_CW
result = YduPmcsSetMotionEx(0, PMC_AXIS_X0 + PMC_AXIS_Z0, PMC_JOG, motionEx(0))

C++/CLI

MOTIONEXPMCS motionEx[4];
motionEx[0].wSpeedRate = 1;
motionEx[0].wAccMode = PMC_ACC_SIN;
motionEx[0].dwLowSpeed = 200;
motionEx[0].dwSpeed = 2000;
motionEx[0].wAccTime = 300;
motionEx[0].lStep = PMC_DIR_CW;
motionEx[2].wSpeedRate = 1;
motionEx[2].wAccMode = PMC_ACC_SIN;
motionEx[2].dwLowSpeed = 100;
motionEx[2].dwSpeed = 3000;
motionEx[2].wAccTime = 1000;
motionEx[2].lStep = PMC_DIR_CW;
int result = YduPmcsSetMotionEx(0, PMC_AXIS_X0 + PMC_AXIS_Z0, PMC_JOG, motionEx);

C/C++

INT result;
MOTIONEXPMCS motionEx[4];
motionEx[0].wSpeedRate = 1;
motionEx[0].wAccMode = PMC_ACC_SIN;
motionEx[0].dwLowSpeed = 200;
motionEx[0].dwSpeed = 2000;
motionEx[0].wAccTime = 300;
motionEx[0].lStep = PMC_DIR_CW;
motionEx[2].wSpeedRate = 1;
motionEx[2].wAccMode = PMC_ACC_SIN;
motionEx[2].dwLowSpeed = 100;
motionEx[2].dwSpeed = 3000;
motionEx[2].wAccTime = 1000;
motionEx[2].lStep = PMC_DIR_CW;
result = YduPmcsSetMotionEx(0, PMC_AXIS_X0 + PMC_AXIS_Z0, PMC_JOG, motionEx);