private void ManageCommandResponse(string rline) { try { if (mPending.Count > 0) { GrblCommand pending = mPending.Dequeue(); pending.SetResult(rline, SupportCSV); mBuffer -= pending.SerialData.Length; if (mTP.InProgram && pending.RepeatCount == 0) //solo se non è una ripetizione aggiorna il tempo { mTP.JobExecuted(pending.TimeOffset); } //ripeti errori programma && non ho una coda (magari mi sto allineando per cambio conf buff/sync) && ho un errore && non l'ho già ripetuto troppe volte if (InProgram && CurrentStreamingMode == StreamingMode.RepeatOnError && mPending.Count == 0 && pending.Status == GrblCommand.CommandStatus.ResponseBad && pending.RepeatCount < 3) //il comando eseguito ha dato errore { mRetryQueue = new GrblCommand(pending.Command, pending.RepeatCount + 1); //repeat on error } } if (InProgram && mQueuePtr.Count == 0 && mPending.Count == 0) { OnProgramEnd(); } } catch (Exception ex) { Logger.LogMessage("CommandResponse", "Ex on [{0}] message", rline); Logger.LogException("CommandResponse", ex); } }
protected override void SendToSerial(GrblCommand tosend) { if (injob) { mUsedBuffer += tosend.SerialData.Length; com.Write(tosend.SerialData); //invio dei dati alla linea di comunicazione } else { //mUsedBuffer += tosend.SerialData.Length; com.Write(tosend.SerialData); //invio dei dati alla linea di comunicazione tosend.SetResult("ok", false); } }
private void ManageCommandResponse(string rline) { try { if (mPending.Count > 0) { GrblCommand pending = mPending.Dequeue(); pending.SetResult(rline, SupportCSV); mBuffer -= (pending.Command.Length + 2); //+2 for \r\n if (mTP.InProgram) { mTP.JobExecuted(pending.TimeOffset); } } } catch (Exception ex) { Logger.LogMessage("CommandResponse", "Ex on [{0}] message", rline); Logger.LogException("CommandResponse", ex); } }
void ThreadRX() { try { string rline = null; if ((rline = GetComLineOrDisconnect()) != null) { if (rline.Length > 0) { lock (this) { if (rline.ToLower().StartsWith("ok") || rline.ToLower().StartsWith("error")) { if (mPending.Count > 0) { GrblCommand pending = mPending.Dequeue(); //mLaserPosition = new System.Drawing.PointF(pending.X != null ? (float)pending.X.Number : mLaserPosition.X, pending.Y != null ? (float)pending.Y.Number : mLaserPosition.Y); pending.SetResult(rline, SupportCSV); mBuffer -= (pending.Command.Length + 2); //+2 for \r\n if (mTP.InProgram) { mTP.JobExecuted(pending.TimeOffset); } //if (mQueue.Count == 0 && mPending.Count == 0) //{ // if (QueueStatus != null) // QueueStatus(true); //} } } else if (rline.StartsWith("<") && rline.EndsWith(">")) { rline = rline.Substring(1, rline.Length - 2); System.Diagnostics.Debug.WriteLine(rline); if (rline.Contains("|")) //grbl > 1.1 { string[] arr = rline.Split("|".ToCharArray()); ParseMachineStatus(arr[0]); string mpos = arr[1].Substring(5, arr[1].Length - 5); string[] xyz = mpos.Split(",".ToCharArray()); mLaserPosition = new System.Drawing.PointF(float.Parse(xyz[0], System.Globalization.NumberFormatInfo.InvariantInfo), float.Parse(xyz[1], System.Globalization.NumberFormatInfo.InvariantInfo)); for (int i = 1; i < arr.Length; i++) { if (arr[i].StartsWith("Ov")) { ParseOverrides(arr[i]); } } } else //<Idle,MPos:0.000,0.000,0.000,WPos:0.000,0.000,0.000> { string[] arr = rline.Split(",".ToCharArray()); ParseMachineStatus(arr[0]); mLaserPosition = new System.Drawing.PointF(float.Parse(arr[1].Substring(5, arr[1].Length - 5), System.Globalization.NumberFormatInfo.InvariantInfo), float.Parse(arr[2], System.Globalization.NumberFormatInfo.InvariantInfo)); } } else if (rline.StartsWith("Grbl ")) { //Grbl vX.Xx ['$' for help] try { int maj = int.Parse(rline.Substring(5, 1)); int min = int.Parse(rline.Substring(7, 1)); int build = (int)(rline.Substring(8, 1).ToCharArray()[0]); mGrblVersion = new Version(maj, min, build); } catch {} mSentPtr.Add(new GrblMessage(rline, false)); } else { mSentPtr.Add(new GrblMessage(rline, SupportCSV)); } } } } } catch {} }