Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }