void btn_Click(object sender, RoutedEventArgs e)
        {
            switch ((StatusButton)((Control)sender).Tag)
            {
                case StatusButton.Reset:
                    Grbl.Reset();
                    break;

                case StatusButton.Unlock:
                    (DataContext as GrblViewModel).ExecuteCommand(GrblConstants.CMD_UNLOCK);
                    break;

                case StatusButton.Home:
                    // ((Control)sender).Background = Brushes.LightSkyBlue;
                    (DataContext as GrblViewModel).ExecuteCommand(GrblConstants.CMD_HOMING);
                    break;

                case StatusButton.Check:
                    GrblStates state = (DataContext as GrblViewModel).GrblState.State;
                    if(state == GrblStates.Check && (sender as CheckBox).IsChecked == false)
                        Grbl.Reset();
                    else if (state == GrblStates.Idle && (sender as CheckBox).IsChecked == true)
                        (DataContext as GrblViewModel).ExecuteCommand(GrblConstants.CMD_CHECK);
                    break;
            }
        }
예제 #2
0
        public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
        {
            GrblStates state = value[0] is GrblState ? ((GrblState)value[0]).State : GrblStates.Unknown;

            // If ALARM:11 homing is required
            bool result = state == GrblStates.Alarm && ((GrblState)value[0]).Substate == 11;

            // value[1] = IsJobRunning
            // value[2] = IsSleeping

            if (!result && GrblInfo.HomingEnabled && value.Length > 2 && value[1] is bool && !(bool)value[1] && value[2] is bool && !(bool)value[2])
            {
                result = state != GrblStates.Unknown && !((GrblState)value[0]).MPG && (state == GrblStates.Idle || state == GrblStates.Alarm || !GrblInfo.IsGrblHAL);
            }

            return(result);
        }
