サンプルプログラム > Event > Visual C++/CLI
オブジェクト
テキストボックス | Name |
ID番号 | idTextBox |
変数
unsigned short id;
ManualResetEvent^ eventHandle;
オープン
int result;
id = Convert::ToUInt16(idTextBox->Text);
result = PmcmOpen(id, "PMC-M2C-U");
if (result == PMCM_RESULT_SUCCESS) {
MessageBox::Show("オープン成功", "", MessageBoxButtons::OK, MessageBoxIcon::Information);
} else {
MessageBox::Show("オープン失敗", "", MessageBoxButtons::OK, MessageBoxIcon::Error);
}
各種設定
int result;
unsigned short axis;
String^ messageText;
axis = PMCM_AXIS_X + PMCM_AXIS_Y;
// センサ設定
// オンで検知するセンサを接続している場合や、リミットスイッチを接続していない場合はモーターが動作しません
// その場合は以下の関数を実行してセンサ設定を"オンで検知"に変更してください
//result = PmcmSetSensorConfig(id, axis, PMCM_LOGIC, 0x3F);
//if (result != PMCM_RESULT_SUCCESS) {
// messageText = String::Format("PmcmSetSensorConfig ERROR : 0x{0:X}", result);
// MessageBox::Show(messageText, "", MessageBoxButtons::OK, MessageBoxIcon::Error);
// return;
//}
// パルス出力モード設定
// 使用しているドライバに合致したパルス出力モードを選択してください
result = PmcmSetPulseConfig(id, axis, PMCM_PULSE_OUT, 7);
if (result != PMCM_RESULT_SUCCESS) {
messageText = String::Format("PmcmSetPulseConfig ERROR : 0x{0:X}", result);
MessageBox::Show(messageText, "", MessageBoxButtons::OK, MessageBoxIcon::Error);
return;
}
// イベントマスク設定
// 自動停止時のイベント発生を許可に設定します
result = PmcmSetEventMask(id, axis, PMCM_EVENT_STOP, 0x01);
if (result != PMCM_RESULT_SUCCESS) {
messageText = String::Format("PmcmSetEventMask ERROR : 0x{0:X}", result);
MessageBox::Show(messageText, "", MessageBoxButtons::OK, MessageBoxIcon::Error);
return;
}
// イベントオブジェクト作成
eventHandle = gcnew ManualResetEvent(false);
// イベント設定
result = PmcmSetEvent(id, eventHandle->Handle);
if (result != PMCM_RESULT_SUCCESS) {
messageText = String::Format("PmcmSetEvent ERROR : 0x{0:X}", result);
MessageBox::Show(messageText, "", MessageBoxButtons::OK, MessageBoxIcon::Error);
return;
}
動作パラメータ設定
int result;
unsigned short axis;
MOTIONPMCM motion[2];
String^ messageText;
axis = 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; // 絶対座標指定
// 動作パラメータ設定
result = PmcmSetMotion(id, axis, motion);
if (result != PMCM_RESULT_SUCCESS) {
messageText = String::Format("PmcmSetMotion ERROR : 0x{0:X}", result);
MessageBox::Show(messageText, "", MessageBoxButtons::OK, MessageBoxIcon::Error);
return;
}
動作開始
int result;
unsigned short axis;
String^ messageText;
// 動作させる軸
axis = PMCM_AXIS_X;
// 動作開始
result = PmcmStartMotion(id, axis);
if (result != PMCM_RESULT_SUCCESS) {
messageText = String::Format("PmcmStartMotion ERROR : 0x{0:X}", result);
MessageBox::Show(messageText, "", MessageBoxButtons::OK, MessageBoxIcon::Error);
return;
}
イベント待ち
int result;
EVENTFACTORPMCM eventFactor;
String^ messageText;
// イベント発生待ち
eventHandle->WaitOne();
// イベントクリア
eventHandle->Reset();
// イベント要因取得
result = PmcmGetEventFactor(id, &eventFactor);
if (result != PMCM_RESULT_SUCCESS) {
messageText = String::Format("PmcmGetEventFactor ERROR : 0x{0:X}", result);
MessageBox::Show(messageText, "", MessageBoxButtons::OK, MessageBoxIcon::Error);
return;
}
if (eventFactor.nResult != 0) {
MessageBox::Show("イベント失敗", "", MessageBoxButtons::OK, MessageBoxIcon::Error);
return;
}
messageText = String::Format("停止イベント要因 : H'{0:X}\n状態イベント要因 : H'{1:X}", eventFactor.wStop[0], eventFactor.wState[0]);
MessageBox::Show(messageText, "", MessageBoxButtons::OK, MessageBoxIcon::Information);
クローズ
bool result;
eventHandle->Close();
result = PmcmClose(id);