Beispiel #1
0
        public static string statusToText(grblState state)
        {
            switch (state)
            {
            case grblState.idle: return("Idle");

            case grblState.run: return("Run");

            case grblState.hold: return("Hold");

            case grblState.jog: return("Jogging");

            case grblState.alarm: return("Alarm");

            case grblState.door: return("Door");

            case grblState.check: return("Check code");

            case grblState.home: return("Homing");

            case grblState.sleep: return("Sleep");

            case grblState.probe: return("Probing");

            case grblState.unknown:
            default:
                return("Unknown");
            }
        }
Beispiel #2
0
        private void handleStatusMessage(string text, bool probe = false)
        {
            string[] sections = text.Split(',');
            if (probe)              // [PRB:-155.000,-160.000,-28.208:1]
            {
            }
            else
            {   // <Idle,MPos:0.000,0.000,0.000,WPos:0.000,0.000,0.000>
                string status = sections[0].Substring(1).Trim(' ');
                Double.TryParse(sections[1].Substring(5), System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out posMachine.X);
                Double.TryParse(sections[2], System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out posMachine.Y);
                Double.TryParse(sections[3], System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out posMachine.Z);
                Double.TryParse(sections[4].Substring(5), System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out posWorld.X);
                Double.TryParse(sections[5], System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out posWorld.Y);
                Double.TryParse(sections[6].TrimEnd('>'), System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out posWorld.Z);
                grblStateNow        = grbl.parseStatus(status);
                lblStatus.BackColor = grbl.grblStateColor(grblStateNow);
                lblStatus.Text      = status;
                lblPos.Text         = string.Format("X={0:0.000} Y={1:0.000} Z={2:0.000}", posMachine.X, posMachine.Y, posMachine.Z);
            }
            if (grblStateNow != grblStateLast)
            {
                grblStateChanged();
            }
            if (grblStateNow == grblState.idle)
            {
                waitForIdle = false;
                processSend();
            }
            grblStateLast = grblStateNow;
//            OnRaisePosEvent(new PosEventArgs(posWorld, posMachine, grblStateNow));
        }
Beispiel #3
0
        public static Color grblStateColor(grblState state)
        {
            switch (state)
            {
            case grblState.run:
                return(Color.Yellow);

            case grblState.hold:
                return(Color.YellowGreen);

            case grblState.home:
                return(Color.Magenta);

            case grblState.check:
                return(Color.Orange);

            case grblState.idle:
                return(Color.Lime);

            case grblState.probe:
                return(Color.LightBlue);

            case grblState.unknown:
                return(Color.Red);

            case grblState.alarm:
            case grblState.door:
            default:
                return(Color.Fuchsia);
            }
        }
Beispiel #4
0
 public PosEventArgs(xyzPoint world, xyzPoint machine, grblState stat, string last)
 {
     posWorld   = world;
     posMachine = machine;
     status     = stat;
     lastCmd    = last;
 }
Beispiel #5
0
 public PosEventArgs(xyzPoint world, xyzPoint machine, grblState stat, mState msg, pState last)
 {
     posWorld   = world;
     posMachine = machine;
     status     = stat;
     statMsg    = msg;
     lastCmd    = last;
 }
Beispiel #6
0
 public static Color grblStateColor(grblState state)
 {
     for (int i = 0; i < statusConvert.Length; i++)
     {
         if (state == statusConvert[i].state)
             return statusConvert[i].color;
     }
     return Color.Fuchsia;
 }
Beispiel #7
0
 public static string statusToText(grblState state)
 {
     for (int i = 0; i < statusConvert.Length; i++)
     {
         if (state == statusConvert[i].state)
             return statusConvert[i].msg;
     }
     return "Unknown";
 }
Beispiel #8
0
        // handle position events from serial form
        private void OnRaisePosEvent(object sender, PosEventArgs e)
        {
            posWorld      = e.PosWorld;
            posMachine    = e.PosMachine;
            machineStatus = e.Status;

            label_mx.Text          = string.Format("{0:0.000}", posMachine.X);
            label_my.Text          = string.Format("{0:0.000}", posMachine.Y);
            label_mz.Text          = string.Format("{0:0.000}", posMachine.Z);
            label_wx.Text          = string.Format("{0:0.000}", posWorld.X);
            label_wy.Text          = string.Format("{0:0.000}", posWorld.Y);
            label_wz.Text          = string.Format("{0:0.000}", posWorld.Z);
            label_status.Text      = grbl.statusToText(machineStatus);
            label_status.BackColor = grbl.grblStateColor(machineStatus);
        }
