Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
 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);
     }
 }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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 {}
        }