我正在尝试从看起来像以下任何一种的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检查,行号和多个命令。