public PosEventArgs(xyzPoint world, xyzPoint machine, grblState stat, mState msg, pState last, string sraw) { posWorld = world; posMachine = machine; status = stat; statMsg = msg; lastCmd = last; raw = sraw; }
/// <summary> /// set parser state /// </summary> private static void setParserState(char cmd, double value, ref pState myParserState) { myParserState.changed = false; switch (Char.ToUpper(cmd)) { case 'G': if (value <= 3) { myParserState.motion = (byte)value; break; } if ((value >= 17) && (value <= 19)) myParserState.plane_select = (byte)value; if ((value == 20) || (value == 21)) myParserState.units = (byte)value; if ((value >= 54) && (value <= 59)) myParserState.coord_select = (byte)value; if ((value == 90) || (value == 91)) myParserState.distance = (byte)value; if ((value == 93) || (value == 94)) myParserState.feed_rate = (byte)value; myParserState.changed = true; break; case 'M': if ((value <= 2) || (value == 30)) myParserState.program_flow = (byte)value; // M0, M1 pause, M2, M30 stop if ((value >= 3) && (value <= 5)) myParserState.spindle = (byte)value; // M3, M4 start, M5 stop if ((value >= 7) && (value <= 9)) myParserState.coolant = (byte)value; // M7, M8 on M9 coolant off if (value == 6) myParserState.toolchange = true; myParserState.changed = true; break; case 'F': myParserState.FR = value; myParserState.changed = true; break; case 'S': myParserState.SS = value; myParserState.changed = true; break; case 'T': myParserState.tool = (byte)value; myParserState.changed = true; break; } }
/// <summary> /// parse single gcode line to set parser state /// </summary> public static void updateParserState(string line, ref pState myParserState) { char cmd = '\0'; string num = ""; bool comment = false; double value = 0; if (!(line.StartsWith("$") || line.StartsWith("("))) //do not parse grbl commands { try { foreach (char c in line) { if (c == ';') break; if (c == '(') comment = true; if (!comment) { if (Char.IsLetter(c)) { if (cmd != '\0') { value = 0; if (num.Length > 0) { try { value = double.Parse(num, System.Globalization.NumberFormatInfo.InvariantInfo); } catch { } } try { setParserState(cmd, value, ref myParserState); } catch { } } cmd = c; num = ""; } else if (Char.IsNumber(c) || c == '.' || c == '-') { num += c; } } if (c == ')') { comment = false; } } if (cmd != '\0') { try { setParserState(cmd, double.Parse(num, System.Globalization.NumberFormatInfo.InvariantInfo), ref myParserState); } catch { } } } catch { } } }