Exemple #1
0
        public void NcFile_multiLine_countOK()
        {
            var ncfile = new NcFile();
            var mp1    = new MachinePosition()
            {
                X = 1, Adeg = 0
            };
            var mp2 = new MachinePosition()
            {
                X = 1, Adeg = 360
            };
            var f1 = new Feedrate(FeedrateUnits.InPerMin)
            {
                Value = 20
            };
            var f2 = new Feedrate(FeedrateUnits.InverseMins)
            {
                Value = 2
            };
            var ncp1      = new NcPositionCommand(10, mp1, f1, BlockType.LINEAR);
            var ncp2      = new NcPositionCommand(20, mp2, f2, BlockType.LINEAR);
            var ncMachine = new NcMachine(ControllerType.FAGOR8055, MachineGeometry.XA);

            ncfile.Add(ncp1);
            ncfile.Add(ncp2);
            var file = ncfile.AsNcTextFile(ncMachine);

            Assert.AreEqual(2, ncfile.Count);
            Assert.AreEqual(5, file.Count);
        }
Exemple #2
0
        public void Clear()
        {
            _fileName       = _mdiCommand = string.Empty;
            _streamingState = StreamingState.NoFile;
            _isMPos         = _reset = _isJobRunning = false;
            _mpg            = "";

            _grblState.Error    = 0;
            _grblState.State    = GrblStates.Unknown;
            _grblState.Substate = 0;
            _grblState.MPG      = false;
            GrblState           = _grblState;
            IsMPGActive         = null; //??

            _MPos = _WPos = _wco = string.Empty;
            Position.Clear();
            MachinePosition.Clear();
            WorkPosition.Clear();
            WorkPositionOffset.Clear();
            ProgramLimits.Clear();

            Set("Pn", string.Empty);
            Set("A", string.Empty);
            Set("FS", string.Empty);
            Set("Sc", string.Empty);
            Set("T", "0");
            Set("Ov", string.Empty);
            Set("Ex", string.Empty);
            SDCardStatus = string.Empty;
            HomedState   = HomedState.Unknown;
            if (_latheMode != LatheMode.Disabled)
            {
                LatheMode = LatheMode.Radius;
            }
        }
        public void MachinePosition_disttoSelf_distisZero()
        {
            MachinePosition mp1 = new MachinePosition();

            double dist = mp1.DistanceTo(mp1);

            Assert.AreEqual(0, dist);
        }
        public void MachPos_BuildfromStr()
        {
            var mp = new MachinePosition();

            mp.BuildFromString("X=4,Y=0,Z=0,A=21600,B=0,C=0");
            Assert.AreEqual(4.0, mp.X, .001);
            Assert.AreEqual(21600.0, mp.Adeg, .001);
        }
        public void MachinePosition_distToPt_distisOK()
        {
            MachinePosition mp1 = new MachinePosition(0, 0, 0);
            MachinePosition mp2 = new MachinePosition(1, 1, 1);

            double dist = mp1.DistanceTo(mp2);

            Assert.AreEqual(Math.Sqrt(3), dist);
        }
        public void MachinePosition_distTo5axisOnlyPt_distisOK()
        {
            MachinePosition mp1 = new MachinePosition(0, 0, 0, 45, 45);
            MachinePosition mp2 = new MachinePosition(0, 0, 0, 0, 0);

            double dist = mp1.DistanceTo(mp2);

            Assert.AreEqual(0, dist);
        }
        public void MachPosition_distance()
        {
            var mp1 = new MachinePosition();
            var mp2 = new MachinePosition()
            {
                X = 3, Y = 4
            };
            var d = mp1.DistanceTo(mp2);

            Assert.AreEqual(5, d);
        }
        public void MP_ctorSet_valuesok()
        {
            var mp = new MachinePosition(1, 2, 3, 4, 5);

            Assert.AreEqual(1.0, mp.X);
            Assert.AreEqual(2.0, mp.Y);
            Assert.AreEqual(3.0, mp.Z);
            Assert.AreEqual(4.0, mp.Bdeg);
            Assert.AreEqual(5.0, mp.Cdeg);
            Assert.AreEqual(0, mp.Adeg);
        }
