Code: Select all
EnableExplicit
Import ""
PB_Gadget_SendGadgetCommand(hWnd, EventType)
EndImport
Define comport.s, fname.s, ligne.s, a.s, b.s
Global xcur.f, ycur.f
Define.l Event, WindowID, GadgetID, EventType, EventMenu
Global Dim buftx.a(100)
Global Dim bufrx.a(100)
Global nrecv.a
Declare wait(x.a, str.s)
Declare sendincx(x.a)
Declare senddecx(x.a)
Declare sendincy(x.a)
Declare senddecy(x.a)
Declare sendincz(x.a)
Declare senddecz(x.a)
Declare sendincxl(x.u)
Declare senddecxl(x.u)
Declare sendincyl(x.u)
Declare senddecyl(x.u)
Declare sendinczl(x.u)
Declare senddeczl(x.u)
Declare gotoxy(x.f, y.f)
If Not OpenPreferences("config.txt")
MessageRequester("Error","config.txt not found",#PB_MessageRequester_Ok)
End
EndIf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
comport= ReadPreferenceString("COMPORT","comx")
If Not OpenSerialPort(0, comport, 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
MessageRequester("Error","Can't open Serial Port",#PB_MessageRequester_Ok)
End
EndIf
SerialPortTimeouts(0,100,100,10,10,100)
SetGadgetFont(#PB_Default, LoadFont(0, "Arial", 11))
OpenWindow(0, 100, 100, 800,600,"ROBOT DRILL 2014",#PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_SystemMenu)
ButtonGadget(0,50, 50,100,30,"AUTO", #PB_Button_Toggle)
ButtonGadget(1,200, 50,150,30,"GOTO ORIGIN")
TextGadget(2,400, 50,150,30,"")
ButtonGadget(10,50, 100,100,30,"X ++")
ButtonGadget(11,150, 100,100,30,"X - -")
ButtonGadget(12,50, 150,100,30,"Y ++")
ButtonGadget(13,150, 150,100,30,"Y - -")
ButtonGadget(14,50, 200,100,30,"Z ++")
ButtonGadget(15,150, 200,100,30,"Z - -")
TextGadget(#PB_Any, 275,105,100,30,"STEPs X:")
TextGadget(#PB_Any, 275,155,100,30,"STEPs Y:")
TextGadget(#PB_Any, 275,205,100,30,"STEPs Z:")
StringGadget(20,355,100,50,25,"100")
StringGadget(21,355,150,50,25,"100")
StringGadget(22,355,200,50,25,"100")
ButtonGadget(16,50, 250,200,30,"LOAD DRILL DATA")
PB_Gadget_SendGadgetCommand(GadgetID(0), #PB_EventType_LeftClick)
Repeat
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
Select Event
Case #PB_Event_Gadget ;Event = WaitWindowEvent()
If GadgetID=0
If GetGadgetState(0)=1
SetGadgetText(0,"MANUAL")
DisableGadget(10,0)
DisableGadget(11,0)
DisableGadget(12,0)
DisableGadget(13,0)
DisableGadget(14,0)
DisableGadget(15,0)
DisableGadget(16,0)
DisableGadget(20,0)
DisableGadget(21,0)
DisableGadget(22,0)
Else
SetGadgetText(0,"AUTO")
DisableGadget(10,1)
DisableGadget(11,1)
DisableGadget(12,1)
DisableGadget(13,1)
DisableGadget(14,1)
DisableGadget(15,1)
DisableGadget(16,1)
DisableGadget(20,1)
DisableGadget(21,1)
DisableGadget(22,1)
EndIf
ElseIf GadgetID=10
sendincxl(Val(GetGadgetText(20)))
ElseIf GadgetID=11
senddecxl(Val(GetGadgetText(20)))
ElseIf GadgetID=12
sendincyl(Val(GetGadgetText(21)))
ElseIf GadgetID=13
senddecyl(Val(GetGadgetText(21)))
ElseIf GadgetID=14
sendinczl(Val(GetGadgetText(22)))
ElseIf GadgetID=15
senddeczl(Val(GetGadgetText(22)))
ElseIf GadgetID=16
fname = OpenFileRequester("Drill data file", "drill_data.dri", "Drill (*.dri)|*.dri", 0)
SetGadgetText(2,"Waiting origin")
Delay(100)
buftx(0)= %11000000
WriteSerialPortData(0,@buftx(),1)
xcur=0
ycur=0
wait($39,"origin reached")
ReadFile(0,fname)
ligne=ReadString(0)
a=StringField(ligne, 1, " ")
b=StringField(ligne, 3, " ")
sendincz(100)
gotoxy(Val(a),0)
gotoxy(Val(a),Val(b))
gotoxy(0,Val(b))
gotoxy(0,0)
senddecz(100)
While Not Eof(0)
ligne=ReadString(0)
a=StringField(ligne, 1, " ")
b=StringField(ligne, 3, " ")
gotoxy(Val(a),Val(b))
sendincz(100)
senddecz(100)
Wend
SetGadgetText(2,"End")
buftx(0)= %11000001
WriteSerialPortData(0,@buftx(),1)
ElseIf GadgetID=1
SetGadgetText(2,"Waiting origin")
Delay(100)
buftx(0)= %11000000
WriteSerialPortData(0,@buftx(),1)
xcur=0
ycur=0
wait($39,"origin reached")
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow ; End of the event loop
Procedure wait(x.a, str.s)
Repeat
nrecv=AvailableSerialPortInput(0)
If nrecv <> 0
ReadSerialPortData(0,@bufrx(),1)
If bufrx(0)=x
SetGadgetText(2,str)
Beep_(500,300)
Break
EndIf
EndIf
Delay(100)
ForEver
EndProcedure
Procedure sendincx(x.a)
buftx(0)= %10000001
buftx(1)=x
WriteSerialPortData(0,@buftx(),2)
SetGadgetText(2,"Waiting inc x")
wait($31,"inc x reached")
EndProcedure
Procedure senddecx(x.a)
buftx(0)= %10000010
buftx(1)=x
WriteSerialPortData(0,@buftx(),2)
SetGadgetText(2,"Waiting dec x")
wait($32,"dec x reached")
EndProcedure
Procedure sendincy(x.a)
buftx(0)= %10000100
buftx(1)=x
WriteSerialPortData(0,@buftx(),2)
SetGadgetText(2,"Waiting inc y")
wait($33,"inc y reached")
EndProcedure
Procedure senddecy(x.a)
buftx(0)= %10001000
buftx(1)=x
WriteSerialPortData(0,@buftx(),2)
SetGadgetText(2,"Waiting dec y")
wait($34,"dec y reached")
EndProcedure
Procedure sendincz(x.a)
buftx(0)= %10010000
buftx(1)=x
WriteSerialPortData(0,@buftx(),2)
SetGadgetText(2,"Waiting inc z")
wait($35,"inc z reached")
EndProcedure
Procedure senddecz(x.a)
buftx(0)= %10100000
buftx(1)=x
WriteSerialPortData(0,@buftx(),2)
SetGadgetText(2,"Waiting dec z")
wait($36,"dec z reached")
EndProcedure
Procedure sendincxl(x.u) ; x en 0.1 mm
Define i.a, q.a, r.a
x=4*x
q=0
r=x
If x> 125
q=x/125
r= x % 125
EndIf
Debug "x="+Str(x)
Debug "incx q="+Str(q)
Debug "incx r="+Str(r)
For i=1 To q
sendincx(125)
Next
If r <> 0 : sendincx(r) : EndIf
EndProcedure
Procedure senddecxl(x.u)
Define i.a, q.a, r.a
x=4*x
q=0
r=x
If x> 125
q=x/125
r= x % 125
EndIf
Debug "x="+Str(x)
Debug "decx q="+Str(q)
Debug "decx r="+Str(r)
For i=1 To q
senddecx(125)
Next
If r <> 0 : senddecx(r) : EndIf
EndProcedure
Procedure sendincyl(x.u)
Define i.a, q.a, r.a
x=4*x
q=0
r=x
If x> 125
q=x/125
r= x % 125
EndIf
Debug "y="+Str(x)
Debug "incy q="+Str(q)
Debug "incy r="+Str(r)
For i=1 To q
sendincy(125)
Next
If r <> 0 : sendincy(r) : EndIf
EndProcedure
Procedure senddecyl(x.u)
Define i.a, q.a, r.a
x=4*x
q=0
r=x
If x> 125
q=x/125
r= x % 125
EndIf
Debug "y="+Str(x)
Debug "decy q="+Str(q)
Debug "decy r="+Str(r)
For i=1 To q
senddecy(125)
Next
If r <> 0 : senddecy(r) : EndIf
EndProcedure
Procedure sendinczl(x.u)
Define i.a, q.a, r.a
x=4*x
q=0
r=x
If x> 125
q=x/125
r= x % 125
EndIf
Debug "z="+Str(x)
Debug "incz q="+Str(q)
Debug "incz r="+Str(r)
For i=1 To q
sendincz(125)
Next
If r <> 0 : sendincz(r) : EndIf
EndProcedure
Procedure senddeczl(x.u)
Define i.a, q.a, r.a
x=4*x
q=0
r=x
If x> 125
q=x/125
r= x % 125
EndIf
Debug "z="+Str(x)
Debug "decz q="+Str(q)
Debug "decz r="+Str(r)
For i=1 To q
senddecz(125)
Next
If r <> 0 : senddecz(r) : EndIf
EndProcedure
Procedure gotoxy(x.f, y.f)
Define dx.f, dy.f
dx=x-xcur
dy=y-ycur
Debug "dx="+Str(dx)
Debug "dy="+Str(dy)
If dx > 0
sendincxl(dx*10)
ElseIf dx < 0
senddecxl(-dx*10)
EndIf
If dy > 0
sendincyl(dy*10)
ElseIf dy < 0
senddecyl(-dy*10)
EndIf
xcur=x
ycur=y
EndProcedure