Esempio n. 1
0
        public bool Update()
        {
            if (GrblSettings.Loaded)
            {
                xspeed  = GrblSettings.GetDouble(GrblSetting.AxisSetting_XMaxRate);
                xaccel  = GrblSettings.GetDouble(GrblSetting.AxisSetting_XAcceleration);
                zspeed  = GrblSettings.GetDouble(GrblSetting.AxisSetting_ZMaxRate);
                zaccel  = GrblSettings.GetDouble(GrblSetting.AxisSetting_ZAcceleration);
                rpm_min = GrblSettings.GetDouble(GrblSetting.RpmMin);
                rpm_max = GrblSettings.GetDouble(GrblSetting.RpmMax);

                GrblParserState.Get();

                metric = GrblParserState.IsActive("G21") != null;
                if (!xmodelock)
                {
                    xmode = GrblInfo.LatheXMode;
                }

                if (dialog != null)
                {
                    dialog.InitUI(); // use event instead?
                }
            }

            return(GrblSettings.Loaded);
        }
Esempio n. 2
0
        public static void Get()
        {
            Comms.com.DataReceived += new DataReceivedHandler(GrblParserState.Process);

            Comms.com.PurgeQueue();
            Comms.com.WriteCommand(GrblConstants.CMD_GETPARSERSTATE);

            while (Comms.com.CommandState == Comms.State.DataReceived || Comms.com.CommandState == Comms.State.AwaitAck)
            {
                Application.DoEvents();
            }

            Comms.com.DataReceived -= GrblParserState.Process;

            GrblInfo.LatheXMode = GrblParserState.IsActive("G7") == null ? LatheMode.Radius : LatheMode.Diameter;
        }
Esempio n. 3
0
        void DataReceived(string data)
        {
            if (data.Length == 0)
            {
                return;
            }

            if (this.GCodeView.InvokeRequired)
            {
                this.BeginInvoke(new GcodeCallback(DataReceived), new object[] { data });
            }

            else if (data.Substring(0, 1) == "<")
            {
                bool parseState = true;
                data = data.Remove(data.Length - 1);

                if (!data.Contains("|Pn:"))
                {
                    data += "|Pn:";
                }

                string[] elements = data.Split('|');

                foreach (string e in elements)
                {
                    string[] pair = e.Split(':');

                    if (parseState)
                    {
                        SetGRBLState(pair[0].Substring(1), pair.Count() == 1 ? -1 : int.Parse(pair[1]), false);
                        parseState = false;
                    }
                    else if (parameters.Set(pair[0], pair[1]))
                    {
                        if (pair[0] == "MPG")
                        {
                            SetStreamingState(pair[1] == "1" ? StreamingState.Disabled : StreamingState.Idle);
                        }
                        else if (GrblParameterChanged != null)
                        {
                            GrblParameterChanged(pair[0], pair[1]);
                        }
                    }
                }

                if (JobTimer.IsRunning && !JobTimer.IsPaused)
                {
                    this.txtRunTime.Text = JobTimer.RunTime;
                }
            }
            else if (data.StartsWith("ALARM"))
            {
                SetGRBLState("Alarm", -1, false);
            }
            else if (data.StartsWith("[GC:"))
            {
                GrblParserState.Process(data);
            }
            else if (data.StartsWith("["))
            {
                if (!this.file.Loaded && data == "[MSG:Pgm End]")
                {
                    SetStreamingState(StreamingState.NoFile);
                }

                if (GrblMessage != null)
                {
                    GrblMessage(data);
                }
            }
            else if (this.streamingState != StreamingState.Jogging)
            {
                if (data != "ok" && GrblMessage != null)
                {
                    GrblMessage(data.StartsWith("error:") ? GrblErrors.GetMessage(data.Substring(6)) : data);
                }

                if (this.ACKPending > 0 && this.streamingState == StreamingState.Send)
                {
                    this.ACKPending--;
                    if ((string)file.Data.Rows[this.PendingLine]["Sent"] == "*")
                    {
                        this.serialUsed -= (int)file.Data.Rows[this.PendingLine]["Length"];
                    }
                    if (this.serialUsed < 0)
                    {
                        this.serialUsed = 0;
                    }
                    file.Data.Rows[this.PendingLine]["Sent"] = data;

                    if (this.PendingLine > 5)
                    {
                        this.GCodeView.FirstDisplayedScrollingRowIndex = this.PendingLine - 5;
                    }

                    if (this.streamingState == StreamingState.Send)
                    {
                        if (data.StartsWith("error"))
                        {
                            SetStreamingState(StreamingState.Halted);
                        }
                        else if ((this.pgmComplete = this.PgmEndLine == this.PendingLine))
                        {
                            this.ACKPending = this.CurrLine = 0;
                            if (this.grblState.State == GrblStates.Idle)
                            {
                                SetGRBLState(GrblStates.Idle.ToString(), -1, true);
                            }
                        }
                        else
                        {
                            SendNextLine();
                        }
                    }
                    this.PendingLine++;
                }

                switch (this.streamingState)
                {
                case StreamingState.Send:
                    SendNextLine();
                    break;

                case StreamingState.SendMDI:
                    if (file.commands.Count > 0)
                    {
                        Comms.com.WriteCommand(file.commands.Dequeue());
                    }
                    if (file.commands.Count == 0)
                    {
                        this.streamingState = StreamingState.Idle;
                    }
                    break;

                case StreamingState.Reset:
                    Comms.com.WriteCommand(GrblConstants.CMD_UNLOCK);
                    this.streamingState = StreamingState.AwaitResetAck;
                    break;

                case StreamingState.AwaitResetAck:
                    SetStreamingState(this.file.Loaded ? StreamingState.Idle : StreamingState.NoFile);
                    break;
                }
            }
        }