Exemple #9
0
        public void ParseStatus(string data)
        {
            bool pos_changed = false;

            string[] elements = data.TrimEnd('>').Split('|');

            if (elements.Length > 1)
            {
                string[] pair = elements[0].Split(':');
                SetGRBLState(pair[0].Substring(1), pair.Count() == 1 ? -1 : int.Parse(pair[1]), false);

                for (int i = elements.Length - 1; i > 0; i--)
                {
                    pair = elements[i].Split(':');

                    if (pair.Length == 2)
                    {
                        if (Set(pair[0], pair[1]))
                        {
                            pos_changed = true;
                        }
                    }
                }

                if (!data.Contains("|Pn:"))
                {
                    Set("Pn", "");
                }

                if (pos_changed)
                {
                    if (_isMPos)
                    {
                        if (has_wco)
                        {
                            Position.Set(MachinePosition - WorkPositionOffset);
                        }
                        else
                        {
                            Position.Set(MachinePosition);
                        }
                    }
                    else
                    {
                        if (has_wco)
                        {
                            MachinePosition.Set(WorkPosition + WorkPositionOffset);
                        }
                        Position.Set(WorkPosition);
                    }
                }
            }
        }
        public void MachinePosition_defConst_builtOK()
        {
            MachinePosition mp = new MachinePosition();

            Assert.IsNotNull(mp);
            Assert.AreEqual(0, mp.X);
            Assert.AreEqual(0, mp.Y);
            Assert.AreEqual(0, mp.Z);
            Assert.AreEqual(0, mp.Adeg);
            Assert.AreEqual(0, mp.Bdeg);
            Assert.AreEqual(0, mp.Cdeg);
        }
        public void MP_ctorCopy_valuesok()
        {
            var mp1 = new MachinePosition(1, 2, 3, 4, 5);
            var mp  = new MachinePosition(mp1);

            Assert.AreEqual(1.0, mp.X);
            Assert.AreEqual(2.0, mp.Y);
            Assert.AreEqual(3.0, mp.Z);
            Assert.AreEqual(4.0, mp.Bdeg);
            Assert.AreEqual(5.0, mp.Cdeg);
            Assert.AreEqual(0, mp.Adeg);
            Assert.AreNotSame(mp, mp1);
        }
        public void MachinePosition_setPosition_PosIsOK()
        {
            MachinePosition mp1 = new MachinePosition();


            mp1.Bdeg = 45;
            double btest = mp1.Bdeg;

            Assert.AreEqual(45, btest);
            mp1.Cdeg = 45;
            double ctest = mp1.Cdeg;

            Assert.AreEqual(45, ctest);
        }
Exemple #13
0
        public void NCp_1ptctor_Valueok()
        {
            var mp1 = new MachinePosition();

            var f = new Feedrate(FeedrateUnits.InPerMin);


            int line = 1;
            var ncp  = new NcPositionCommand(line, mp1, f, BlockType.LINEAR);

            Assert.IsNotNull(ncp);
            Assert.IsNotNull(ncp.Feedrate);
            Assert.IsNotNull(ncp.MachinePosition);
            Assert.AreEqual(1, ncp.LineNumber);
        }
Exemple #14
0
        public void NCp_2ptCtor_ValueOK()
        {
            var mp1 = new MachinePosition(1, 1, 1, 1, 1);
            var mp2 = new MachinePosition(5, 6, 7, 8, 9);
            var f   = new Feedrate(FeedrateUnits.InPerMin);

            f.Value = 10;

            var ncp = new NcPositionCommand(1, mp1, f, BlockType.LINEAR);

            var ncMachine = new NcMachine(ControllerType.FAGOR8055, MachineGeometry.XYZBC);

            string ncStr = ncp.AsNcString(ncMachine);

            Assert.IsNotNull(ncp);
            Assert.IsNotNull(ncp.Feedrate);
            Assert.IsNotNull(ncp.MachinePosition);
            Assert.AreEqual(1, ncp.LineNumber);
            StringAssert.Contains("N1 G90 G01 X1.0000 Y1.0000 Z1.0000 B1.000 C1.000 F10.00", ncStr);
        }