예제 #3
0
        void btn_Click(object sender, RoutedEventArgs e)
        {
            switch ((StatusButton)((Control)sender).Tag)
            {
            case StatusButton.Reset:
                var model = (DataContext as GrblViewModel);
                if (model.GrblState.State == GrblStates.Alarm && model.GrblState.Substate == 10 && model.Signals.Value.HasFlag(Signals.EStop))
                {
                    MessageBox.Show((string)FindResource("ClearEStop"), "ioSender", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                }
                else
                {
                    Grbl.Reset();
                }
                break;

            case StatusButton.Unlock:
                (DataContext as GrblViewModel).ExecuteCommand(GrblConstants.CMD_UNLOCK);
                break;

            case StatusButton.Home:
                // ((Control)sender).Background = Brushes.LightSkyBlue;
                (DataContext as GrblViewModel).ExecuteCommand(GrblConstants.CMD_HOMING);
                break;

            case StatusButton.Check:
                GrblStates state = (DataContext as GrblViewModel).GrblState.State;
                if (state == GrblStates.Check && (sender as CheckBox).IsChecked == false)
                {
                    Grbl.Reset();
                }
                else if (state == GrblStates.Idle && (sender as CheckBox).IsChecked == true)
                {
                    (DataContext as GrblViewModel).ExecuteCommand(GrblConstants.CMD_CHECK);
                }
                break;
            }
        }
예제 #4
0
        public bool SetGRBLState(string newState, int substate, bool force)
        {
            GrblStates newstate = _grblState.State;

            Enum.TryParse(newState, true, out newstate);

            if (newstate != _grblState.State || substate != _grblState.Substate || force)
            {
                bool checkChanged = _grblState.State == GrblStates.Check || newstate == GrblStates.Check;
                bool sleepChanged = _grblState.State == GrblStates.Sleep || newstate == GrblStates.Sleep;

                _grblState.State    = newstate;
                _grblState.Substate = substate;

//                force = true;

                switch (_grblState.State)
                {
                case GrblStates.Run:
                    _grblState.Color = Colors.LightGreen;
                    break;

                case GrblStates.Alarm:
                    _grblState.Color = Colors.Red;
                    break;

                case GrblStates.Jog:
                    _grblState.Color = Colors.Yellow;
                    break;

                case GrblStates.Tool:
                    _grblState.Color = Colors.LightSalmon;
                    break;

                case GrblStates.Hold:
                    _grblState.Color = Colors.LightSalmon;
                    break;

                case GrblStates.Door:
                    if (_grblState.Substate > 0)
                    {
                        _grblState.Color = _grblState.Substate == 1 ? Colors.Red : Colors.LightSalmon;
                    }
                    break;

                case GrblStates.Home:
                case GrblStates.Sleep:
                    _grblState.Color = Colors.LightSkyBlue;
                    break;

                case GrblStates.Check:
                    _grblState.Color = Colors.White;
                    break;

                default:
                    _grblState.Color = Colors.White;
                    break;
                }

                OnPropertyChanged(nameof(GrblState));

                if (checkChanged || force)
                {
                    OnPropertyChanged(nameof(IsCheckMode));
                }

                if (sleepChanged || force)
                {
                    OnPropertyChanged(nameof(IsSleepMode));
                }

                if (newstate == GrblStates.Sleep)
                {
                    Message = "<Reset> to continue.";
                }
                else if (newstate == GrblStates.Alarm)
                {
                    Message = substate == 11 ? "<Home> to continue." : "<Reset> then <Unlock> to continue.";
                    if (substate == 11)
                    {
                        HomedState = HomedState.NotHomed;
                    }
                }
            }

            return(force);
        }
예제 #5
0
        void SetGRBLState(string newState, int substate, bool force)
        {
            GrblStates newstate = (GrblStates)Enum.Parse(typeof(GrblStates), newState);

            if (newstate != this.grblState.State || substate != this.grblState.Substate || force)
            {
                switch (newstate)
                {
                case GrblStates.Idle:
                    this.grblState.Color = Color.White;
                    if (this.pgmComplete)
                    {
                        JobTimer.Stop();
                        this.txtRunTime.Text = JobTimer.RunTime;
                        RewindFile();
                    }
                    if (JobTimer.IsRunning)
                    {
                        JobTimer.Pause = true;
                    }
                    else
                    {
                        SetStreamingState(StreamingState.Idle);
                    }
                    break;

                case GrblStates.Run:
                    if (JobTimer.IsPaused)
                    {
                        JobTimer.Pause = false;
                    }
                    this.grblState.Color = Color.LightGreen;
                    //                if (this.grblState.State == GrblStates.Hold || this.grblState.State == GrblStates.Door || this.grblState.State == GrblStates.Tool)
                    SetStreamingState(StreamingState.Send);
                    break;

                case GrblStates.Alarm:
                    this.grblState.Color = Color.Red;
                    break;

                case GrblStates.Jog:
                    this.grblState.Color = Color.Yellow;
                    break;

                case GrblStates.Tool:
                    this.grblState.Color = Color.LightSalmon;
                    SetStreamingState(StreamingState.ToolChange);
                    Comms.com.WriteByte((byte)GrblConstants.CMD_TOOL_ACK);
                    break;

                case GrblStates.Hold:
                    this.grblState.Color = Color.LightSalmon;
                    SetStreamingState(StreamingState.FeedHold);
                    break;

                case GrblStates.Door:
                    if (substate > 0)
                    {
                        this.grblState.Color = grblState.Substate == 1 ? Color.Red : Color.LightSalmon;
                        if (this.streamingState == StreamingState.Send)
                        {
                            SetStreamingState(StreamingState.FeedHold);
                        }
                    }
                    break;

                default:
                    this.grblState.Color = Color.White;
                    break;
                }

                this.grblState.State    = newstate;
                this.grblState.Substate = substate;

                if (GrblStateChanged != null)
                {
                    GrblStateChanged(grblState);
                }
            }
        }
예제 #6
0
        void SetGRBLState(string newState, int substate)
        {
            GrblStates newstate = (GrblStates)Enum.Parse(typeof(GrblStates), newState);

            if (newstate != this.grblState.State || substate != this.grblState.Substate)
            {
                switch (newstate)
                {
                case GrblStates.Idle:
                    this.grblState.Color = Color.White;
                    if (this.pgmComplete)
                    {
                        this.stopWatch.Stop();
                        txtRunTime.Text = this.runTime;
                        RewindFile();
                        SetStreamingState(StreamingState.Idle);
                    }
                    break;

                case GrblStates.Run:
                    this.grblState.Color = Color.LightGreen;
                    if (this.grblState.State == GrblStates.Hold || this.grblState.State == GrblStates.Door)
                    {
                        SetStreamingState(StreamingState.Send);
                    }
                    break;

                case GrblStates.Alarm:
                    this.grblState.Color = Color.Red;
                    break;

                case GrblStates.Jog:
                    this.grblState.Color = Color.Yellow;
                    break;

                case GrblStates.Tool:
                case GrblStates.Hold:
                    this.grblState.Color = Color.LightSalmon;
                    SetStreamingState(StreamingState.FeedHold);
                    break;

                case GrblStates.Door:
                    if (substate > 0)
                    {
                        this.grblState.Color = grblState.Substate == 1 ? Color.Red : Color.LightSalmon;
                        if (this.State == StreamingState.Send)
                        {
                            SetStreamingState(StreamingState.FeedHold);
                        }
                    }
                    break;

                default:
                    this.grblState.Color = Color.White;
                    break;
                }

                this.grblState.State    = newstate;
                this.grblState.Substate = substate;

                if (GrblStateChanged != null)
                {
                    GrblStateChanged(grblState);
                }
            }
        }