コンテンツにスキップ
サンプルプログラム > MotionCP >

Visual C++

オブジェクト

テキストボックス ID メンバ変数
ID番号 IDC_ID m_wID

オープン

if( !UpdateData( TRUE ) ) {
    return;
}

int nResult;

nResult = PmcmOpen( m_wID, "PMC-M2C-U" );
if( nResult == PMCM_RESULT_SUCCESS ) {
    AfxMessageBox( "オープン成功", MB_OK | MB_ICONINFORMATION );
} else {
    AfxMessageBox( "オープン失敗", MB_OK | MB_ICONSTOP );
}

各種設定

int nResult;
WORD wAxis;
char szResult[64];

wAxis = PMCM_AXIS_X + PMCM_AXIS_Y;

// センサ設定
// オンで検知するセンサを接続している場合や、リミットスイッチを接続していない場合はモーターが動作しません
// その場合は以下の関数を実行してセンサ設定を"オンで検知"に変更してください
//nResult = PmcmSetSensorConfig( m_wID, wAxis, PMCM_LOGIC, 0x3F );
//if( nResult != PMCM_RESULT_SUCCESS ) {
//    wsprintf( szResult, "PmcmSetSensorConfig ERROR : 0x%X", nResult );
//    AfxMessageBox( szResult, MB_OK | MB_ICONSTOP );
//    return;
//}

// パルス出力モード設定
// 使用しているドライバに合致したパルス出力モードを選択してください
nResult = PmcmSetPulseConfig( m_wID, wAxis, PMCM_PULSE_OUT, 7 );
if( nResult != PMCM_RESULT_SUCCESS ) {
    wsprintf( szResult, "PmcmSetPulseConfig ERROR : 0x%X", nResult );
    AfxMessageBox( szResult, MB_OK | MB_ICONSTOP );
    return;
}

動作パラメータ設定

int nResult;
WORD wAxis;
MOTIONPMCM Motion[3];
WORD wEmpty[2];
WORD wCount;
char szResult[64];

wAxis = PMCM_AXIS_X;

// CP動作パラメータ数
wCount = 3;

// 1回目
Motion[0].wMoveMode = PMCM_PTP; // 動作モード
Motion[0].wStartMode = PMCM_ACC_DEC; // 起動モード
Motion[0].fSpeedRate = 1; // 速度倍率
Motion[0].wAccDecMode = PMCM_ACC_LINEAR; // 加減速モード
Motion[0].fLowSpeed = 100; // 起動時速度
Motion[0].fSpeed = 500; // 移動速度
Motion[0].wAccTime = 500; // 加速時間
Motion[0].wDecTime = 500; // 減速時間
Motion[0].fSAccSpeed = 0; // 加速S字区間
Motion[0].fSDecSpeed = 0; // 減速S字区間
Motion[0].lSlowdown = 0; // スローダウンポイント
Motion[0].lStep = 1000; // 移動パルス数,移動方向
Motion[0].bAbsolutePtp = 0; // 絶対座標指定
// 2回目
Motion[1].wMoveMode = PMCM_PTP; // 動作モード
Motion[1].wStartMode = PMCM_ACC_DEC; // 起動モード
Motion[1].fSpeedRate = 1; // 速度倍率
Motion[1].wAccDecMode = PMCM_ACC_LINEAR; // 加減速モード
Motion[1].fLowSpeed = 500; // 起動時速度
Motion[1].fSpeed = 1000; // 移動速度
Motion[1].wAccTime = 500; // 加速時間
Motion[1].wDecTime = 500; // 減速時間
Motion[1].fSAccSpeed = 0; // 加速S字区間
Motion[1].fSDecSpeed = 0; // 減速S字区間
Motion[1].lSlowdown = -1; // スローダウンポイント
Motion[1].lStep = 2000; // 移動パルス数,移動方向
Motion[1].bAbsolutePtp = 0; // 絶対座標指定
// 3回目
Motion[2].wMoveMode = PMCM_PTP; // 動作モード
Motion[2].wStartMode = PMCM_CONST_DEC; // 起動モード
Motion[2].fSpeedRate = 1; // 速度倍率
Motion[2].wAccDecMode = PMCM_ACC_LINEAR; // 加減速モード
Motion[2].fLowSpeed = 100; // 起動時速度
Motion[2].fSpeed = 500; // 移動速度
Motion[2].wAccTime = 0; // 加速時間
Motion[2].wDecTime = 500; // 減速時間
Motion[2].fSAccSpeed = 0; // 加速S字区間
Motion[2].fSDecSpeed = 0; // 減速S字区間
Motion[2].lSlowdown = -1; // スローダウンポイント
Motion[2].lStep = 1500; // 移動パルス数,移動方向
Motion[2].bAbsolutePtp = 0; // 絶対座標指定

// CPの空き取得
nResult = PmcmGetEmptyCp( m_wID, wAxis, wEmpty );
if( nResult != PMCM_RESULT_SUCCESS ) {
    wsprintf( szResult, "PmcmGetEmptyCp ERROR : 0x%X", nResult );
    AfxMessageBox( szResult, MB_OK | MB_ICONSTOP );
    return;
}
// CPの空き確認
if( wEmpty[0] < wCount ) {
    AfxMessageBox( "CP空きなし", MB_OK | MB_ICONSTOP );
    return;
}