Exemple #15
0
        public void Clear()
        {
            _fileName       = _mdiCommand = string.Empty;
            _streamingState = StreamingState.NoFile;
            _isMPos         = _reset = _isJobRunning = _isProbeSuccess = _pgmEnd = _isTloRefSet = false;
            _canReset       = true;
            _pb_avail       = _rxb_avail = string.Empty;
            _mpg            = null;
            _line           = _pwm = _scrollpos = 0;

            _grblState.Error    = 0;
            _grblState.State    = GrblStates.Unknown;
            _grblState.Substate = 0;
            _grblState.MPG      = false;
            GrblState           = _grblState;
            IsMPGActive         = null; //??

            has_wco = false;
            _MPos   = _WPos = _wco = _h = string.Empty;
            Position.Clear();
            MachinePosition.Clear();
            WorkPosition.Clear();
            WorkPositionOffset.Clear();
            ProgramLimits.Clear();

            Set("Pn", string.Empty);
            Set("A", string.Empty);
            Set("FS", string.Empty);
            Set("Sc", string.Empty);
            Set("T", "0");
            Set("Ov", string.Empty);
            Set("Ex", string.Empty);
            SDCardStatus = string.Empty;
            HomedState   = HomedState.Unknown;
            if (_latheMode != LatheMode.Disabled)
            {
                LatheMode = LatheMode.Radius;
            }

            _thcv = _thcs = string.Empty;
        }
Exemple #16
0
        public void NCp_1ptctorXaMachine_Valueok()
        {
            var f = new Feedrate(FeedrateUnits.InPerMin);

            f.Value = 10;

            var mp1 = new MachinePosition();

            mp1.X    = -4;
            mp1.Adeg = 20;
            int line = 1;
            var ncp  = new NcPositionCommand(line, mp1, f, BlockType.LINEAR);

            Assert.IsNotNull(ncp);
            Assert.IsNotNull(ncp.Feedrate);
            Assert.IsNotNull(ncp.MachinePosition);
            Assert.AreEqual(1, ncp.LineNumber);
            var    ncMachine = new NcMachine(ControllerType.FAGOR8055, MachineGeometry.XA);
            string ncStr     = ncp.AsNcString(ncMachine);

            StringAssert.Contains("N1 G90 G01 X-4.0000 A20.000 F10.00", ncStr);
        }
Exemple #17
0
        public void NcFile_multiLine_valuesOK()
        {
            var ncfile = new NcFile();
            var mp1    = new MachinePosition()
            {
                X = 1, Adeg = 0
            };
            var mp2 = new MachinePosition()
            {
                X = 1, Adeg = 360
            };
            var f1 = new Feedrate(FeedrateUnits.InPerMin)
            {
                Value = 20
            };
            var f2 = new Feedrate(FeedrateUnits.InverseMins)
            {
                Value = 2
            };
            var ncp1      = new NcPositionCommand(10, mp1, f1, BlockType.LINEAR);
            var ncp2      = new NcPositionCommand(20, mp2, f2, BlockType.LINEAR);
            var ncMachine = new NcMachine(ControllerType.FAGOR8055, MachineGeometry.XA);

            ncfile.Add(ncp1);
            ncfile.Add(ncp2);
            var ncText      = ncfile.AsNcTextFile(ncMachine);
            var ncfileLine0 = ncText[0];
            var ncfileLine1 = ncText[1];
            var ncfileLine2 = ncText[2];
            var line0       = ";Title";
            var line1       = "N10 G90 G01 X1.0000 A0.000 F20.00";
            var line2       = "N20 G32 G90 G01 X1.0000 A360.000 F2.00";

            StringAssert.Contains(ncfileLine0, line0);
            StringAssert.Contains(ncfileLine1, line1);
            StringAssert.Contains(ncfileLine2, line2);
        }
