Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2012
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.29 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import sys, os
  4. BASE = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), ".."))
  5. libdir = os.path.join(BASE, "lib", "python")
  6. datadir = os.path.join(BASE, "share", "linuxcnc")
  7. sys.path.insert(0, libdir)
  8. xmlname = os.path.join(datadir,"gui7.glade")
  9. sys.path.append("/usr/share/pyshared/gui7")
  10. sys.path.insert(0, "/usr/share/pyshared/gui7")
  11.  
  12. # import libraries
  13. import pygtk
  14. pygtk.require("2.0")
  15. import gtk
  16.  
  17. import linuxcnc, hal
  18.  
  19. import gladevcp.makepins
  20. import subprocess
  21. import gobject
  22.  
  23. print 'libdir'
  24. print libdir
  25.  
  26. print 'system path'
  27. print sys.path
  28. print 'end system path'
  29.  
  30. from gui7 import status
  31.  
  32. # main class
  33. class gui7(object):
  34.  
  35. def __init__(self, inifile):
  36. self.cnc = linuxcnc
  37. self.stat = self.cnc.stat()
  38. self.c = self.cnc.command()
  39. self.ec = self.cnc.error_channel()
  40. self.builder = gtk.Builder()
  41. self.builder.add_from_file(xmlname)
  42. self.builder.connect_signals(self)
  43. self.window = self.builder.get_object("base_window")
  44. self.statusbar = self.builder.get_object("statusbar")
  45. self.tooltable = self.builder.get_object("treeview1")
  46. self.halcomp = hal.component("gui7")
  47. self.panel = gladevcp.makepins.GladePanel(self.halcomp, xmlname, self.builder, None)
  48. self.halcomp.ready()
  49. self.window.show()
  50. self.tcl_dir = os.environ["LINUXCNC_TCL_DIR"] + "/bin/"
  51. self.ini_file = os.environ["INI_FILE_NAME"]
  52. self.jog_type = self.cnc.JOG_CONTINUOUS
  53. self.jog_distance = 0
  54. gobject.timeout_add(100, self.periodic)
  55.  
  56. def on_menu_halshow_activate(self, widget, data=None):
  57. print "Menu Hal Show"
  58. subprocess.Popen([self.tcl_dir + "halshow.tcl", "-- -ini " + self.ini_file])
  59.  
  60. def periodic(self): # fetch status items and update screen
  61. # poll the error channel
  62. self.error_status = self.ec.poll()
  63. if self.error_status:
  64. self.error_kind, self.error_text = self.error_status
  65. if self.error_kind in (linuxcnc.NML_ERROR, linuxcnc.OPERATOR_ERROR):
  66. self.error_type = "Error: "
  67. else:
  68. self.error_type = "Info: "
  69. self.message_id = self.statusbar.push(0, self.error_type + self.error_text)
  70.  
  71. # poll the status channel
  72. self.stat.poll()
  73. dict = {0:'None', 1:'MDI',2:'Auto', 3:'Manual'}
  74. data = self.stat.task_mode
  75. text = dict[data]
  76. self.builder.get_object("task_mode").set_text(text)
  77.  
  78. return True
  79.  
  80.  
  81. # jogging
  82.  
  83. def on_jog_cont_toggled(self, widget, data=None):
  84. if widget.get_active():
  85. self.jog_type = self.cnc.JOG_CONTINUOUS
  86.  
  87. def on_jog_incr1_toggled(self, widget, data=None):
  88. if widget.get_active():
  89. self.jog_type = self.cnc.JOG_INCREMENT
  90. self.jog_distance = 0.1
  91.  
  92. def on_jog_incr2_toggled(self, widget, data=None):
  93. if widget.get_active():
  94. self.jog_type = self.cnc.JOG_INCREMENT
  95. self.jog_distance = 0.01
  96.  
  97. def on_jog_incr3_toggled(self, widget, data=None):
  98. if widget.get_active():
  99. self.jog_type = self.cnc.JOG_INCREMENT
  100. self.jog_distance = 0.001
  101.  
  102. def on_jog_x_plus_pressed(self, widget, data=None):
  103. if self.builder.get_object("jog_speed").get_value() > 0:
  104. self.c.mode(self.cnc.MODE_MANUAL)
  105. self.c.wait_complete()
  106. self.jog_velocity = self.builder.get_object("jog_speed").get_value() / 60
  107. if self.jog_type == self.cnc.JOG_CONTINUOUS:
  108. self.c.jog(self.jog_type, 0, self.jog_velocity)
  109. else:
  110. self.c.jog(self.jog_type, 0, self.jog_velocity, self.jog_distance)
  111.  
  112. def on_jog_x_plus_released(self, widget, data=None):
  113. if self.jog_type == self.cnc.JOG_CONTINUOUS:
  114. self.c.jog(self.cnc.JOG_STOP, 0)
  115.  
  116. def on_jog_x_minus_pressed(self, widget, data=None):
  117. if self.builder.get_object("jog_speed").get_value() > 0:
  118. self.c.mode(self.cnc.MODE_MANUAL)
  119. self.c.wait_complete()
  120. self.jog_velocity = -self.builder.get_object("jog_speed").get_value() / 60
  121. if self.jog_type == self.cnc.JOG_CONTINUOUS:
  122. self.c.jog(self.jog_type, 0, self.jog_velocity)
  123. else:
  124. self.c.jog(self.jog_type, 0, self.jog_velocity, self.jog_distance)
  125.  
  126. def on_jog_x_minus_released(self, widget, data=None):
  127. if self.jog_type == self.cnc.JOG_CONTINUOUS:
  128. self.c.jog(self.cnc.JOG_STOP, 0)
  129.  
  130. def on_jog_y_plus_pressed(self, widget, data=None):
  131. if self.builder.get_object("jog_speed").get_value() > 0:
  132. self.c.mode(self.cnc.MODE_MANUAL)
  133. self.c.wait_complete()
  134. self.jog_velocity = self.builder.get_object("jog_speed").get_value() / 60
  135. if self.jog_type == self.cnc.JOG_CONTINUOUS:
  136. self.c.jog(self.jog_type, 1, self.jog_velocity)
  137. else:
  138. self.c.jog(self.jog_type, 1, self.jog_velocity, self.jog_distance)
  139.  
  140. def on_jog_y_plus_released(self, widget, data=None):
  141. if self.jog_type == self.cnc.JOG_CONTINUOUS:
  142. self.c.jog(self.cnc.JOG_STOP, 1)
  143.  
  144. def on_jog_y_minus_pressed(self, widget, data=None):
  145. if self.builder.get_object("jog_speed").get_value() > 0:
  146. self.c.mode(self.cnc.MODE_MANUAL)
  147. self.c.wait_complete()
  148. self.jog_velocity = -self.builder.get_object("jog_speed").get_value() / 60
  149. if self.jog_type == self.cnc.JOG_CONTINUOUS:
  150. self.c.jog(self.jog_type, 1, self.jog_velocity)
  151. else:
  152. self.c.jog(self.jog_type, 1, self.jog_velocity, self.jog_distance)
  153.  
  154. def on_jog_y_minus_released(self, widget, data=None):
  155. if self.jog_type == self.cnc.JOG_CONTINUOUS:
  156. self.c.jog(self.cnc.JOG_STOP, 1)
  157.  
  158. def on_jog_z_plus_pressed(self, widget, data=None):
  159. if self.builder.get_object("jog_speed").get_value() > 0:
  160. self.c.mode(self.cnc.MODE_MANUAL)
  161. self.c.wait_complete()
  162. self.jog_velocity = self.builder.get_object("jog_speed").get_value() / 60
  163. if self.jog_type == self.cnc.JOG_CONTINUOUS:
  164. self.c.jog(self.jog_type, 2, self.jog_velocity)
  165. else:
  166. self.c.jog(self.jog_type, 2, self.jog_velocity, self.jog_distance)
  167.  
  168. def on_jog_z_plus_released(self, widget, data=None):
  169. if self.jog_type == self.cnc.JOG_CONTINUOUS:
  170. self.c.jog(self.cnc.JOG_STOP, 2)
  171.  
  172. def on_jog_z_minus_pressed(self, widget, data=None):
  173. if self.builder.get_object("jog_speed").get_value() > 0:
  174. self.c.mode(self.cnc.MODE_MANUAL)
  175. self.c.wait_complete()
  176. self.jog_velocity = -self.builder.get_object("jog_speed").get_value() / 60
  177. if self.jog_type == self.cnc.JOG_CONTINUOUS:
  178. self.c.jog(self.jog_type, 2, self.jog_velocity)
  179. else:
  180. self.c.jog(self.jog_type, 2, self.jog_velocity, self.jog_distance)
  181.  
  182. def on_jog_z_minus_released(self, widget, data=None):
  183. if self.jog_type == self.cnc.JOG_CONTINUOUS:
  184. self.c.jog(self.cnc.JOG_STOP, 2)
  185.  
  186. # homing
  187.  
  188. def ok_to_home(self):
  189. self.stat.poll()
  190. return not self.stat.estop and self.stat.enabled and (self.stat.interp_state == self.cnc.INTERP_IDLE)
  191.  
  192. def on_home_x_clicked(self, widget, data=None):
  193. if self.stat.axis[0]['homed']:
  194. print "Axis X Homed"
  195. else:
  196. if self.ok_to_home():
  197. self.c.mode(self.cnc.MODE_MANUAL)
  198. self.c.wait_complete()
  199. self.c.home(0)
  200. self.c.wait_complete()
  201.  
  202. def on_home_y_clicked(self, widget, data=None):
  203. if self.stat.axis[1]['homed']:
  204. print "Axis Z Homed"
  205. else:
  206. if self.ok_to_home():
  207. self.c.mode(self.cnc.MODE_MANUAL)
  208. self.c.wait_complete()
  209. self.c.home(1)
  210. self.c.wait_complete()
  211.  
  212. def on_home_z_clicked(self, widget, data=None):
  213. if self.stat.axis[2]['homed']:
  214. print "Axis Z Homed"
  215. else:
  216. if self.ok_to_home():
  217. self.c.mode(self.cnc.MODE_MANUAL)
  218. self.c.wait_complete()
  219. self.c.home(2)
  220. self.c.wait_complete()
  221.  
  222. # mdi commands
  223.  
  224. def ok_to_mdi(self):
  225. self.stat.poll()
  226. return not self.stat.estop and self.stat.enabled and self.stat.homed and (self.stat.interp_state == self.cnc.INTERP_IDLE)
  227.  
  228. def on_offset_x_clicked(self, widget, data=None):
  229. print 'offset x'
  230. if self.ok_to_mdi():
  231. self.c.mode(self.cnc.MODE_MDI)
  232. self.c.wait_complete()
  233. self.c.mdi("G10 L20 P1 X0")
  234.  
  235. def on_offset_y_clicked(self, widget, data=None):
  236. print 'offset y'
  237. if self.ok_to_mdi():
  238. self.c.mode(self.cnc.MODE_MDI)
  239. self.c.wait_complete()
  240. self.c.mdi("G10 L20 P1 Y0")
  241.  
  242. def on_offset_z_clicked(self, widget, data=None):
  243. print 'offset z'
  244. if self.ok_to_mdi():
  245. self.c.mode(self.cnc.MODE_MDI)
  246. self.c.wait_complete()
  247. self.c.mdi("G10 L20 P1 Z0")
  248.  
  249. def on_base_window_destroy(self, widget, data=None):
  250. print "quit with cancel"
  251. gtk.main_quit()
  252.  
  253. def on_menu_quit_activate(self, menuitem, data=None):
  254. print "quit from menu"
  255. gtk.main_quit()
  256.  
  257. def postgui(self):
  258. inifile = linuxcnc.ini(self.ini_file)
  259. postgui_halfile = inifile.find("HAL", "POSTGUI_HALFILE")
  260. return postgui_halfile,sys.argv[2]
  261.  
  262. # run the program
  263. if __name__ == "__main__":
  264. if len(sys.argv) > 2 and sys.argv[1] == '-ini':
  265. print "2", sys.argv[2]
  266. hwg = gui7(sys.argv[2])
  267. else:
  268. hwg = gui7()
  269.  
  270. # load a postgui file if one is present in the INI file
  271. postgui_halfile,inifile = gui7.postgui(hwg)
  272. print "GUI7 postgui filename:",postgui_halfile
  273.  
  274. if postgui_halfile:
  275. res = os.spawnvp(os.P_WAIT, "halcmd", ["halcmd", "-i",inifile,"-f", postgui_halfile])
  276. if res: raise SystemExit, res
  277.  
  278. gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement