コード例 #1
0
        private void HandleGCode(String cmd)
        {
            Debug.WriteLine(DateTime.Now.ToString() + "  Handling G command: " + cmd);

            switch (cmd)
            {
            case "G91": WriteOKResponse(cmd); return;

            case "G90": WriteOKResponse(cmd); return;

            case "G21": WriteOKResponse(cmd); return;

            case "G20": WriteOKResponse(cmd); break;
            }

            if (cmd.StartsWith("G10"))
            {
                var parts = cmd.Split(' ');
                foreach (var part in parts)
                {
                    if (part.StartsWith("X"))
                    {
                        _work.X = _machine.X;
                    }
                    if (part.StartsWith("Y"))
                    {
                        _work.X = _machine.X;
                    }
                    if (part.StartsWith("Z"))
                    {
                        _work.X = _machine.X;
                    }
                }

                return;
            }

            var line       = _parser.CleanupLine(cmd, idx);
            var parsedLine = _parser.ParseMotionLine(line, idx);

            if (parsedLine == null)
            {
                WriteOKResponse(parsedLine);
                return;
            }

            if (parsedLine.Command == "G4")
            {
                System.Threading.Tasks.Task.Delay(250).Wait();

                WriteOKResponse("G4");
            }

            if (parsedLine.Command == "G0" ||
                parsedLine.Command == "G1" ||
                parsedLine.Command == "G00" ||
                parsedLine.Command == "G01")
            {
                Debug.WriteLine("Pausing For: " + parsedLine.EstimatedRunTime.ToString());
                var finishTime = DateTime.Now + (_firmwareType == FirmwareTypes.LagoVista_PnP ? TimeSpan.FromSeconds(1) : parsedLine.EstimatedRunTime);
                SpinWait.SpinUntil(() => DateTime.Now > finishTime);

                var parts = cmd.Split(' ');
                foreach (var part in parts.Where(itm => !String.IsNullOrEmpty(itm)))
                {
                    switch (part.Substring(0, 1))
                    {
                    case "X":
                        _machine.X = GetParamValue(part);
                        break;

                    case "Y":
                        _machine.Y = GetParamValue(part);
                        break;

                    case "Z":
                        _machine.Z = GetParamValue(part);
                        break;

                    case "C":
                        _rotation = GetParamValue(part);
                        break;
                    }
                }

                WriteOKResponse(parsedLine);
            }
            else if (parsedLine.Command.StartsWith("G04"))
            {
                var finishTime = DateTime.Now + TimeSpan.FromSeconds(3);
                Debug.WriteLine("Handing Pause until " + finishTime + " or " + 3 + " seconds");
                SpinWait.SpinUntil(() => DateTime.Now > finishTime);
                WriteOKResponse(parsedLine);
                Debug.WriteLine("Done " + DateTime.Now);
            }
            else if (parsedLine.Command.StartsWith("G38"))
            {
                var finishTime = DateTime.Now + TimeSpan.FromSeconds(3);
                SpinWait.SpinUntil(() => DateTime.Now > finishTime);
                var newHeight = _rnd.NextDouble() - 0.5;

                AddResponse($"[PRB:0.00,0.00,{newHeight}:1]");
                WriteOKResponse(parsedLine);
            }
            else if (parsedLine.Command.StartsWith("G92"))
            {
                WriteOKResponse(parsedLine);
            }
        }