Exemple #18
0
        private bool Set(string parameter, string value)
        {
            bool pos_changed = false;

            switch (parameter)
            {
            case "MPos":
                if ((pos_changed = _MPos != value))
                {
                    if (!_isMPos)
                    {
                        IsMachinePosition = true;
                    }
                    _MPos = value;
                    MachinePosition.Parse(_MPos);
                }
                break;

            case "WPos":
                if ((pos_changed = _WPos != value))
                {
                    if (_isMPos)
                    {
                        IsMachinePosition = false;
                    }
                    _WPos = value;
                    WorkPosition.Parse(_WPos);
                }
                break;

            case "WCO":
                if ((pos_changed = _wco != value))
                {
                    _wco    = value;
                    has_wco = true;
                    WorkPositionOffset.Parse(value);
                }
                break;

            case "A":
                if (_a != value)
                {
                    _a = value;

                    if (_a == "")
                    {
                        Mist = Flood = IsToolChanging = false;
                        SpindleState.Value = GCode.SpindleState.Off;
                    }
                    else
                    {
                        Mist               = value.Contains("M");
                        Flood              = value.Contains("F");
                        IsToolChanging     = value.Contains("T");
                        SpindleState.Value = value.Contains("S") ? GCode.SpindleState.CW : (value.Contains("C") ? GCode.SpindleState.CCW : GCode.SpindleState.Off);
                    }
                }
                break;

            case "WCS":
                if (_wcs != value)
                {
                    WorkCoordinateSystem = GrblParserState.WorkOffset = value;
                }
                break;

            case "Bf":
                string[] buffers = value.Split(',');
                if (buffers[0] != _pb_avail)
                {
                    _pb_avail = buffers[0];
                    OnPropertyChanged(nameof(PlanBufferAvailable));
                }
                if (buffers[1] != _rxb_avail)
                {
                    _rxb_avail = buffers[1];
                    OnPropertyChanged(nameof(RxBufferAvailable));
                }
                break;

            case "Ln":
                LineNumber = int.Parse(value);
                break;

            case "FS":
                if (_fs != value)
                {
                    _fs = value;
                    if (_fs == "")
                    {
                        FeedRate = ProgrammedRPM = 0d;
                        if (!double.IsNaN(ActualRPM))
                        {
                            ActualRPM = 0d;
                        }
                    }
                    else
                    {
                        double[] values = dbl.ParseList(_fs);
                        if (_feedrate != values[0])
                        {
                            FeedRate = values[0];
                        }
                        if (_rpm != values[1])
                        {
                            ProgrammedRPM = values[1];
                        }
                        if (values.Length > 2 && _rpmActual != values[2])
                        {
                            ActualRPM = values[2];
                        }
                    }
                }
                break;

            case "F":
                if (_fs != value)
                {
                    _fs = value;
                    if (_fs == "")
                    {
                        FeedRate = ProgrammedRPM = 0d;
                        if (!double.IsNaN(ActualRPM))
                        {
                            ActualRPM = 0d;
                        }
                    }
                    else
                    {
                        FeedRate = dbl.Parse(_fs);
                    }
                }
                break;

            case "PWM":
                PWM = int.Parse(value);
                break;

            case "Pn":
                if (_pn != value)
                {
                    _pn = value;

                    int s = 0;
                    foreach (char c in _pn)
                    {
                        int i = GrblConstants.SIGNALS.IndexOf(c);
                        if (i >= 0)
                        {
                            s |= (1 << i);
                        }
                    }
                    Signals.Value = (Signals)s;
                }
                break;

            case "Ov":
                if (_ov != value)
                {
                    _ov = value;
                    if (_ov == string.Empty)
                    {
                        FeedOverride = RapidsOverride = RPMOverride = 100d;
                    }
                    else
                    {
                        double[] values = dbl.ParseList(_ov);
                        if (_feedOverride != values[0])
                        {
                            FeedOverride = values[0];
                        }
                        if (_rapidsOverride != values[1])
                        {
                            RapidsOverride = values[1];
                        }
                        if (_rpmOverride != values[2])
                        {
                            RPMOverride = values[2];
                        }
                    }
                }
                break;

            case "Sc":
                if (_sc != value)
                {
                    int s = 0;
                    foreach (char c in value)
                    {
                        int i = GrblInfo.AxisLetterToIndex(c);
                        if (i >= 0)
                        {
                            s |= (1 << i);
                        }
                    }
                    AxisScaled.Value = (AxisFlags)s;
                    Scaling          = value;
                }
                break;

            case "Ex":
                if (_ex != value)
                {
                    TubeCoolant = value == "C";
                }
                break;

            case "SD":
                value = string.Format("SD Card streaming {0}% complete", value.Split(',')[0]);
                if (SDCardStatus != value)
                {
                    Message = SDCardStatus = value;
                }
                break;

            case "T":
                if (_tool != value)
                {
                    Tool = value == "0" ? GrblConstants.NO_TOOL : value;
                }
                break;

            case "TLR":
                IsTloReferenceSet = value != "0";
                break;

            case "MPG":
                GrblInfo.MPGMode = _grblState.MPG = value == "1";
                IsMPGActive      = _grblState.MPG;
                break;

            case "H":
                if (_h != value)
                {
                    _h = value;
                    var hs = _h.Split(',');
                    HomedState = hs[0] == "1" ? HomedState.Homed : (GrblState.State == GrblStates.Alarm && GrblState.Substate == 11 ? HomedState.NotHomed : HomedState.Unknown);
                }
                break;

            case "D":
                _d        = value;
                LatheMode = GrblParserState.LatheMode = value == "0" ? LatheMode.Radius : LatheMode.Diameter;
                break;

            case "THC":
            {
                var values = value.Split(',');

                if (_thcv != values[0])
                {
                    _thcv      = values[0];
                    THCVoltage = dbl.Parse(_thcv);
                }

                value = values.Length > 1 ? values[1] : "";

                if (_thcs != value)
                {
                    _thcs = value;

                    int s = 0;
                    foreach (char c in _thcs)
                    {
                        int i = GrblConstants.THCSIGNALS.IndexOf(c);
                        if (i >= 0)
                        {
                            s |= (1 << i);
                        }
                    }
                    THCSignals.Value = (THCSignals)s;
                }
            }
            break;

            case "Enc":
            {
                var enc = value.Split(',');
                OverrideEncoderMode = (GrblEncoderMode)int.Parse(enc[0]);
            }
            break;
            }

            return(pos_changed);
        }