// 動作パラメータ設定
nResult = PmcmSetMotionCp( m_wID, wAxis, Motion, wCount );
if( nResult != PMCM_RESULT_SUCCESS ) {
    wsprintf( szResult, "PmcmSetMotionCp ERROR : 0x%X", nResult );
    AfxMessageBox( szResult, MB_OK | MB_ICONSTOP );
    return;
}

動作開始

int nResult;
WORD wAxis;
char szResult[64];

// 動作させる軸
wAxis = PMCM_AXIS_X;

// 動作開始
nResult = PmcmStartMotionCp( m_wID, wAxis );
if( nResult != PMCM_RESULT_SUCCESS ) {
    wsprintf( szResult, "PmcmStartMotionCp ERROR : 0x%X", nResult );
    AfxMessageBox( szResult, MB_OK | MB_ICONSTOP );
    return;
}

動作追加

// CP動作は96動作までしか設定できません
// それ以上の動作を設定したい場合は、動作中にCPの空きを確認し、空き数分の動作を開始します
int nResult;
WORD wAxis;
MOTIONPMCM Motion[100];
WORD wEmpty[2];
WORD wCount;
WORD wRemainCount;
WORD wSetCount;
int i;
char szResult[64];

wAxis = PMCM_AXIS_X;

// CP動作パラメータ数
wCount = 100;

for( i = 0; i < wCount; i++ ) {
    Motion[i].wMoveMode = PMCM_PTP; // 動作モード
    Motion[i].wStartMode = PMCM_CONST; // 起動モード
    Motion[i].fSpeedRate = 1; // 速度倍率
    Motion[i].wAccDecMode = PMCM_ACC_LINEAR; // 加減速モード
    Motion[i].fLowSpeed = 1000; // 起動時速度
    Motion[i].fSpeed = 1000; // 移動速度
    Motion[i].wAccTime = 0; // 加速時間
    Motion[i].wDecTime = 0; // 減速時間
    Motion[i].fSAccSpeed = 0; // 加速S字区間
    Motion[i].fSDecSpeed = 0; // 減速S字区間
    Motion[i].lSlowdown = -1; // スローダウンポイント
    Motion[i].lStep = 1000; // 移動パルス数,移動方向
    Motion[i].bAbsolutePtp = 0; // 絶対座標指定
}

// 残り動作数
wRemainCount= wCount;

while( wRemainCount > 0 ) {
    // CPの空き取得
    nResult = PmcmGetEmptyCp( m_wID, wAxis, wEmpty );
    if( nResult != PMCM_RESULT_SUCCESS ) {
        wsprintf( szResult, "PmcmGetEmptyCp ERROR : 0x%X", nResult );
        AfxMessageBox( szResult, MB_OK | MB_ICONSTOP );
        return;
    }
    // CPの空きを確認し、設定動作数を決定する
    if( wEmpty[0] == 0 ) { // CP空きなし
        wSetCount = 0;
    } else if( wEmpty[0] < wRemainCount ) { // CP空き < 残り動作数
        wSetCount = wEmpty[0]; // CP空き分だけ設定する
    } else if( wEmpty[0] >= wRemainCount ) { // CP空き >= 残り動作数
        wSetCount = wRemainCount; // 残り動作数を設定する
    }

    if( wSetCount > 0 ) {
        // 動作パラメータ設定
        nResult = PmcmSetMotionCp( m_wID, wAxis, &Motion[wCount - wRemainCount], wSetCount );
        if( nResult != PMCM_RESULT_SUCCESS ) {
            wsprintf( szResult, "PmcmSetMotionCp ERROR : 0x%X", nResult );
            AfxMessageBox( szResult, MB_OK | MB_ICONSTOP );
            return;
        }
        // 動作開始
        nResult = PmcmStartMotionCp( m_wID, wAxis );
        if( nResult != PMCM_RESULT_SUCCESS ) {
            wsprintf( szResult, "PmcmStartMotionCp ERROR : 0x%X", nResult );
            AfxMessageBox( szResult, MB_OK | MB_ICONSTOP );
            return;
        }
    }
    // 残り動作数更新
    wRemainCount -= wSetCount;
}

動作停止

int nResult;
WORD wAxis;
WORD wStopMode;
char szResult[64];

// 停止させる軸
wAxis = PMCM_AXIS_X;

// 停止モード
wStopMode = PMCM_IMMEDIATE_STOP;

// 動作停止
nResult = PmcmStopMotion( m_wID, wAxis, wStopMode );
if( nResult != PMCM_RESULT_SUCCESS ) {
    wsprintf( szResult, "PmcmStopMotion ERROR : 0x%X", nResult );
    AfxMessageBox( szResult, MB_OK | MB_ICONSTOP );
    return;
}

クローズ

BOOL bResult;

bResult = PmcmClose( m_wID );