private bool IsDisabled(MMCSingleAxis singleAxis) { MC_STATE_SINGLE status = (MC_STATE_SINGLE)(singleAxis.ReadStatus() & plcStateMask); if ((status & MC_STATE_SINGLE.DISABLED) == MC_STATE_SINGLE.DISABLED) { return(true); } return((status & MC_STATE_SINGLE.ERROR_STOP) == MC_STATE_SINGLE.ERROR_STOP); }
private bool IsMotionDone(MMCSingleAxis singleAxis) { MC_STATE_SINGLE status = (MC_STATE_SINGLE)(singleAxis.ReadStatus() & plcStateMask); if ((status & MC_STATE_SINGLE.STAND_STILL) == MC_STATE_SINGLE.STAND_STILL) { return(true); } if ((status & MC_STATE_SINGLE.ERROR_STOP) == MC_STATE_SINGLE.ERROR_STOP) { return(true); } if ((status & MC_STATE_SINGLE.DISABLED) == MC_STATE_SINGLE.DISABLED) { return(true); } return(false); }
private bool OKtoCmdMove(MMCSingleAxis singleAxis) { MC_STATE_SINGLE status = (MC_STATE_SINGLE)(singleAxis.ReadStatus() & plcStateMask); if ((status & MC_STATE_SINGLE.DISCRETE_MOTION) == MC_STATE_SINGLE.DISCRETE_MOTION) { return(false); } if ((status & MC_STATE_SINGLE.HOMING) == MC_STATE_SINGLE.HOMING) { return(false); } if ((status & MC_STATE_SINGLE.ERROR_STOP) == MC_STATE_SINGLE.ERROR_STOP) { return(false); } return(true); }
/// <summary> /// Internal Update Loop /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void UpdateLoop(object sender, DoWorkEventArgs e) { PIVarDirection dir = PIVarDirection.ePI_INPUT; VAR_TYPE varT = VAR_TYPE.S_BYTE; PI_VAR_UNION varUnion = new PI_VAR_UNION(); do { try { Thread.Sleep(LoopInterval); KeyValuePair <CompBase, MMCSingleAxis>[] pairs = listAxis.ToArray(); foreach (KeyValuePair <CompBase, MMCSingleAxis> pair in pairs) { try { if (pair.Key is IOBoolChannel) { BoolInput[] inputs = pair.Key.RecursiveFilterByType <BoolInput>(); foreach (BoolInput input in inputs) { pair.Value.ReadPIVar((UInt16)(input.Channel), dir, varT, ref varUnion); if (varUnion.s_byte == 1) { input.Value = true; } else { input.Value = false; } } } else { double dVal = pair.Value.GetActualPosition(); if (pair.Key is RealAxis) { (pair.Key as RealAxis).SetCurrentPosition(dVal); (pair.Key as RealAxis).MoveDone = IsMotionDone(pair.Value); } else if (pair.Key is RealRotary) { (pair.Key as RealRotary).SetCurrentPosition(dVal); (pair.Key as RealRotary).MoveDone = IsMotionDone(pair.Value); } BoolInput[] inputs = pair.Key.RecursiveFilterByType <BoolInput>(); foreach (BoolInput input in inputs) { input.Value = pair.Value.GetDigInput(input.Channel + 16) != 0; } } MC_STATE_SINGLE status = (MC_STATE_SINGLE)(pair.Value.ReadStatus() & plcStateMask); if ((status & MC_STATE_SINGLE.ERROR_STOP) == MC_STATE_SINGLE.ERROR_STOP) { pair.Key.MachineStatus(string.Format("{0} ErrorStop", pair.Value.AxisName)); } } catch (MMCException ex) { U.LogPopup(ex, "MMC Update Error Axis {0}", pair.Key.Name); } } } catch (Exception ex) { U.LogError(ex, "Error UpdateLoop: "); } } while (!_destroy); }
private bool IsHoming(MMCSingleAxis singleAxis) { MC_STATE_SINGLE status = (MC_STATE_SINGLE)(singleAxis.ReadStatus() & plcStateMask); return((status & MC_STATE_SINGLE.HOMING) == MC_STATE_SINGLE.HOMING); }
private bool IsMotorError(MMCSingleAxis singleAxis) { MC_STATE_SINGLE status = (MC_STATE_SINGLE)(singleAxis.ReadStatus() & plcStateMask); return((status & MC_STATE_SINGLE.ERROR_STOP) == MC_STATE_SINGLE.ERROR_STOP); }