Roland_MDX_20.py 3.6 KB

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