コード例 #1
0
ファイル: JoggingState.cs プロジェクト: hhtat/LaserPewer
        protected override void onEnter(Trigger trigger)
        {
            stateTimeoutTransition.Reset();
            request = GrblRequest.CreateJoggingRequest(trigger.Parameter);

            controller.RequestStatusQueryInterval(RapidStatusQueryIntervalSecs);
        }
コード例 #2
0
ファイル: GrblClient.cs プロジェクト: xiaodelea/CutIT
 public bool Add(GrblRequest request)
 {
     if (IsRunning)
     {
         return(_messagePacker.Add(request));
     }
     return(false);
 }
コード例 #3
0
 protected override void onStep()
 {
     if (controller.LatestStatus.State != GrblStatus.MachineState.Hold &&
         controller.LatestStatus.State != GrblStatus.MachineState.Hold0 &&
         controller.LatestStatus.State != GrblStatus.MachineState.Hold1)
     {
         retrySend(timeout, GrblRequest.CreateFeedHoldRequest());
     }
 }
コード例 #4
0
ファイル: Controller.cs プロジェクト: hhtat/LaserPewer
 private void resetConnectionState()
 {
     ClearResetDetected();
     LatestStatus = GrblStatus.Unknown;
     clearTrigger();
     clearReceivedLines();
     statusQueryTimeout.Zero();
     pendingStatusQueryRequest = null;
 }
コード例 #5
0
ファイル: JogCancelState.cs プロジェクト: hhtat/LaserPewer
        protected override void onStep()
        {
            retrySend(retryTimeout, GrblRequest.CreateJogCancelRequest());

            if (controller.LatestStatus.State == GrblStatus.MachineState.Jog)
            {
                stateTimeoutTransition.Reset();
            }
        }
コード例 #6
0
ファイル: MessagePacker.cs プロジェクト: xiaodelea/CutIT
        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);
        }
コード例 #7
0
ファイル: ResettingState.cs プロジェクト: hhtat/LaserPewer
 protected override void onStep()
 {
     if (retrySend(timeout, GrblRequest.CreateSoftResetRequest()))
     {
     }
     else if (controller.ResetDetected)
     {
         controller.TransitionTo(controller.ReadyState);
     }
 }
コード例 #8
0
 protected override void onStep()
 {
     if (controller.LatestStatus.State == GrblStatus.MachineState.Hold ||
         controller.LatestStatus.State == GrblStatus.MachineState.Hold0 ||
         controller.LatestStatus.State == GrblStatus.MachineState.Hold1)
     {
         retrySend(retryTimeout, GrblRequest.CreateCycleResumeRequest());
         stateTimeoutTransition.Reset();
     }
 }
コード例 #9
0
ファイル: MessagePacker.cs プロジェクト: xiaodelea/CutIT
        public virtual bool Add(string line)
        {
            GrblRequest request = new GrblRequest();

            request.SetContent(line);
            if (request.IsRequestType(GrblRequestEnum.GCode))
            {
                request = new GCommand(line, true);
            }
            return(Add(request));
        }
コード例 #10
0
ファイル: Controller.cs プロジェクト: hhtat/LaserPewer
 private void pollStatusReport()
 {
     if (statusQueryTimeout.Expired(statusQueryInterval) && pendingStatusQueryRequest == null)
     {
         GrblRequest request = GrblRequest.CreateStatusQueryRequest();
         if (ActiveConnection.Send(request))
         {
             statusQueryTimeout.Reset();
             pendingStatusQueryRequest = request;
         }
     }
 }
コード例 #11
0
ファイル: State.cs プロジェクト: hhtat/LaserPewer
        protected bool retrySend(StopWatch timeout, GrblRequest request)
        {
            if (timeout.Expired(TimeSpan.FromSeconds(RetryTimeoutSecs)))
            {
                if (controller.ActiveConnection.Send(request))
                {
                    timeout.Reset();
                }

                return(true);
            }

            return(false);
        }
コード例 #12
0
ファイル: MessagePacker.cs プロジェクト: xiaodelea/CutIT
 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;
 }
コード例 #13
0
ファイル: MessagePacker.cs プロジェクト: xiaodelea/CutIT
        protected virtual bool CheckIfCancelRequest()
        {
            if (_requestDoing != null)
            {
                if (_requestCancelSource.Token.IsCancellationRequested)
                {
                    RequestsRejected.Add(_requestDoing);
                    _requestDoing = null;

                    if (PauseOnReject)
                    {
                        IsPaused = true;
                        return(true);
                    }
                }
            }
            return(false);
        }