Beispiel #9
0
 public static string statusToText(grblState state)
 {
     for (int i = 0; i < statusConvert.Length; i++)
     {
         if (state == statusConvert[i].state)
         {
             if (Properties.Settings.Default.grblTranslateMessage)
             {
                 return(statusConvert[i].text);
             }
             else
             {
                 return(statusConvert[i].state.ToString());
             }
         }
     }
     return("Unknown");
 }
        /************************************************************
        * handle status report and position event from serial form
        * processStatus()
        ************************************************************/
        private void OnRaisePosEvent(object sender, PosEventArgs e)
        {
            //  if (logPosEvent)  Logger.Trace("OnRaisePosEvent  {0}  connect {1}  status {2}", e.Status.ToString(), _serial_form.serialPortOpen, e.Status.ToString());
            machineStatus        = e.Status;
            machineStatusMessage = e.StatMsg;
            machineParserState   = e.parserState;

/***** Restore saved position after reset and set initial feed rate: *****/
            if (flagResetOffset || (e.Status == grblState.reset))
            {
                processReset();
            }

/***** process grblState {idle, run, hold, home, alarm, check, door} *****/
            processStatus(e.Raw);

/***** check and submit override values, set labels, checkbox *****/
            processStatusMessage(e.StatMsg);

/***** set DRO digital-read-out labels with machine and work coordinates *****/
            if (!simuEnabled)
            {
                updateDRO();
            }

/***** parser state Spinde/Coolant on/off, on other Forms: FeedRate, SpindleSpeed, G54-Coord *****/
            processParserState(e.parserState);

/***** update 2D view *****/
            if (grbl.posChanged)
            {
                VisuGCode.createMarkerPath();
                VisuGCode.updatePathPositions();
                checkMachineLimit();
                pictureBox1.Invalidate();
                if (Properties.Settings.Default.flowCheckRegistryChange && !isStreaming)
                {
                    gui.writePositionToRegistry();
                }
                grbl.posChanged = false;
            }
            if (grbl.wcoChanged)
            {
                checkMachineLimit();
                grbl.wcoChanged = false;
            }
            if (((isStreaming || isStreamingRequestStop)) && Properties.Settings.Default.guiProgressShow)
            {
                VisuGCode.ProcessedPath.processedPathDraw(grbl.posWork);
            }


            if (_diyControlPad != null)
            {
                if (oldRaw != e.Raw)
                {
                    _diyControlPad.sendFeedback(e.Raw);     //hand over original grbl text
                    oldRaw = e.Raw;
                }
            }
        }
