Serve per trovare il centro di un tondo pieno. Quando lo lancio mi dà errore...
Probabilmente la soluzione sta nelle prime quattro righe qui sotto (lo script è sicuramente funzionante). Non capisco cosa vuol dire che devo linkare un bottone... Poi ancora non capisco cosa devo "engaggiare"...
Grazie a chiunque avrà la cortesia di rispondermi. Carlo
This is the "Shaft" extract To run it you have to link to a user button or include in yours other functions.
Take care, when you run the shaft procedure, a check is made to be sure that the gauge is not already engaged, than to continue the operation you must engage it (ground it like a push button).
'find shaft center and calculate diameter Sub Shaft Option Explicit
Dim TS As Single Dim FeedCurrent, Xcurrent, Ycurrent , Zcurrent As Single Dim XCenter, YCenter, XPos1, XPos2, YPos1, YPos2, XNew, YNew, ZNew, ZPos1,ZSafe As Single Dim responce As Integer Dim Max_move , Shaft_D As Double
Const ZClear = 10 'Safe Z Const XMove = 4 'Max probe search Const YMove = 4 'Max probe search Const FSlow = 50 'edje search speed Const Tout = 15 'Time out in seconds
Const Probe_Radius = 3.15 '
If GetOemLed (825) <> 0 Then 'Check to see if the probe is already grounded or faulty Code "(Probe grounded, check connection and try again)" responce = MsgBox ("Probe grounded, check connection and try again" , 0 , "Probe **ERROR**" ) Exit Sub End If
Rem VBScript To shaft center
Max_move = Question ("Enter max shaft diameter, min value 1 mm") If Max_move < 1 Then Code "(Diameter < 1, Function abort)" Exit Sub End If
If Touch ("(Touch the Probe to start Shaft center function)") Then Exit Sub
Code "F" & FSlow
Rem Probe up
YNew = YCurrent + Max_move Code "G31 Y" &YNew While IsMoving() sleep 100 Wend YPos1 = GetVar(2001)
YNew = YPos1 - 0.5 Code "G0 Y" &YNew ZNew = ZCurrent + ZClear Code "G0 Z" &ZNew YNew = YPos1 + Max_move + (Probe_Radius * 2) + 2 Code "G0 Y" &YNew Code "G0 Z" &ZCurrent
Rem Probe down
YNew = YNew - Max_move - Probe_Radius Code "G31 Y" &YNew While IsMoving() sleep 100 Wend YPos2 = GetVar(2001)
YNew = YPos2 + 0.5 Code "G0 Y" &YNew ZNew = ZCurrent + ZClear Code "G0 Z" &ZNew YCenter = (YPos1 + YPos2) / 2 Code "G0 Y" &YCenter
Rem Probe Left
XNew = XCurrent - Max_move - (Probe_Radius * 2) 'probe to left Code "G0 X" &XNew Code "G0 Z" &ZCurrent XNew = XNew + Max_move + Probe_Radius Code "G31 X" &XNew While IsMoving() 'wait for the move to finish sleep 100 Wend XPos1 = GetVar(2000) 'get the probe touch location
XNew = XPos1 - 0.5 Code "G0 X" &XNew ZNew = ZCurrent + ZClear Code "G0 Z" &ZNew
Rem Probe Right
XNew = XPos1 + Max_move + (Probe_Radius * 2) + 2 'probe to right Code "G0 X" &XNew Code "G0 Z" &ZCurrent XNew = XNew - Max_move - Probe_Radius Code "G31 X" &XNew While IsMoving() sleep 100 Wend XPos2 = GetVar(2000)
XNew = XPos2 + 0.5 Code "G0 X" &XNew ZNew = ZCurrent + ZClear Code "G0 Z" &ZNew XCenter = (XPos1 + XPos2) / 2 'center is midway between XPos1 and XPos2 Code "G0 X" &XCenter 'rapid move to the x center location While IsMoving () sleep 100 Wend
Shaft_D = (XPos2 - XPos1) - (2 * Probe_Radius) Code "(Shaft diameter = " & Shaft_D & " mm)" Code "F" &FeedCurrent 'restore starting feed rate End Sub
'Wait for a probe touch - untouch Function Touch (Tshow As String) As Integer
Code Tshow
'wait probe touch TS = Timer Do If Timer - TS > Tout Then Code "(Function Time Out, no probe touch detected)" responce = MsgBox ("Function Time Out, no probe touch detected" , 0 , "Probe **ERROR**" ) Touch = 1 Exit Function End If sleep 100 Loop Until GetOemLed (825) <> 0
'short delay sleep 1000 'let user to untouch probe
'Wait for probe untouch TS = Timer Do If Timer - TS > 2 Then Code "(Function Time Out, continuous probe touch detected)" responce = MsgBox ("Function Time Out, continuous probe touch detected" , 0 , "Probe **ERROR**" ) Touch = 1 Exit Function End If sleep 100 Loop Until GetOemLed (825) = 0 Touch = 0 End Function
|