Exemple #19
0
        public bool Set(string parameter, string value)
        {
            bool changed = false;

            switch (parameter)
            {
            case "MPos":
                if ((changed = _MPos != value))
                {
                    if (!_isMPos)
                    {
                        IsMachinePosition = true;
                    }
                    _MPos = value;
                    MachinePosition.Parse(_MPos);
                    for (int i = 0; i < GrblInfo.NumAxes; i++)
                    {
                        double newpos = MachinePosition.Values[i] - WorkPositionOffset.Values[i];
                        if (!Position.Values[i].Equals(newpos))
                        {
                            Position.Values[i] = newpos;
                        }
                    }
                }
                break;

            case "WPos":
                if ((changed = _WPos != value))
                {
                    if (_isMPos)
                    {
                        IsMachinePosition = false;
                    }
                    _WPos = value;
                    WorkPosition.Parse(_WPos);
                    for (int i = 0; i < GrblInfo.NumAxes; i++)
                    {
                        if (!Position.Values[i].Equals(WorkPosition.Values[i]))
                        {
                            Position.Values[i] = WorkPosition.Values[i];
                        }
                    }
                }
                break;

            case "A":
                if ((changed = _a != value))
                {
                    _a = value;

                    if (_a == "")
                    {
                        Mist = Flood = IsToolChanging = false;
                        SpindleState.Value = GCode.SpindleState.Off;
                    }
                    else
                    {
                        Mist               = value.Contains("M");
                        Flood              = value.Contains("F");
                        IsToolChanging     = value.Contains("T");
                        SpindleState.Value = value.Contains("S") ? GCode.SpindleState.CW : (value.Contains("C") ? GCode.SpindleState.CCW : GCode.SpindleState.Off);
                    }
                }
                break;

            case "WCO":
                if ((changed = _wco != value))
                {
                    _wco = value;
                    WorkPositionOffset.Parse(value);
                    if (_isMPos)
                    {
                        for (int i = 0; i < GrblInfo.NumAxes; i++)
                        {
                            double newpos = MachinePosition.Values[i] - WorkPositionOffset.Values[i];
                            if (!Position.Values[i].Equals(newpos))
                            {
                                Position.Values[i] = newpos;
                            }
                        }
                    }
                }
                break;

            case "WCS":
                if ((changed = _wcs != value))
                {
                    WorkCoordinateSystem = GrblParserState.WorkOffset = value;
                }
                break;

            case "FS":
                if ((changed = _fs != value))
                {
                    _fs = value;
                    if (_fs == "")
                    {
                        FeedRate = ProgrammedRPM = 0d;
                        if (!double.IsNaN(ActualRPM))
                        {
                            ActualRPM = 0d;
                        }
                    }
                    else
                    {
                        double[] values = dbl.ParseList(_fs);
                        if (_feedrate != values[0])
                        {
                            FeedRate = values[0];
                        }
                        if (_rpm != values[1])
                        {
                            ProgrammedRPM = values[1];
                        }
                        if (values.Length > 2 && _rpmActual != values[2])
                        {
                            ActualRPM = values[2];
                        }
                    }
                }
                break;

            case "Pn":
                if ((changed = _pn != value))
                {
                    _pn = value;

                    int s = 0;
                    foreach (char c in _pn)
                    {
                        int i = GrblConstants.SIGNALS.IndexOf(c);
                        if (i >= 0)
                        {
                            s |= (1 << i);
                        }
                    }
                    Signals.Value = (Signals)s;
                }
                break;

            case "Ov":
                if ((changed = _ov != value))
                {
                    _ov = value;
                    if (_ov == string.Empty)
                    {
                        FeedOverride = RapidsOverride = RPMOverride = 100d;
                    }
                    else
                    {
                        double[] values = dbl.ParseList(_ov);
                        if (_feedOverride != values[0])
                        {
                            FeedOverride = values[0];
                        }
                        if (_rapidsOverride != values[1])
                        {
                            RapidsOverride = values[1];
                        }
                        if (_rpmOverride != values[2])
                        {
                            RPMOverride = values[2];
                        }
                    }
                }
                break;

            case "Sc":
                if ((changed = _sc != value))
                {
                    int s = 0;
                    foreach (char c in value)
                    {
                        int i = GrblInfo.AxisLetterToIndex(c);
                        if (i >= 0)
                        {
                            s |= (1 << i);
                        }
                    }
                    AxisScaled.Value = (AxisFlags)s;
                    Scaling          = value;
                }
                break;

            case "Ex":
                if ((changed = _ex != value))
                {
                    TubeCoolant = value == "C";
                }
                break;

            case "SD":
                value = string.Format("SD Card streaming {0}% complete", value);
                if ((changed = SDCardStatus != value))
                {
                    Message = SDCardStatus = value;
                }
                break;

            case "T":
                if ((changed = _tool != value))
                {
                    Tool = GrblParserState.Tool = value == "0" ? GrblConstants.NO_TOOL : value;
                }
                break;

            case "MPG":
                GrblInfo.MPGMode = _grblState.MPG = value == "1";
                IsMPGActive      = _grblState.MPG;
                changed          = true;
                break;

            case "H":
                if (_h != value)
                {
                    _h         = value;
                    HomedState = value == "1" ? HomedState.Homed : HomedState.Unknown;
                    changed    = true;
                }
                break;

            case "D":
                _d        = value;
                LatheMode = GrblParserState.LatheMode = value == "0" ? LatheMode.Radius : LatheMode.Diameter;
                changed   = true;
                break;
            }

            return(changed);
        }
