示例#1
0
        protected virtual int GetAndStoreResponse()
        {
            int result = 0;

            while (_rxData.Count > 0)
            {
                char[] buffer;
                if (_rxData.TryDequeue(out buffer))
                {
                    if (_responseDoing == null)
                    {
                        _responseDoing = new GrblResponse();
                    }
                    _responseDoing.SetContent(new string(buffer));
                    if (_responseDoing.IsFinished)
                    {
                        if (_requestDoing != null)
                        {
                            if (_requestDoing.IsRequestType(GrblRequestEnum.CurrentStatus))
                            {
                                if (_responseDoing.IsResponseType(GrblResponseEnum.Status))
                                {
                                    _responseDoing.SetRequest(_requestDoing);
                                    _requestDoing.SetResponse(_responseDoing);
                                }
                                else if (_tempRequestDoing != null)
                                {
                                    _responseDoing.SetRequest(_tempRequestDoing);
                                    _tempRequestDoing.SetResponse(_responseDoing);
                                }
                            }
                            else
                            {
                                _responseDoing.SetRequest(_requestDoing);
                                _requestDoing.SetResponse(_responseDoing);
                            }
                            if (_requestDoing.IsFinished)
                            {
                                RequestsDone.Add(_requestDoing);
                                if (_tempRequestDoing != null && _tempRequestDoing.IsFinished)
                                {
                                    RequestsDone.Add(_tempRequestDoing);
                                    _tempRequestDoing = null;
                                }
                                _requestDoing     = _tempRequestDoing;
                                _tempRequestDoing = null;
                            }
                        }
                        result++;
                        Responses.Add(_responseDoing);
                        _responseDoing = null;
                    }
                }
            }
            return(result);
        }
示例#2
0
 public MessagePacker()
 {
     _rxData = null;
     _txData = null;
     SaveRejectedRequests   = true;
     RequestsToDo           = new ConcurrentObservableCollection <GrblRequest>();
     RequestsDone           = new ConcurrentObservableCollection <GrblRequest>();
     SpecialRequests        = new ConcurrentObservableCollection <GrblRequest>();
     Responses              = new ConcurrentObservableCollection <GrblResponse>();
     RequestsRejected       = new ConcurrentObservableCollection <GrblRequest>();
     _requestDoing          = null;
     _responseDoing         = null;
     RequestTimeout         = 2000;
     PauseOnReject          = true;
     AllowSpecialWhenHalted = true;
 }
示例#3
0
 public Program()
 {
     gc = new TcpGrblClient();
     gs = new GrblSettings();
     if (gc.Start("192.168.1.15", 8887))
     {
         running = true;
         new Thread(new ThreadStart(ReadMain)).Start();
         while (gc.IsRunning)
         {
             if (gc.IsPaused)
             {
                 Console.WriteLine("PAUSED");
             }
             if (gc.Responses.Count > 0)
             {
                 GrblResponse r = gc.Responses.Pop();
                 gs.Parse(r);
                 Console.WriteLine(r.Content);
             }
             Thread.Sleep(10);
         }
     }
 }
示例#4
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);
        }