我正在尝试从看起来像以下任何一种的gcode行中提取数据:

G01 X10. Y20. Z3.0 F15.
G00X.500Y-10.
G01 Y10.X20.150


现在,我已经创建了正则表达式,它与组完美匹配:

(G|M|X|Y|Z|I|J|K|F)(?<val>-?\d*\.?\d+\.?)


看起来效果很好。对于每个结果,我得到三组数据,例如:

G01 X10. Y20. Z3.0 F15.
G01  |  G  |  01
X10. |  X  |  10.
Y20. |  Y  |  20.
Z3.0 |  Z  |  3.0
F15. |  F  |  15.


我想做的是能够检查输入字符串中的值,以便提取数据并执行位置命令。以上面的示例为例,我想仅提取X,Y和Z值,以便创建其中的Vector。当我拥有所有3个值时,这很容易做到,但是如果输入字符串为G01 X10. Y5.0,如何检查第一组中是否存在值?

最佳答案

我刚刚启动了一个GCode解析库,该库将帮助提取信息:https://github.com/chrismiller7/GCodeNet

您可以像下面这样使用它:

var cmd = Command.Parse("G01 X10. Y20. Z3.0 F15.");
var X = cmd.GetParameterValue(ParameterType.X);
var Y = cmd.GetParameterValue(ParameterType.Y);
var Z = cmd.GetParameterValue(ParameterType.Z);


此外,您可以阅读整个gcode文件:

var gcodeFile = new GCodeFile(File.ReadAllText("file.gcode"));
foreach (var cmd in gcodeFile.Commands)
{
   var X = cmd.GetParameterValue(ParameterType.X);
   var Y = cmd.GetParameterValue(ParameterType.Y);
   var Z = cmd.GetParameterValue(ParameterType.Z);
}


GCodeFile类将在单行上处理注释,CRC检查,行号和多个命令。

10-06 00:52