Exemple #20
0
        private void StateMachine()
        {
            switch (state)
            {
            case ProcessState.Init:
                this.parser.Open = true;

                state = ProcessState.CheckIfOnline;
                break;

            case ProcessState.CheckIfOnline:
                if (this.parser.Open)
                {
                    state = ProcessState.CheckSettings;
                    Thread.Sleep(300);
                }
                else
                {
                    state = ProcessState.Init;
                    Thread.Sleep(500);
                }

                break;

            case ProcessState.CheckSettings:
                var settings = new List <string>();
                settings.Add("$0=10");                                  // (step pulse, usec)
                settings.Add("$1=25");                                  // (step idle delay, msec)
                settings.Add("$2=0");                                   // (step port invert mask:00000000)
                settings.Add("$3=3");                                   // (dir port invert mask:00000011)
                settings.Add("$4=0");                                   // (step enable invert, bool)
                settings.Add("$5=0");                                   // (limit pins invert, bool)
                settings.Add("$6=0");                                   // (probe pin invert, bool)
                settings.Add("$10=3");                                  // (status report mask:00000011)
                settings.Add("$11=0.020");                              // (junction deviation, mm)
                settings.Add("$12=0.001");                              // (arc tolerance, mm)
                settings.Add("$13=0");                                  //(report inches, bool)
                settings.Add("$20=0");                                  // (soft limits, bool)
                settings.Add("$21=0");                                  // (hard limits, bool)
                settings.Add("$22=0");                                  // (homing cycle, bool)
                settings.Add("$23=1");                                  // (homing dir invert mask:00000001)
                settings.Add("$24=50.000");                             // (homing feed, mm/min)
                settings.Add("$25=635.000");                            // (homing seek, mm/min)
                settings.Add("$26=250");                                // (homing debounce, msec)
                settings.Add("$27=1.000");                              // (homing pull-off, mm)
                settings.Add("$100=320.000");                           // (x, step/mm)
                settings.Add("$101=320.000");                           // (y, step/mm)
                settings.Add("$102=320.000");                           // (z, step/mm)
                settings.Add("$110=3000.000");                          // (x max rate, mm/min)
                settings.Add("$111=3000.000");                          // (y max rate, mm/min)
                settings.Add("$112=3000.000");                          // (z max rate, mm/min)
                settings.Add("$120=50.000");                            // (x accel, mm/sec^2)
                settings.Add("$121=50.000");                            // (y accel, mm/sec^2)
                settings.Add("$122=50.000");                            // (z accel, mm/sec^2)
                settings.Add("$130=225.000");                           // (x max travel, mm)
                settings.Add("$131=125.000");                           // (y max travel, mm)
                settings.Add("$132=170.000");                           // (z max travel, mm)

                var result = this.parser.SendCommand("$$");
                if (String.IsNullOrEmpty(result))
                {
                    this.parser.Open = false;
                    state            = ProcessState.Init;
                    Thread.Sleep(5000);
                    return;
                }

                var currentSettings = result.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);

                foreach (var setting in currentSettings)
                {
                    settings.RemoveAll(s => s == setting);
                }

                foreach (var setting in settings)
                {
                    QueueCommand(setting);
                }

                if (settings.Count > 0)
                {
                    this.parser.SendCommand(((char)24).ToString());
                }

                state = ProcessState.Idle;
                break;


            case ProcessState.Idle:
                if (statusCheck.Ready)
                {
                    state = ProcessState.CheckStatus;
                }
                else
                {
                    state = ProcessState.WriteOutput;
                }

                break;


            case ProcessState.WriteOutput:
                state = ProcessState.Idle;
                while (this.PlannerBlocksAvailble > 0)
                {
                    var nextCommand = queue.GetNextCommand();

                    // no more commands
                    if (String.IsNullOrEmpty(nextCommand))
                    {
                        break;
                    }

                    // grbl rxBuffer full
                    if (this.RxBufferBytesAvailble < (nextCommand.Length + 5))
                    {
                        break;
                    }

                    this.RxBufferBytesAvailble -= (nextCommand.Length + 2);
                    this.PlannerBlocksAvailble--;

                    var message = this.parser.SendCommand(nextCommand);
                    queue.Remove(nextCommand);

                    if (!String.IsNullOrEmpty(message) && message.Contains("[MSG:Pgm End]"))
                    {
                        this.JobActive = false;
                    }
                }

                break;

            case ProcessState.CheckStatus:
                state = ProcessState.Idle;

                var status = this.parser.ReadStaus();
                if (status == null)
                {
                    return;
                }


                this.PlannerBlocksAvailble = status.PlannerBlocksAvailble;
                this.RxBufferBytesAvailble = status.RxBufferBytesAvailble;

                if (MachinePosition == null)
                {
                    MachinePosition = status.MachinePosition;
                    WorkCoordinate  = new PositionVector(MachinePosition.X, MachinePosition.Y, MachinePosition.Z);
                }
                else
                {
                    MachinePosition.Move(status.MachinePosition);
                    WorkCoordinate.Move(MachinePosition);
                }

                if (status.WorkCoordinateOffset != null)
                {
                    WorkCoordinate.Offset(status.WorkCoordinateOffset);
                }

                GrblWebSocket.SendToWebSocketClients(this.NamedParameters.ToJSON());
                break;
            }
        }
        public void MachinePosition_defctor()
        {
            var mp = new MachinePosition();

            Assert.AreEqual(0, mp.X);
        }
Exemple #22
0
        public bool Parse(GrblResponse response)
        {
            bool result = false;

            if (response != null)
            {
                switch (response.ResponseType)
                {
                case GrblResponseEnum.Coordinate:
                    if (GCodeParameters.ContainsKey(response.Items[0]))
                    {
                        result = GCodeParameters[response.Items[0]].Relocate(response.Items[1], response.Items[2], response.Items[3]);
                    }
                    break;

                case GrblResponseEnum.Probe:
                    if (GCodeParameters.ContainsKey("PRB"))
                    {
                        if (GCodeParameters["PRB"].Relocate(response.Items[0], response.Items[1], response.Items[2]))
                        {
                            LastProbeSuccess = response.Items[3].Equals("1");
                            result           = true;
                        }
                    }
                    break;

                case GrblResponseEnum.ParserState:
                    ParserState.Clear();
                    for (int i = 0; i < response.Items.Count; i = i + 2)
                    {
                        ParserState.Add(new Tuple <string, string>(response.Items[i], response.Items[i + 1]));
                    }
                    result = true;
                    break;

                case GrblResponseEnum.StartupBlock:
                    if (response.Items[0].Equals("0"))
                    {
                        StartupBlock1 = response.Items[1];
                        result        = true;
                    }
                    else if (response.Items[0].Equals("1"))
                    {
                        StartupBlock2 = response.Items[1];
                        result        = true;
                    }
                    break;

                case GrblResponseEnum.Setting:
                    if (Settings.ContainsKey(response.Items[0]))
                    {
                        Settings[response.Items[0]] = response.Items[1];
                        result = true;
                    }
                    break;

                case GrblResponseEnum.Status:
                    GrblState = (GrblStateEnum)Enum.Parse(typeof(GrblStateEnum), response.Items[0], true);
                    MachinePosition.Relocate(response.Items[1], response.Items[2], response.Items[3]);
                    WorkPosition.Relocate(response.Items[4], response.Items[5], response.Items[6]);
                    result = true;
                    break;

                case GrblResponseEnum.ToolLengthOffset:
                    ToolLengthOffset = double.Parse(response.Items[0]);
                    result           = true;
                    break;

                case GrblResponseEnum.BuildInfo:
                    BuildInfo = response.Items[0];
                    result    = true;
                    break;
                }
            }
            return(result);
        }