Guest User

grbl probe test

a guest
Mar 3rd, 2013
307
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.41 KB | None | 0 0
  1. #!/usr/bin/python
  2. """
  3. do a test of the probe functionality
  4. probe in a single position over and over again
  5. """
  6. import serial
  7. import time
  8. import numpy
  9.  
  10. import commands
  11. import re
  12. import sys
  13. import math
  14.  
  15. grbl_dev = "/dev/ttyUSB0"
  16. grbl_baud = 9600
  17. grbl_serial = serial.Serial(grbl_dev, grbl_baud)
  18.  
  19. # everything in mm
  20.  
  21. probe_feed = 10
  22. probe_acceleration = 10
  23.  
  24. #z_max = 0.1
  25. #z_max = 1.0
  26. z_max = 0.0
  27. z_min = -1.0
  28. z_del = 0.01
  29.  
  30.  
  31. x_pos = 0.0
  32. y_pos = 0.0
  33.  
  34. verbose = 0
  35.  
  36.  
  37. def send_grbl_command( cmd ) :
  38.   if verbose:
  39.     print "# sending '" + cmd + "'"
  40.   grbl_serial.write(cmd + "\n")
  41.   grbl_out = grbl_serial.readline()
  42.   if verbose:
  43.     print "#  got :", grbl_out.strip()
  44.   while ( not re.search("ok", grbl_out) ):
  45.     if verbose:
  46.       print "#  got :", grbl_out.strip()
  47.     grbl_out = grbl_serial.readline()
  48.   if verbose:
  49.     print "#", grbl_out
  50.  
  51. def get_grbl_probe_state( ) :
  52.   grbl_serial.write("$S\n")
  53.   r = grbl_serial.readline()
  54.   grbl_serial.readline()
  55.   return r
  56.  
  57. def get_grbl_var_position( var_name ):
  58.   var_seen = 0
  59.   var_pos = 0.0
  60.   #grbl_serial.write("$?\n")
  61.   grbl_serial.write("?")
  62.   grbl_out = grbl_serial.readline()
  63.  
  64.   if verbose:
  65.     print "#  get_grbl_var_position(", var_name, "): got :", grbl_out.strip()
  66.  
  67.   m = re.search( "^<([^,]*),MPos:([^,]*),([^,]*),([^,]*),", grbl_out)
  68.   if ( m ):
  69.     if verbose:
  70.       print "# matched", m.group(0)
  71.     state = m.group(1)
  72.     x = float(m.group(2))
  73.     y = float(m.group(3))
  74.     z = float(m.group(4))
  75.  
  76.     if ( var_name == 'x') or ( var_name == 'X'):
  77.       return x
  78.     if ( var_name == 'y') or ( var_name == 'Y'):
  79.       return y
  80.     if ( var_name == 'z') or ( var_name == 'Z'):
  81.       return z
  82.  
  83. def wait_for_var_position( var_name, var_val ):
  84.   #sleepy = 0.05
  85.   sleepy = 1
  86.   var_epsilon = 0.001
  87.   cur_val = get_grbl_var_position( var_name )
  88.   if verbose:
  89.     print "#", str(var_val), " var_epsilon", str(var_epsilon), "cur_x", str(cur_val)
  90.   while (math.fabs(var_val - cur_val) > var_epsilon):
  91.     if verbose:
  92.       print "# cur_val", str(cur_val), ", waiting for ", var_name, str(var_val)
  93.     time.sleep(sleepy)
  94.     cur_val = get_grbl_var_position( var_name )
  95.  
  96. send_grbl_command( "" )
  97. send_grbl_command( "" )
  98. send_grbl_command( "g90" )
  99. send_grbl_command( "g21" )
  100.  
  101. send_grbl_command( "g1z" + str(z_max) )
  102. send_grbl_command( "g0 x" + str(x_pos) + " y" + str(y_pos) )
  103.  
  104. send_grbl_command( "$" )
  105.  
  106. send_grbl_command( "$23=" + str(probe_feed) )
  107. send_grbl_command( "$24=" + str(probe_acceleration) )
  108. send_grbl_command( "$25=-1" )  # z lower bound
  109. send_grbl_command( "$26=1" )   # turn on probe
  110.  
  111. if verbose:
  112.   print "# grbl setup done\n"
  113.   print "setup done\n"
  114.  
  115. get_grbl_var_position( "Z" )
  116.  
  117. height = {}
  118.  
  119. even_odd = 0
  120.  
  121.  
  122. for it in range(1000):
  123.  
  124.   time.sleep(2)
  125.  
  126.   send_grbl_command( "g1z" + str(z_max) )
  127.   wait_for_var_position("Z", z_max)
  128.   send_grbl_command( "g0 x" + str(x_pos) + " y" + str(y_pos) )
  129.   wait_for_var_position("X", x_pos)
  130.   wait_for_var_position("Y", y_pos)
  131.  
  132.   time.sleep(1)
  133.  
  134.   send_grbl_command( "$P" )
  135.  
  136.   z = get_grbl_var_position( "Z" )
  137.  
  138.   c = get_grbl_probe_state( )
  139.  
  140.   if (verbose):
  141.     print " z position: ", str(z)
  142.  
  143.  
  144.   if (z <= z_min):
  145.     sys.exit("ERROR: z_min (" + str(z_min) + ") reached")
  146.  
  147.   print str(x_pos), str(y_pos), str(z), str(c)
  148.   #print str(x_pos), str(y_pos), str(z)
  149.   sys.stdout.flush()
  150.  
  151.  
  152. send_grbl_command( "g1z" + str(z_max) )
  153. send_grbl_command( "g0x0y0" )
Advertisement
Add Comment
Please, Sign In to add comment