• 解析G代码【C#】


    获取字母后数字

     cnc.need_F = Get_G_Value(input, @"[Ff]\d+", out cnc.F速度);// 字母后的数字
     cnc.need_G = Get_G_Value(input, @"[Gg]\d+", out cnc.G指令);// 字母后的数字

     cnc.need_X = Get_G_Value(input, @"[Xx][-+]?\d+\.?\d+", out cnc.X坐标);// 字母后的数字
     cnc.need_Y = Get_G_Value(input, @"[Yy][-+]?\d+\.?\d+", out cnc.Y坐标);// 字母后的数字
     cnc.need_Z = Get_G_Value(input, @"[Zz][-+]?\d+\.?\d+", out cnc.Z坐标);// 字母后的数字

    1. public bool Get_Value64(Match match, out double num)
    2. {
    3. //match = Regex.Match(match.Value, @"[-]?\d+\.?\d+"); // - .【去字母】
    4. match = Regex.Match(match.Value, @"[-]?\d+\.?(\d+)?"); // - .【去字母】
    5. if (double.TryParse(match.Value, out num)) return true;
    6. return false;
    7. }
    8. public bool Get_G_Value(string input, string pattern, out double i64)// 字母后的数字
    9. {// 自裁出匹配条件的数据
    10. //MatchCollection matches = Regex.Matches(input, pattern);
    11. //Match matches = (Match)Regex.Matches(input, pattern);
    12. //foreach (Match match in matches)
    13. //{
    14. // return int.Parse( match.Value);
    15. //}
    16. Match X字母;
    17. //X字母 = Regex.Match(input, $@"[{pattern}][-+]?\d+\.?\d+");// 字母后数字 X+123.456
    18. X字母 = Regex.Match(input,pattern);// 字母后数字 X+123.456
    19. return Get_Value64(X字母, out i64);// 去字母
    20. }

    下面是一个使用C#编写的解析G代码的示例方法:

    1. 下面是一个使用C#编写的解析G代码的示例方法:
    2. csharp
    3. using System;
    4. using System.Collections.Generic;
    5. public class GCodeParser
    6. {
    7. public static List ParseGCode(string gcode)
    8. {
    9. var commands = new List();
    10. // 按行分割G代码
    11. var lines = gcode.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
    12. foreach (var line in lines)
    13. {
    14. // 忽略空行和注释行
    15. if (string.IsNullOrWhiteSpace(line) || line.Trim().StartsWith(";"))
    16. {
    17. continue;
    18. }
    19. // 分割行为指令和参数
    20. var parts = line.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
    21. if (parts.Length == 0)
    22. {
    23. continue;
    24. }
    25. // 第一个部分是指令
    26. var command = new GCodeCommand();
    27. command.Instruction = parts[0].ToUpper();
    28. // 其余部分是参数
    29. for (int i = 1; i < parts.Length; i++)
    30. {
    31. var parameter = parts[i];
    32. // 分割参数名和值
    33. var equalsIndex = parameter.IndexOf('=');
    34. if (equalsIndex > 0)
    35. {
    36. var parameterName = parameter.Substring(0, equalsIndex);
    37. var parameterValue = parameter.Substring(equalsIndex + 1);
    38. command.Parameters[parameterName] = parameterValue;
    39. }
    40. else
    41. {
    42. // 参数没有指定名称,默认使用字母序号作为参数名
    43. command.Parameters[i.ToString()] = parameter;
    44. }
    45. }
    46. commands.Add(command);
    47. }
    48. return commands;
    49. }
    50. }
    51. public class GCodeCommand
    52. {
    53. public string Instruction { get; set; }
    54. public Dictionary<string, string> Parameters { get; set; }
    55. public GCodeCommand()
    56. {
    57. Parameters = new Dictionary<string, string>();
    58. }
    59. }
    60. 使用示例:
    61. csharp
    62. var gcode = "G1 X10 Y20 Z30" + Environment.NewLine +
    63. "G2 X50 Y50 R20" + Environment.NewLine +
    64. "G28" + Environment.NewLine +
    65. "; This is a comment" + Environment.NewLine +
    66. "G90";
    67. var commands = GCodeParser.ParseGCode(gcode);
    68. foreach (var command in commands)
    69. {
    70. Console.WriteLine("Instruction: " + command.Instruction);
    71. foreach (var parameter in command.Parameters)
    72. {
    73. Console.WriteLine("Parameter: " + parameter.Key + " = " + parameter.Value);
    74. }
    75. Console.WriteLine();
    76. }
    77. 输出结果:
    78. Instruction: G1
    79. Parameter: 1 = X10
    80. Parameter: 2 = Y20
    81. Parameter: 3 = Z30
    82. Instruction: G2
    83. Parameter: 1 = X50
    84. Parameter: 2 = Y50
    85. Parameter: 3 = R20
    86. Instruction: G28
    87. Instruction: G90

  • 相关阅读:
    闲聊系列之 5-why root cause分析法
    03--nginx架构实战
    MySQL锁
    Spark工作流程
    SpringMVC执行流程
    快速构建后台管理系统-RUOYI学习之-VUE
    Spring Boot、Spring MVC 和 Spring Cloud 深度解析
    使用iis部署webapi,访问报错502
    【user_key_payload、msg_msg、pipe_buffer】再探RWCTF2023-Digging-into-kernel-3
    入门力扣自学笔记120 C++ (题目编号1417)
  • 原文地址:https://blog.csdn.net/cfqq1989/article/details/134080267