/// <summary> /// 軸移動指令の中止 /// </summary> /// <returns></returns> public int StopMove(int id) { Trace.TraceFormat("Entry:id={0}", id); if (SvControl != null) { try { PEventManager.PEvent evObj = _eventCtrl.GetEvent(id); if (evObj.GetRscType() == 0) { //イベントが使用中である場合のみ uint st = SvControl.GetMcStatus(); //プログラムは停止させる(動作中かどうかは確認しない) SvControl.StopCommand(); SvControl.Reset(); //スレッドをAbort()させると"ブロック停止"なので //プログラムの停止を待つ // ※プログラムを停止させることによって、動作完了扱いとなるため // 停止コマンドを出した直後にイベントのステータスを変更しても // 動作コマンドの完了の方が遅くなるので、結果的にイベントは // キャンセルから成功になってしまう。 // このため、プログラムの完了を待ってから、改めてイベントをキャンセル設定する Trace.TraceFormat("Wait:program stop"); uint nn; do { Thread.Sleep(100); nn = SvControl.GetMcStatus(); Trace.TraceFormat("programStatus:{0:X}", nn); } while((nn & (0x10 << 16)) != 0); if ((st & (0x10 << 16)) != 0) { //プログラム実行中であった場合はイベントをキャンセル扱いとする evObj.Cancel(0); Trace.TraceFormat("programEvent Canceled"); } } else { Trace.TraceFormat("Event Not Used"); } Trace.TraceFormat("Leave"); return((int)ErrCode.RET_OK); } catch (Exception) { Trace.TraceFormat("[ERR]Exception Parameter"); return((int)ErrCode.ERR_PARAM); } } else { return((int)ErrCode.ERR_EXEC); } }
/// <summary> /// 実装ユニットのエラークリア /// </summary> /// <returns></returns> public int ClearError() { int st; Trace.TraceFormat("Entry"); //サーボシステムのエラークリア if ((st = SvControl.Reset()) < 0) { Trace.TraceFormat("[ERR]ServoReset:{0}", st); return(st); } if ((st = SvControl.ClrError()) < 0) { Trace.TraceFormat("[ERR]ServoErrorClear:{0}", st); return(st); } //I/Oシステムのエラークリア //画像システムのエラークリア Trace.TraceFormat("Leave:OK"); return((int)ErrCode.RET_OK); }
/// <summary> /// サーボ・リセットコマンド /// </summary> /// <param name="obj"></param> public void SvReset(object obj) { SvControl.Reset(); }