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

Visual C++

オブジェクト

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

変数

HANDLE m_hEvent;

オープン

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;
}

// イベントマスク設定
// 自動停止時のイベント発生を許可に設定します
nResult = PmcmSetEventMask( m_wID, wAxis, PMCM_EVENT_STOP, 0x01 );
if( nResult != PMCM_RESULT_SUCCESS ) {
    wsprintf( szResult, "PmcmSetEventMask ERROR : 0x%X", nResult );
    AfxMessageBox( szResult, MB_OK | MB_ICONSTOP );
    return;
}

// イベントオブジェクト作成
m_hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
if( m_hEvent == NULL ) {
    AfxMessageBox( "イベントオブジェクト作成失敗", MB_OK | MB_ICONSTOP );
    return;
}

// イベント設定
nResult = PmcmSetEvent( m_wID, m_hEvent );
if( nResult != PMCM_RESULT_SUCCESS ) {
    wsprintf( szResult, "PmcmSetEvent ERROR : 0x%X", nResult );
    AfxMessageBox( szResult, MB_OK | MB_ICONSTOP );
    return;
}

動作パラメータ設定

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

wAxis = PMCM_AXIS_X;

// X軸
Motion[0].wMoveMode = PMCM_PTP; // 動作モード
Motion[0].wStartMode = PMCM_CONST; // 起動モード
Motion[0].fSpeedRate = 1; // 速度倍率
Motion[0].wAccDecMode = PMCM_ACC_LINEAR; // 加減速モード
Motion[0].fLowSpeed = 1000; // 起動時速度
Motion[0].fSpeed = 1000; // 移動速度
Motion[0].wAccTime = 0; // 加速時間
Motion[0].wDecTime = 0; // 減速時間
Motion[0].fSAccSpeed = 0; // 加速S字区間
Motion[0].fSDecSpeed = 0; // 減速S字区間
Motion[0].lSlowdown = -1; // スローダウンポイント
Motion[0].lStep = 10000; // 移動パルス数,移動方向
Motion[0].bAbsolutePtp = 0; // 絶対座標指定
// 動作パラメータ設定
nResult = PmcmSetMotion( m_wID, wAxis, Motion );
if( nResult != PMCM_RESULT_SUCCESS ) {
    wsprintf( szResult, "PmcmSetMotion ERROR : 0x%X", nResult );
    AfxMessageBox( szResult, MB_OK | MB_ICONSTOP );
    return;
}

動作開始

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

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

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

イベント待ち

int nResult;
EVENTFACTORPMCM EventFactor;
char szResult[64];

// イベント発生待ち
WaitForSingleObject( m_hEvent, INFINITE );

// イベントクリア
ResetEvent( m_hEvent );

// イベント要因取得
nResult = PmcmGetEventFactor( m_wID, &EventFactor );
if( nResult != PMCM_RESULT_SUCCESS ) {
    wsprintf( szResult, "PmcmGetEventFactor ERROR : 0x%X", nResult );
    AfxMessageBox( szResult, MB_OK | MB_ICONSTOP );
    return;
}
if( EventFactor.nResult != 0 ) {
    AfxMessageBox( "イベント失敗", MB_OK | MB_ICONSTOP );
    return;
}
wsprintf( szResult, "停止イベント要因 : H'%X\n状態イベント要因 : H'%X", EventFactor.wStop[0], EventFactor.wState[0] );
AfxMessageBox( szResult, MB_OK | MB_ICONINFORMATION );

クローズ

BOOL bResult;

CloseHandle( m_hEvent );
m_hEvent = NULL;

bResult = PmcmClose( m_wID );