- GOTO SCREEN begin *>SCREEN begin - HOT KEY (10) "" INTERRUPT: GOSUB LABEL helpsys - GET NUMBER BACKGROUND STYLE SETUP: 2 - POWER RESUME ON - GOTO SCREEN startup *>SCREEN startup - PUT TEXT AT (1,5): "This program is specifically designed to" - PUT TEXT AT (4,6): "control the Parker Compumotor SX" - PUT TEXT AT (14,7): "Motor-Driver." - PUT LARGE TEXT AT (2,1): "PARKER COMPUMOTOR" - PUT LARGE TEXT AT (3,2): "SX DEMO PROGRAM" - DELAY 2000 - GOTO SCREEN testsx - LABEL initunit - COMMENT "Initialize units for DRIVE" pitch=5 dd&=onerev dscale=1 dlbl$="STEPS" vd%=10 vscale=1 vlbl$="REVS/SECOND" ascale=1 ad%=100 albl$="REVS/SEC^2" - RETURN - TITLE:::::::::: "INITIALIZE SX" :::::::::::: *>SCREEN testsx - PUT TEXT AT (2,1): "ATTEMPTING TO ESTABLISH COMMUNICATION" - PUT TEXT AT (8,2): "WITH THE SX MOTOR/DRIVE." - PUT LARGE TEXT AT (2,3): "PLEASE STAND BY..." onerev=25000 drtype=1 - GOSUB LABEL initunit - COM: INIT COM 1 ECHO 1 BAUD 96 HANDSHAKE 0 TIMEOUT 250 STRIP 1 - DELAY 750 n = 1 - LABEL comtests - COM: PUT COM 1 TEXT "1E 1K 1MN 1R" - COM: GET COM 1 TEXT stat$ if stat$ = "*R" or stat$ = "*S" then goto runsx if n = 11 then goto notalksx - CLEAR GRAPHICS SCREEN - CLEAR SCREEN - PUT LARGE TEXT AT (1,1): "DRIVE NOT RESPONDING" - PUT TEXT AT (4,4): "RETRYING CHECK-OUT TEN MORE TIMES" - PUT TEXT AT (14,6): "ATTEMPT #" - PUT NUMBER n AT (24,6) USING "##" n = n+1 - GOTO LABEL comtests - LABEL notalksx - CLEAR GRAPHICS SCREEN - CLEAR SCREEN - PUT TEXT AT (3,1): "CANNOT ESTABLISH COMMUNICATIONS WITH" - PUT TEXT AT (15,2): "MOTOR/DRIVE" - PUT TEXT AT (8,5): "RETURNING TO BASIC..." - DELAY 1000 - GOTO SCREEN errexit - LABEL runsx - COM: INIT COM 1 ECHO 1 BAUD 96 HANDSHAKE 0 TIMEOUT 1000 STRIP 1 - COM: PUT COM 1 TEXT "1SSI1 1LD3 1A100 1V10 1D25000" - COM: PUT COM 1 TEXT "1DPE1" - COM: GET COM 1 TEXT ps$ ps$=right$(ps$,11):pzero&=val(ps$) - CLEAR GRAPHICS SCREEN - GOTO SCREEN main - TITLE:::::::::: ":::::::::::::" :::::::::::: - TITLE:::::::::: "MAIN RUN LOOP" :::::::::::: - TITLE:::::::::: ":::::::::::::" :::::::::::: *>SCREEN main - PUT TEXT AT (1,3): "A-V-D CHANGE ACCEL,VEL, AND DISTANCE" - PUT TEXT AT (1,4): "UNITS CHANGE UNITS" - PUT TEXT AT (1,5): "RUN PERFORM MOVES, VIEW STATUS" - PUT TEXT AT (1,6): "SEQ DOWNLOAD AND EXECUTE A SEQUENCE" - PUT TEXT AT (1,7): "PLOT PLOT A MOVE PROFILE" - PUT LARGE TEXT AT (2,1): "SELECT A FUNCTION:" - SOFTKEY (1) "A-V-D" GOTO SCREEN avdset - SOFTKEY (2) "UNITS" GOTO SCREEN units - SOFTKEY (3) " RUN" GOTO SCREEN runscr - SOFTKEY (4) " SEQ" GOTO SCREEN sequence - SOFTKEY (5) "PLOT" GOTO SCREEN plotscr - SOFTKEY (6) "EXIT" GOTO SCREEN exit - SOFTKEY WAIT - TITLE:::::::::: "SET ACCELERATION, VELOCITY, DISTANCE, AND PITCH" :::::::::::: *>SCREEN QUICK avdset - CLEAR SCREEN - PUT TEXT AT (1,3): "ACCEL CHANGE ACCELERATION" - PUT TEXT AT (1,4): "VEL CHANGE VELOCITY" - PUT TEXT AT (1,5): "DIST CHANGE DISTANCE" - PUT TEXT AT (1,6): "PITCH CHANGE SCREW PITCH" - PUT TEXT AT (1,7): "DEFLT RESTORE SYSTEM DEFAULTS" - PUT LARGE TEXT AT (1,1): "MOTION PARAMETERS: " - SOFTKEY (1) "ACCEL" GOTO SCREEN accelset - SOFTKEY (2) " VEL" GOTO SCREEN velset - SOFTKEY (3) "DIST" GOTO SCREEN distset - SOFTKEY (4) "PITCH" GOTO SCREEN pitchset - SOFTKEY (5) "DEFLT" GOTO SCREEN defltscr - SOFTKEY (6) "EXIT" GOTO SCREEN main - SOFTKEY WAIT - TITLE:::::::::: "SET UP ACCELERATION" :::::::::::: *>SCREEN accelset - PUT TEXT AT (1,2): "ACCELERATION IN" - PUT TEXT AT (1,4): "ENTER ACCELERATION:" - PUT TEXT AT (1,7): "ENTER TO ACCEPT OR ENTER A NEW VALUE" - PUT TEXT AT (17,2): albl$ ad% = ad% / ascale - GET NUMBER ad% AT (21,4) USING "###.##" DEFAULT ad% ad% = ad% * ascale a$="1A"+str$(ad%) - COM: PUT COM 1 TEXT a$ - GOTO SCREEN avdset - TITLE:::::::::: "SET UP VELOCITY" :::::::::::: *>SCREEN velset - PUT TEXT AT (1,2): "VELOCITY IN" - PUT TEXT AT (1,4): "ENTER VELOCITY:" - PUT TEXT AT (1,7): "ENTER TO ACCEPT OR ENTER A NEW VALUE" - PUT TEXT AT (13,2): vlbl$ vd% = vd% / vscale - GET NUMBER vd% AT (21,4) USING "###.##" DEFAULT vd% vd% = vd% * vscale a$="1V"+str$(vd%) - COM: PUT COM 1 TEXT a$ - GOTO SCREEN avdset - TITLE:::::::::: "SET UP DISTANCE" :::::::::::: *>SCREEN distset - PUT TEXT AT (1,2): "DISTANCE IN" - PUT TEXT AT (1,4): "ENTER DISTANCE:" - PUT TEXT AT (1,7): "ENTER TO ACCEPT OR ENTER A NEW VALUE" - PUT TEXT AT (13,2): dlbl$ td = dd& / dscale - GET NUMBER td AT (18,4) USING "-#########.##" DEFAULT td dd& = td * dscale a$="1D"+str$(dd&) - COM: PUT COM 1 TEXT a$ - GOTO SCREEN avdset - TITLE:::::::::: "SET UP SCREW PITCH" :::::::::::: *>SCREEN pitchset - PUT TEXT AT (1,1): "Enter a screw pitch which will provide" - PUT TEXT AT (1,2): "translation between motor rotation and" - PUT TEXT AT (1,3): "linear travel." - PUT TEXT AT (1,5): "ENTER SCREW PITCH:" - PUT TEXT AT (1,7): "ENTER TO ACCEPT OR ENTER A NEW VALUE" - GET NUMBER pitch AT (20,5) USING "##.###" DEFAULT pitch - COM: PUT COM 1 TEXT a$ - GOTO SCREEN units - TITLE:::::::::: "RESTORE SYSTEM DEFAULTS" :::::::::::: *>SCREEN defltscr - GOSUB LABEL initunit - COM: PUT COM 1 TEXT "1S 1V10 1A100 1D25000" - GOTO SCREEN avdset - TITLE:::::::::: "SET DISPLAY / ENTRY UNITS" :::::::::::: *>SCREEN units - PUT TEXT AT (2,4): "LINEAR MEASURE ASSUMES A PITCH" - PUT TEXT AT (2,5): "LEAD SCREW ON A LINEAR TRANSLATION" - PUT TEXT AT (2,6): "DEVICE." - PUT LARGE TEXT AT (1,1): "SELECT MOTION UNITS-" - PUT NUMBER pitch AT (27,4) USING "##.###" - SOFTKEY (1) "STEPS" GOTO SCREEN steps - SOFTKEY (2) "MILS" GOTO SCREEN mils - SOFTKEY (3) "INCH" GOTO SCREEN inch - SOFTKEY (4) " MM" GOTO SCREEN mms - SOFTKEY (5) " UM" GOTO SCREEN ums - SOFTKEY (6) "EXIT" GOTO SCREEN main - SOFTKEY WAIT - TITLE:::::::::: "SCALE UNITS IN STEPS" :::::::::::: *>SCREEN steps - PUT LARGE TEXT AT (1,1): "UNITS ARE NOW SCALED" - PUT LARGE TEXT AT (9,2): "IN" - PUT HUGE TEXT AT (3,2): "STEPS" dscale = 1 dlbl$ = "STEPS" vscale = 1 vlbl$ = "REVS/SECOND" ascale = 1 albl$ = "REVS/SEC^2" - DELAY 1000 - GOTO SCREEN main - TITLE:::::::::: "SCALE UNITS IN MILS" :::::::::::: *>SCREEN mils - PUT LARGE TEXT AT (1,1): "UNITS ARE NOW SCALED" - PUT LARGE TEXT AT (9,2): "IN" - PUT HUGE TEXT AT (4,2): "MILS" dscale = onerev*pitch/1000 dlbl$ = "MILS" vscale = pitch vlbl$ = "INCHES/SECOND" ascale = pitch albl$ = "INCHES/SEC^2" - DELAY 1000 - GOTO SCREEN main - TITLE:::::::::: "SCALE UNITS IN INCHES" :::::::::::: *>SCREEN inch - PUT LARGE TEXT AT (1,1): "UNITS ARE NOW SCALED" - PUT LARGE TEXT AT (10,2): "IN" - PUT HUGE TEXT AT (3,2): "INCHES" dscale = onerev*pitch dlbl$ = "INCHES" vscale = pitch vlbl$ = "INCHES/SECOND" ascale = pitch albl$ = "INCHES/SEC^2" - DELAY 1000 - GOTO SCREEN main - TITLE:::::::::: "SCALE UNITS IN MILLIMETERS" :::::::::::: *>SCREEN mms - PUT LARGE TEXT AT (1,1): "UNITS ARE NOW SCALED" - PUT LARGE TEXT AT (10,2): "IN" - PUT HUGE TEXT AT (1,2): "MILLIMETER" dscale = onerev*pitch/25.4 dlbl$ = "MM" vscale = 25.4*pitch vlbl$ = "MM/SECOND" ascale = 25.4*pitch albl$ = "MM/SEC^2" - DELAY 1000 - GOTO SCREEN main - TITLE:::::::::: "SCALE UNITS IN MICRONS" :::::::::::: *>SCREEN ums - PUT LARGE TEXT AT (1,1): "UNITS ARE NOW SCALED" - PUT LARGE TEXT AT (9,2): "IN" - PUT HUGE TEXT AT (2,2): "MICRONS" dscale = onerev*pitch/25400 dlbl$ = "MICRONS" vscale = 25400*pitch vlbl$ = "MICRONS/SECOND" ascale = 25400*pitch albl$ = "MICRONS/SEC^2" - DELAY 1000 - GOTO SCREEN main - TITLE:::::::::: "STATUS AND MOVE SYSTEM" :::::::::::: *>SCREEN runscr - CLEAR SCREEN - PUT TEXT AT (2,4): "POSITION:" - PUT TEXT AT (4,5): "STATUS:" - PUT TEXT AT (4,6): "LIMITS:" - PUT TEXT AT (4,7): "INPUTS:" - PUT LARGE TEXT AT (2,1): "RUN SX MOTOR/DRIVE" - PUT TEXT AT (24,4): dlbl$ gostr$="1S 1A"+str$(ad%)+" 1V"+str$(vd%)+" 1D"+str$(dd&) - COM: PUT COM 1 TEXT gostr$ - SOFTKEY (1) "ZERO" GOTO SCREEN zeroscr - SOFTKEY (2) "MOVE" GOTO SCREEN starts - SOFTKEY (3) "STOP" GOTO SCREEN stops - SOFTKEY (4) "EDIT" GOTO SCREEN editscr - SOFTKEY (5) "PLOT" GOTO SCREEN plotrun - SOFTKEY (6) "EXIT" GOTO SCREEN main 'hard coded for improved speed... - LABEL statloop print#1,"1DPE1":line input#1,e$:line input#1,ps$:ps$=right$(ps$,11) px&=val(ps$)-pzero&:p=px&:px&=px&/dscale:p=p/dscale if dscale= 1 then pos11,4:print using"-###########";px&; if dscale<>1 then pos11,4:print using"-#######.###";p; print#1,"1R":line input#1,e$:line input#1,stat$ pos12,5:if stat$="*R"then print"READY "; if stat$="*S"then print"READY, ATTENTION NEEDED"; if stat$="*B"then print"BUSY "; if stat$="*C"then print"BUSY, ATTENTION NEEDED "; if stat$="*Z"then print"BUSY, AUTORUN MODE "; print#1,"1IS":line input#1,e$:line input#1,iostat$ lim$="" if mid$(iostat$,4,1)="1" then lim$="CW" if mid$(iostat$,5,1)="1" then lim$=lim$+"CCW" if lim$<>"" then lim$="LIMIT(S) ACITIVE: "+lim$ if lim$="" then lim$= "NO LIMITS ACTIVE " pos12,6:print lim$; iobits$=mid$(iostat$,7,4)+mid$(iostat$,12,4) pos12,7:print iobits$; skey%=inkey():if skey%=0then goto statloop if skey%=15104then goto zeroscr if skey%=15360then goto starts if skey%=15616then goto stops if skey%=15872then goto editscr if skey%=16128then goto plotrun if skey%=16384then goto main - GOTO LABEL statloop - LABEL zeroscr print#1,"1DPE1":line input#1,e$:line input#1,ps$:ps$=right$(ps$,11) pzero&=val(ps$) - GOTO LABEL statloop - TITLE:::::::::: "START MOTION" :::::::::::: - LABEL starts print#1,"1G":line input#1,e$ - GOTO LABEL statloop - TITLE:::::::::: "STOP MOTION" :::::::::::: - LABEL stops print#1,"1S":line input#1,e$ - GOTO LABEL statloop - TITLE:::::::::: "EDIT MOVE DATA" :::::::::::: *>SCREEN QUICK editscr - PUT LARGE TEXT AT (1,1): " EDIT-PRESS ENTER " - CLEAR SCREEN - PUT TEXT AT (1,4): "MOVE DIST:" - PUT TEXT AT (2,5): "VELOCITY:" - PUT TEXT AT (5,6): "ACCEL:" - PUT TEXT AT (26,4): dlbl$ - PUT TEXT AT (26,5): vlbl$ - PUT TEXT AT (26,6): albl$ td = dd& / dscale - PUT NUMBER td AT (12,4) USING "-#########.##" dd& = td * dscale a$="1D"+str$(dd&) - COM: PUT COM 1 TEXT a$ vd% = vd% / vscale - PUT NUMBER vd% AT (19,5) USING "###.##" vd% = vd% * vscale a$="1V"+str$(vd%) - COM: PUT COM 1 TEXT a$ ad% = ad% / ascale - PUT NUMBER ad% AT (19,6) USING "###.##" ad% = ad% * ascale a$="1A"+str$(ad%) - COM: PUT COM 1 TEXT a$ td = dd& / dscale - GET NUMBER td AT (12,4) USING "-#########.##" DEFAULT td dd& = td * dscale a$="1D"+str$(dd&) - COM: PUT COM 1 TEXT a$ vd% = vd% / vscale - GET NUMBER vd% AT (19,5) USING "###.##" DEFAULT vd% vd% = vd% * vscale a$="1V"+str$(vd%) - COM: PUT COM 1 TEXT a$ ad% = ad% / ascale - GET NUMBER ad% AT (19,6) USING "###.##" DEFAULT ad% ad% = ad% * ascale a$="1A"+str$(ad%) - COM: PUT COM 1 TEXT a$ - GOTO SCREEN runscr - TITLE:::::::::: "DOWNLOAD AND RUN A SEQUENCE" :::::::::::: *>SCREEN QUICK sequence - CLEAR SCREEN - PUT TEXT AT (3,3): "A SEQUENCE TO THE MOTION CONTROLLER" - PUT LARGE TEXT AT (1,1): " TRANSMITTING... " i=1 - LABEL seq1 - COM: PUT COM 1 TEXT "1R" - COM: GET COM 1 TEXT stat$ if i=2 then goto seqerr i=i+1 if stat$ <> "*R" and stat$ <> "*S" then goto seq1 seq$="1A100 1V20 1D25000 1G 1H+ 1G 1V5 1H- 1G 1V10 1H+ 1G" - COM: PUT COM 1 TEXT "1XE1 1XD1" - COM: PUT COM 1 TEXT seq$ - COM: PUT COM 1 TEXT "1XT" n=1 - LABEL sxseq1 - COM: PUT COM 1 TEXT "1R" - COM: GET COM 1 TEXT stat$ delay 10 if n=10 then goto seqerr n=n+1 if stat$ <> "*R" then goto sxseq1 - PUT TEXT AT (11,4): "SEQUENCE CONTENTS:" - PUT TEXT AT (2,5): seq$ - PUT TEXT AT (3,7): "RUNNING SEQUENCE TEN TIMES...." - COM: PUT COM 1 TEXT "1XR1 1XR1 1XR1 1XR1 1XR1 1XR1 1XR1 1XR1 1XR1 1XR1" i=1 - LABEL seqdone - COM: PUT COM 1 TEXT "1R" - COM: GET COM 1 TEXT stat$ if stat$ <> "*R" and stat$ <> "*S" then goto seqdone - GOTO SCREEN main - TITLE:::::::::: "SEQUENCE ERROR" :::::::::::: - LABEL seqerr - CLEAR GRAPHICS SCREEN - CLEAR SCREEN - KEY OFF - PUT LARGE TEXT AT (1,1): "CAN'T SEND SEQUENCE" - PUT TEXT AT (2,5): "RETURNING TO MOTION SELECTION MENU...." - DELAY 1500 - CLEAR GRAPHICS SCREEN - GOTO SCREEN main - TITLE:::::::::: "START MOTION" :::::::::::: *>SCREEN QUICK start - CLEAR SCREEN - PUT LARGE TEXT AT (1,1): " MOTION HAS BEGUN " - COM: PUT COM 1 TEXT "1G" - DELAY 250 - GOTO SCREEN main - TITLE:::::::::: "KILL MOTION" :::::::::::: *>SCREEN QUICK kill - CLEAR SCREEN - PUT LARGE TEXT AT (1,1): " STOPPING MOTION " - COM: PUT COM 1 TEXT "1S" - DELAY 500 - GOTO SCREEN main - LABEL helpsys - HELP: CLEAR HELP SCREEN - HELP: PUT HELP TEXT AT 1 : "This program demonstrates the use of" - HELP: PUT HELP TEXT AT 2 : "the MODEL 1000 and the PARKER COMPUMOTOR" - HELP: PUT HELP TEXT AT 3 : "SX MOTOR/DRIVE. You should first" - HELP: PUT HELP TEXT AT 4 : "hook up the MODEL 1000 to the motor" - HELP: PUT HELP TEXT AT 5 : "drive by following the instructions in" - HELP: PUT HELP TEXT AT 6 : "Section 5.6.1 of the MODEL 1000 manual." - HELP: PUT HELP TEXT AT 7 : "COM 1 on the MODEL 1000 is connected to" - HELP: PUT HELP TEXT AT 8 : "----- PRESS ANY KEY FOR MORE HELP -----" - HELP: DISPLAY HELP TEXT AND WAIT FOR KEY - HELP: CLEAR HELP SCREEN - HELP: PUT HELP TEXT AT 1 : "the RS232 port on the motor/drive. A" - HELP: PUT HELP TEXT AT 2 : "cable is available from EASON" - HELP: PUT HELP TEXT AT 3 : "TECHNOLOGY. Please call us if you need" - HELP: PUT HELP TEXT AT 4 : "further assistance." - HELP: PUT HELP TEXT AT 5 : " (707)-433-2854" - HELP: PUT HELP TEXT AT 6 : " (707)-433-3706 (FAX)" - HELP: PUT HELP TEXT AT 8 : "--PRESS ANY KEY TO RESUME THE PROGRAM--" - HELP: DISPLAY HELP TEXT AND WAIT FOR KEY - HOT KEY (10) RESUME - RETURN - TITLE:::::::::: "RETURN TO BASIC" :::::::::::: *>SCREEN exit - PUT LARGE TEXT AT (1,1): "THANK YOU FOR USING" - PUT LARGE TEXT AT (8,2): "EASON" - PUT LARGE TEXT AT (5,3): "TECHNOLOGY" pos 40,7 - DELAY 2500 END *>SCREEN errexit - PUT TEXT AT (1,1): "The Model 1000 was unable to communicate" - PUT TEXT AT (1,2): "with the Parker Compumotor SX Motor-" - PUT TEXT AT (1,3): "Drive. Check your connections. Do you" - PUT TEXT AT (1,4): "have the demo cable (9-pin to bare wire)" - PUT TEXT AT (1,5): "connected to COM1 on the Model 1000 and" - PUT TEXT AT (1,6): "the SX Motor-Driver RS232 connector? If" - PUT TEXT AT (1,7): "you have questions about connections," - SOFTKEY (1) "MORE" GOTO SCREEN errmore - SOFTKEY WAIT *>SCREEN errmore - PUT TEXT AT (1,1): "refer to Section 5.6.1 of the Model 1000" - PUT TEXT AT (1,2): "manual. If you need further assistance" - PUT TEXT AT (1,3): "contact Eason Technology at:" - PUT TEXT AT (9,5): "PHONE: (707) 433-2854" - PUT TEXT AT (11,6): "FAX: (707) 433-3706" - SOFTKEY (1) "MORE" GOTO SCREEN exit - SOFTKEY WAIT - TITLE:::::::::: "MOVE PROFILE PLOT ROUTINE" :::::::::::: *>SCREEN plotscr - PUT TEXT AT (19,1): "MOVE TIME: MSEC" - SOFTKEY (6) "EXIT" GOTO SCREEN main - GOSUB LABEL plotsub - PUT NUMBER total AT (30,1) USING "######" - SOFTKEY WAIT *>SCREEN plotrun - PUT TEXT AT (19,1): "MOVE TIME: MSEC" - SOFTKEY (6) "EXIT" GOTO SCREEN runscr - GOSUB LABEL plotsub - PUT NUMBER total AT (30,1) USING "######" - SOFTKEY WAIT - TITLE:::::::::: "MOVE PROFILE PLOT SUBROUTINE" :::::::::::: - LABEL plotsub - PUT TEXT AT (1,3): "V" - PUT TEXT AT (1,4): "E" - PUT TEXT AT (1,5): "L" - PUT TEXT AT (35,4): "TIME->" call line(8,0,8,63,1):call line(8,32,239,32,1) ad=ad%*25000:vd=vd%*25000:dd=abs(dd&) if dd=0 then call line(8,32,239,32,1):return tvmax=(vd/ad)*1000 tvp=sqr((2*dd)/ad) vp=2*dd/tvp if vp76 then tvmax=76 if tdx>76 then tdx=76 if dd&<0 then goto negtrap call line(8,32,tvmax+8,8,1):call line(,,tvmax+tdx+8,8,1) call line(,,(2*tvmax)+tdx+8,32,1) return - LABEL negtrap call line(8,32,tvmax+8,54,1):call line(,,tvmax+tdx+8,54,1) call line(,,(2*tvmax)+tdx+m,32,1) return - LABEL triangle total=tvp*2 tvp=tvp*1000 if tvp>76 then tvp=76 if dd&<0 then goto negtri call line(8,32,tvp+8,8,1):call line(,,tvp*2+8,32,1):return - LABEL negtri call line(8,32,tvp+8,54,1):call line(,,tvp*2+8,32,1):return return - RETURN - END OF PSEUDOCODE