/***************************************************************
* handle status events from serial form
* {idle, run, hold, home, alarm, check, door}
* only action on status change
***************************************************************/
        private void processStatus(string msg)
        {
            string lblInfo      = "";
            Color  lblInfoColor = Color.Black;

            if (logPosEvent)
            {
                Logger.Trace("processStatus  Status:{0}", machineStatus.ToString());
            }
            if ((machineStatus != lastMachineStatus) || (grbl.lastMessage.Length > 5))
            {
                // label at DRO
                if (label_status.InvokeRequired)
                {
                    label_status.BeginInvoke((MethodInvoker) delegate() { label_status.Text = grbl.statusToText(machineStatus); });
                }
                else
                {
                    label_status.Text = grbl.statusToText(machineStatus);
                }
                label_status.BackColor = grbl.grblStateColor(machineStatus);

                switch (machineStatus)
                {
                case grblState.idle:
                    if ((lastMachineStatus == grblState.hold) || (lastMachineStatus == grblState.alarm))
                    {
                        statusStripClear(1, 2, "grblState.idle");
                        setInfoLabel(lastInfoText, SystemColors.Control);

                        if (!_serial_form.checkGRBLSettingsOk())       // check 30 kHz limit
                        {
                            statusStripSet(1, grbl.lastMessage, Color.Fuchsia);
                            statusStripSet(2, Localization.getString("statusStripeCheckCOM"), Color.Yellow);
                        }
                    }
                    signalResume        = 0;
                    btnResume.BackColor = SystemColors.Control;
                    cBTool.Checked      = _serial_form.toolInSpindle;
                    if (signalLock > 0)
                    {
                        btnKillAlarm.BackColor = SystemColors.Control; signalLock = 0;
                    }
                    if (!isStreaming)                           // update drawing if G91 is used
                    {
                        updateDrawingPath = true;
                    }
                    statusStripClear(1, 2, "grblState.idle2");
                    grbl.lastMessage = "";
                    break;

                case grblState.run:
                    if (lastMachineStatus == grblState.hold)
                    {
                        //           statusStripClear();
                        setInfoLabel(lastInfoText, SystemColors.Control);
                    }
                    signalResume        = 0;
                    btnResume.BackColor = SystemColors.Control;
                    break;

                case grblState.hold:
                    btnResume.BackColor = Color.Yellow;
                    lastInfoText        = lbInfo.Text;
                    lblInfo             = Localization.getString("mainInfoResume"); //"Press 'Resume' to proceed";

                    if (grbl.lastErrorNr > 0)
                    {
                        lblInfoColor = Color.Fuchsia;
                    }
                    else
                    {
                        lblInfoColor = Color.Yellow;
                    }

                    setInfoLabel(lblInfo, lblInfoColor);
                    //       statusStripClear();
                    statusStripSet(1, grbl.statusToText(machineStatus), grbl.grblStateColor(machineStatus));
                    statusStripSet(2, lblInfo, lblInfoColor);
                    if (signalResume == 0)
                    {
                        signalResume = 1;
                    }
                    break;

                case grblState.home:
                    break;

                case grblState.alarm:
                    signalLock             = 1;
                    btnKillAlarm.BackColor = Color.Yellow;
                    lblInfo = Localization.getString("mainInfoKill");         //"Press 'Kill Alarm' to proceed";
                    setInfoLabel(lblInfo, Color.Yellow);

                    statusStripSet(1, grbl.statusToText(machineStatus) + " " + grbl.lastMessage, grbl.grblStateColor(machineStatus));
                    statusStripSet(2, lblInfo, Color.Yellow);
                    grbl.lastMessage = "";
                    if (_heightmap_form != null)
                    {
                        _heightmap_form.stopScan();
                    }
                    break;

                case grblState.check:
                    break;

                case grblState.door:
                    btnResume.BackColor = Color.Yellow;
                    lastInfoText        = lbInfo.Text;
                    lblInfo             = Localization.getString("mainInfoResume"); //"Press 'Resume' to proceed";
                    setInfoLabel(lblInfo, Color.Yellow);

                    statusStripSet(1, grbl.statusToText(machineStatus), grbl.grblStateColor(machineStatus));
                    statusStripSet(2, lblInfo, Color.Yellow);
                    if (signalResume == 0)
                    {
                        signalResume = 1;
                    }
                    break;

                case grblState.probe:
                    posProbe = _serial_form.posProbe;
                    if (_diyControlPad != null)
                    {
                        if (alternateZ != null)
                        {
                            posProbe.Z = (double)alternateZ;
                        }
                        //_diyControlPad.sendFeedback("Probe: "+posProbe.Z.ToString());
                    }
                    if (_heightmap_form != null)
                    {
                        _heightmap_form.setPosProbe = posProbe;
                    }

                    if (_probing_form != null)
                    {
                        Logger.Info("Update Probing {0}", grbl.displayCoord("PRB"));
                        _probing_form.setPosProbe = grbl.getCoord("PRB");
                    }

                    lastInfoText = lbInfo.Text;
                    setInfoLabel(string.Format("{0}: X:{1:0.00} Y:{2:0.00} Z:{3:0.00}", Localization.getString("mainInfoProbing"), posProbe.X, posProbe.Y, posProbe.Z), Color.Yellow);
                    break;

                case grblState.unknown:
                    //      timerUpdateControlSource = "grblState.unknown";
                    //      updateControls();
                    break;

                case grblState.notConnected:
                    setInfoLabel("No connection", Color.Fuchsia);
                    statusStripSet(1, "No connection", Color.Fuchsia);
                    statusStripSet(2, msg, Color.Fuchsia);
                    break;

                default:
                    break;
                }
                if (_probing_form != null)
                {
                    _probing_form.setGrblSaState = machineStatus;
                }
            }
            lastMachineStatus = machineStatus;
        }
