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); }
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); }
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); }
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); }
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); }
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; }
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); }
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); }
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); }
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); }
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); }
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); }