コード例 #14
0
ファイル: MessagePacker.cs プロジェクト: xiaodelea/CutIT
        protected virtual void ThreadMainCleanup()
        {
            while (RequestsToDo.Count > 0)
            {
                RequestsRejected.Add(RequestsToDo.Pop());
            }
            if (_requestDoing != null)
            {
                RequestsRejected.Add(_requestDoing);
            }
            _requestDoing = null;
            if (_requestCancelSource != null)
            {
                _requestCancelSource.Dispose();
            }

            _runThread = null;
        }
コード例 #15
0
ファイル: MessagePacker.cs プロジェクト: xiaodelea/CutIT
        protected virtual int GetAndSendSpecial()
        {
            int result = 0;

            while (SpecialRequests.Count > 0)
            {
                GrblRequest specialRequest = SpecialRequests.Pop();
                if (specialRequest.IsRequestType(GrblRequestEnum.CurrentStatus))
                {
                    GetAndSendRequest(specialRequest);
                }
                else
                {
                    specialRequest.Stamp();
                    _txData.Enqueue(specialRequest.Content.ToCharArray());
                    RequestsDone.Add(specialRequest);
                    result++;
                }
            }
            return(result);
        }
コード例 #16
0
 private void _statusTimer_Elapsed(object sender, ElapsedEventArgs e)
 {
     if (ViewModelLocator.TcpGrblClient.IsConnected)
     {
         if (_statusRequest == null)
         {
             _statusRequest = new GuiRequest();
             _statusRequest.SetContent("?");
             if (!ViewModelLocator.TcpGrblClient.Add(_statusRequest))
             {
                 _statusRequest = null;
             }
         }
         else if (_statusRequest.IsFinished)
         {
             ViewModelLocator.GrblSettings.Parse(_statusRequest.Response);
             RaiseAllProperties();
             _statusRequest = null;
         }
     }
     _statusTimer.Start();
 }
コード例 #17
0
ファイル: MessagePacker.cs プロジェクト: xiaodelea/CutIT
        protected virtual bool GetAndSendRequest(GrblRequest request = null)
        {
            bool result = false;

            if (_requestDoing == null || request != null && _tempRequestDoing == null)
            {
                _tempRequestDoing = _requestDoing;
                _requestDoing     = request;
                if (_requestDoing == null)
                {
                    RequestsToDo.TryDequeue(out _requestDoing);
                }
                if (_requestDoing != null)
                {
                    if (_requestDoing.IsValid && !_requestDoing.IsStamped)
                    {
                        _requestDoing.Stamp();
                        if (_requestDoing.IsSpecial)
                        {
                            _txData.Enqueue((_requestDoing.Content).ToCharArray());
                        }
                        else
                        {
                            _txData.Enqueue((_requestDoing.Content + "\n").ToCharArray());
                        }
                        _requestCancelSource.Dispose();
                        _requestCancelSource = new CancellationTokenSource();
                        result = true;
                    }
                    if (_requestDoing.IsFinished)
                    {
                        RequestsDone.Add(_requestDoing);
                        _requestDoing = null;
                    }
                }
            }
            return(result);
        }
コード例 #18
0
ファイル: MessagePacker.cs プロジェクト: xiaodelea/CutIT
 public virtual bool Add(GrblRequest request)
 {
     if (IsRunning)
     {
         if (request.IsValid)
         {
             if (request.IsSpecial)
             {
                 SpecialRequests.Add(request);
             }
             else
             {
                 RequestsToDo.Add(request);
             }
             return(true);
         }
         else if (SaveRejectedRequests)
         {
             RequestsRejected.Add(request);
         }
     }
     return(false);
 }
コード例 #19
0
ファイル: Controller.cs プロジェクト: hhtat/LaserPewer
 private void processReceivedLines()
 {
     for (string line = dequeueReceivedLine(); line != null; line = dequeueReceivedLine())
     {
         if (line.StartsWith("<"))
         {
             GrblStatus status = GrblStatus.Parse(line);
             if (status != null)
             {
                 if (!status.Equals(LatestStatus))
                 {
                     LatestStatus = status;
                 }
                 pendingStatusQueryRequest = null;
             }
         }
         else if (line.StartsWith("Grbl "))
         {
             resetConnectionState();
             ResetDetected = true;
         }
     }
 }
コード例 #20
0
 protected override void onStep()
 {
     if (retrySend(retryTimeout, GrblRequest.CreateFeedHoldRequest()))
     {
     }
 }
コード例 #21
0
ファイル: HomingState.cs プロジェクト: hhtat/LaserPewer
 protected override void onEnter(Trigger trigger)
 {
     request = GrblRequest.CreateHomingRequest();
 }
コード例 #22
0
ファイル: AlarmKillState.cs プロジェクト: hhtat/LaserPewer
 protected override void onStep()
 {
     if (retrySend(retryTimeout, GrblRequest.CreateKillAlarmRequest()))
     {
     }
 }