Roland_MDX_20.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. # ########################################################## ##
  2. # FlatCAM: 2D Post-processing for Manufacturing #
  3. # http://flatcam.org #
  4. # File Author: Marius Adrian Stanciu (c) #
  5. # Date: 3/10/2019 #
  6. # MIT Licence #
  7. # ########################################################## ##
  8. from FlatCAMPostProc import *
  9. # for Roland Preprocessors it is mandatory for the preprocessor name (python file and class name, both of them must be
  10. # the same) to contain the following keyword, case-sensitive: 'Roland' without the quotes.
  11. class Roland_MDX_20(FlatCAMPostProc):
  12. coordinate_format = "%.1f"
  13. feedrate_format = '%.1f'
  14. feedrate_rapid_format = '%.1f'
  15. def start_code(self, p):
  16. gcode = ';;^IN;' + '\n'
  17. gcode += '^PA;'
  18. return gcode
  19. def startz_code(self, p):
  20. return ''
  21. def lift_code(self, p):
  22. if p.units.upper() == 'IN':
  23. z = p.z_move / 25.4
  24. else:
  25. z = p.z_move
  26. gcode = self.feedrate_rapid_code(p) + '\n'
  27. gcode += self.position_code(p).format(**p) + ',' + str(float(z * 40.0)) + ';'
  28. return gcode
  29. def down_code(self, p):
  30. if p.units.upper() == 'IN':
  31. z = p.z_cut / 25.4
  32. else:
  33. z = p.z_cut
  34. gcode = self.feedrate_code(p) + '\n'
  35. gcode += self.position_code(p).format(**p) + ',' + str(float(z * 40.0)) + ';'
  36. return gcode
  37. def toolchange_code(self, p):
  38. return ''
  39. def up_to_zero_code(self, p):
  40. gcode = self.feedrate_code(p) + '\n'
  41. gcode += self.position_code(p).format(**p) + ',' + '0' + ';'
  42. return gcode
  43. def position_code(self, p):
  44. if p.units.upper() == 'IN':
  45. x = p.x / 25.4
  46. y = p.y / 25.4
  47. else:
  48. x = p.x
  49. y = p.y
  50. return ('Z' + self.coordinate_format + ',' + self.coordinate_format) % (float(x * 40.0), float(y * 40.0))
  51. def rapid_code(self, p):
  52. if p.units.upper() == 'IN':
  53. z = p.z_move / 25.4
  54. else:
  55. z = p.z_move
  56. gcode = self.feedrate_rapid_code(p) + '\n'
  57. gcode += self.position_code(p).format(**p) + ',' + str(float(z * 40.0)) + ';'
  58. return gcode
  59. def linear_code(self, p):
  60. if p.units.upper() == 'IN':
  61. z = p.z / 25.4
  62. else:
  63. z = p.z
  64. gcode = self.feedrate_code(p) + '\n'
  65. gcode += self.position_code(p).format(**p) + ',' + str(float(z * 40.0)) + ';'
  66. return gcode
  67. def end_code(self, p):
  68. if p.units.upper() == 'IN':
  69. z = p.z_end / 25.4
  70. else:
  71. z = p.z_end
  72. gcode = self.feedrate_rapid_code(p) + '\n'
  73. gcode += self.position_code(p).format(**p) + ',' + str(float(z * 40.0)) + ';'
  74. return gcode
  75. def feedrate_code(self, p):
  76. fr_sec = p.feedrate / 60
  77. # valid feedrate for MDX20 is between 0.1mm/sec and 15mm/sec (6mm/min to 900mm/min)
  78. if p.feedrate >= 900:
  79. fr_sec = 15
  80. if p.feedrate < 6:
  81. fr_sec = 6
  82. return 'V' + str(self.feedrate_format % fr_sec) + ';'
  83. def z_feedrate_code(self, p):
  84. fr_sec = p.z_feedrate / 60
  85. # valid feedrate for MDX20 is between 0.1mm/sec and 15mm/sec (6mm/min to 900mm/min)
  86. if p.z_feedrate >= 900:
  87. fr_sec = 15
  88. if p.z_feedrate < 6:
  89. fr_sec = 6
  90. return 'V' + str(self.feedrate_format % fr_sec) + ';'
  91. def feedrate_rapid_code(self, p):
  92. fr_sec = p.feedrate_rapid / 60
  93. # valid feedrate for MDX20 is between 0.1mm/sec and 15mm/sec (6mm/min to 900mm/min)
  94. if p.feedrate_rapid >= 900:
  95. fr_sec = 15
  96. if p.feedrate_rapid < 6:
  97. fr_sec = 6
  98. return 'V' + str(self.feedrate_format % fr_sec) + ';'
  99. def spindle_code(self, p):
  100. return '!MC1'
  101. def dwell_code(self, p):
  102. return''
  103. def spindle_stop_code(self,p):
  104. return '!MC0'