Beispiel #12
0
/***************************************************************
* handle status events from serial form
* {idle, run, hold, home, alarm, check, door}
* only action on status change
***************************************************************/
        private void processStatus()
        {
            if (logPosEvent)
            {
                Logger.Trace("processStatus  Status:{0}", machineStatus.ToString());
            }
            if ((machineStatus != lastMachineStatus) || (grbl.lastMessage.Length > 5))
            {
                // label at DRO
                label_status.Text      = grbl.statusToText(machineStatus);
                label_status.BackColor = grbl.grblStateColor(machineStatus);
                switch (machineStatus)
                {
                case grblState.idle:
                    if ((lastMachineStatus == grblState.hold) || (lastMachineStatus == grblState.alarm))
                    {
                        statusStripClear(1, 2);
                        lbInfo.Text      = lastInfoText;
                        lbInfo.BackColor = SystemColors.Control;
                        if (!_serial_form.checkGRBLSettingsOk())       // check 30 kHz limit
                        {
                            statusStripSet(1, grbl.lastMessage, Color.Fuchsia);
                            statusStripSet(2, Localization.getString("statusStripeCheckCOM"), Color.Yellow);
                        }
                    }
                    signalResume        = 0;
                    btnResume.BackColor = SystemColors.Control;
                    cBTool.Checked      = _serial_form.toolInSpindle;
                    if (signalLock > 0)
                    {
                        btnKillAlarm.BackColor = SystemColors.Control; signalLock = 0;
                    }
                    if (!isStreaming)                           // update drawing if G91 is used
                    {
                        updateDrawingPath = true;
                    }
                    //                      statusStripClear(1,2);
                    grbl.lastMessage = "";
                    break;

                case grblState.run:
                    if (lastMachineStatus == grblState.hold)
                    {
                        statusStripClear();
                        lbInfo.Text      = lastInfoText;
                        lbInfo.BackColor = SystemColors.Control;
                    }
                    signalResume        = 0;
                    btnResume.BackColor = SystemColors.Control;
                    break;

                case grblState.hold:
                    btnResume.BackColor = Color.Yellow;
                    lastInfoText        = lbInfo.Text;
                    lbInfo.Text         = Localization.getString("mainInfoResume"); //"Press 'Resume' to proceed";
                    lbInfo.BackColor    = Color.Yellow;
                    statusStripClear();
                    statusStripSet(1, grbl.statusToText(machineStatus), grbl.grblStateColor(machineStatus));
                    statusStripSet(2, lbInfo.Text, lbInfo.BackColor);
                    if (signalResume == 0)
                    {
                        signalResume = 1;
                    }
                    break;

                case grblState.home:
                    break;

                case grblState.alarm:
                    signalLock             = 1;
                    btnKillAlarm.BackColor = Color.Yellow;
                    lbInfo.Text            = Localization.getString("mainInfoKill"); //"Press 'Kill Alarm' to proceed";
                    lbInfo.BackColor       = Color.Yellow;
                    //                  statusStripClear(1,2);
                    statusStripSet(1, grbl.statusToText(machineStatus) + " " + grbl.lastMessage, grbl.grblStateColor(machineStatus));
                    statusStripSet(2, lbInfo.Text, lbInfo.BackColor);
                    grbl.lastMessage = "";
                    if (_heightmap_form != null)
                    {
                        _heightmap_form.stopScan();
                    }
                    break;

                case grblState.check:
                    break;

                case grblState.door:
                    btnResume.BackColor = Color.Yellow;
                    lastInfoText        = lbInfo.Text;
                    lbInfo.Text         = Localization.getString("mainInfoResume"); //"Press 'Resume' to proceed";
                    lbInfo.BackColor    = Color.Yellow;
                    //                statusStripClear(1,2);
                    statusStripSet(1, grbl.statusToText(machineStatus), grbl.grblStateColor(machineStatus));
                    statusStripSet(2, lbInfo.Text, lbInfo.BackColor);
                    if (signalResume == 0)
                    {
                        signalResume = 1;
                    }
                    break;

                case grblState.probe:
                    posProbe = _serial_form.posProbe;
                    if (_diyControlPad != null)
                    {
                        if (alternateZ != null)
                        {
                            posProbe.Z = (double)alternateZ;
                        }
                        //_diyControlPad.sendFeedback("Probe: "+posProbe.Z.ToString());
                    }
                    if (_heightmap_form != null)
                    {
                        _heightmap_form.setPosProbe = posProbe;
                    }

                    if (_probing_form != null)
                    {
                        Logger.Info("Update Probing {0}", grbl.displayCoord("PRB"));
                        _probing_form.setPosProbe = grbl.getCoord("PRB");
                    }

                    lastInfoText     = lbInfo.Text;
                    lbInfo.Text      = string.Format("{0}: X:{1:0.00} Y:{2:0.00} Z:{3:0.00}", Localization.getString("mainInfoProbing"), posProbe.X, posProbe.Y, posProbe.Z);
                    lbInfo.BackColor = Color.Yellow;
                    break;

                case grblState.unknown:
                    timerUpdateControlSource = "grblState.unknown";
                    updateControls();
//                        if (Properties.Settings.Default.serialMinimize && _serial_form.serialPortOpen)
//                            _serial_form.WindowState = FormWindowState.Minimized;
                    break;

                default:
                    break;
                }
                if (_probing_form != null)
                {
                    _probing_form.setGrblSaState = machineStatus;
                }
            }
            lastMachineStatus = machineStatus;
        }