'TRAITEMENT DE SURFACE PAR BOMBARDEMENT IONIQUE 'Soci‚t‚ IBS 'Moteur … courant continu … aimants permanents '********************** Programme principal ****************************** '********************** d‚claration des subs ***************************** DECLARE SUB ecrandef () DECLARE SUB erreurf () DECLARE SUB info () DECLARE SUB erreur () DECLARE SUB echelle () DECLARE SUB transmission () DECLARE SUB parametre () DECLARE SUB nouveau () DECLARE SUB lecture () DECLARE SUB sauvegarde () DECLARE SUB degres () DECLARE SUB page () DECLARE SUB table () DECLARE SUB tableau () DECLARE SUB courbe () DECLARE SUB modification () DECLARE SUB utilisation () '*********** dimensionnement des tableaux ******************************** DIM SHARED a(180) DIM SHARED x(180) DIM SHARED y(180) DIM SHARED u(180) DIM SHARED b(180) '******************** Contr“le d'erreurs ********************************* debut: ON ERROR GOTO dsk '********************* ‚cran de pr‚sentation ***************************** CALL ecrandef COLOR 12: LOCATE 4, 15: PRINT "TRAITEMENT DE SURFACE LYCEE ARTAUD - SOCIETE IBS" COLOR 11: LOCATE 9, 10: PRINT "(U) Utilisation d'un programme " LOCATE 11, 10: PRINT "(M) Modification d'un programme " LOCATE 13, 10: PRINT "(C) Cr‚ation d'un programme " LOCATE 17, 10: PRINT "(I) Informations" LOCATE 15, 10: PRINT "(Q) Retour au dos " LOCATE 22, 15: PRINT "Choix ? " '********************** tests de touches ********************************* k$ = "" aink: k$ = INKEY$ IF k$ = "U" OR k$ = "u" THEN CALL utilisation: GOTO debut IF k$ = "M" OR k$ = "m" THEN CALL modification: GOTO debut IF k$ = "C" OR k$ = "c" THEN COLOR 15: CALL tableau: CALL sauvegarde: GOTO debut IF k$ = "I" OR k$ = "i" THEN CALL info: GOTO debut IF k$ = "Q" OR k$ = "q" THEN SYSTEM IF k$ = "" THEN GOTO aink ELSE GOTO aink1 aink1: PLAY "l16cde" GOTO aink '****** traitement des erreurs d'unit‚ de disquette et fichiers ********* dsk: x = ERR: PRINT x IF x = 53 THEN CALL erreurf IF x = 71 THEN CALL erreur RESUME debut SUB courbe '******************** Edition de la courbe *********************** CLS 0 SCREEN 12 VIEW PRINT 1 TO 27 VIEW (20, 20)-(639, 400) CALL echelle VIEW (60, 50)-(600, 400) FOR i = 1 TO 150 r = (i - 1) * 3.62 x = i * 3.62 y = 300 - a(i) * .33 z = 300 - a(i - 1) * .33 PSET (x, y) LINE (r, z)-(x, y), 12 NEXT i COLOR 15: LOCATE 28, 15: PRINT "Appuyez sur une touche pour quitter" LOCATE 5, 25: PRINT "Courbe de Vitesse tr/mn = f(degr‚s)" DO WHILE INKEY$ = "" LOOP SCREEN 9 END SUB SUB degres '************* Param‚trage des diff‚rents degr‚s et affichage **** VIEW PRINT 1 TO 24 VIEW (1, 1)-(638, 348), 1, 10 VIEW (0, 4)-(639, 197), 0, 10 VIEW (20, 280)-(618, 328), 0, 10 i = 3: j = 1 FOR k = 0 TO 270 STEP 30 LOCATE i, j: PRINT k i = i + 1 NEXT k i = 2: j = 6 FOR k = 0 TO 28 STEP 2 LOCATE i, j: PRINT k j = j + 5 NEXT k END SUB SUB echelle '*************** Echelle de la courbe *************************** CLS SCREEN 12 VIEW (50, 50)-(639, 400) VIEW PRINT 1 TO 29 COLOR 11 xi = 0 FOR o = 22.5 TO 10 STEP -2 LOCATE o, 4: PRINT xi xi = xi + 100 NEXT o yi = 0 FOR o = 8 TO 75 STEP 6.5 LOCATE 24, o: PRINT yi yi = yi + 30 NEXT o LINE (10, 60)-(15, 65), 7 LINE (10, 60)-(5, 65), 7 LINE (595, 335)-(600, 340), 7 LINE (600, 340)-(605, 175), 7 LINE (583, 295)-(588, 300), 7 LINE (583, 305)-(588, 300), 7 LINE (10, 60)-(10, 300), 7 LINE (10, 300)-(600, 300), 7 END SUB SUB ecrandef CLS SCREEN 9 VIEW (1, 1)-(638, 348), 1, 10 VIEW (20, 20)-(618, 70), 0, 10 VIEW (20, 90)-(618, 260), 0, 10 VIEW (20, 280)-(618, 328), 0, 10 VIEW PRINT 1 TO 25 END SUB SUB erreur '***** Traitement des erreurs de l'unit‚ de disquettes *********** VIEW (20, 280)-(618, 328), 0, 10 LOCATE 22, 28: PRINT "Lecteur non prˆt" LOCATE 23, 25: PRINT "Appuyez sur une touche" CLOSE DO WHILE INKEY$ = "" LOOP CLS 2 x = 0 END SUB SUB erreurf '************* Traitement des erreurs des noms de fichiers ****** VIEW (20, 280)-(618, 328), 0, 10 LOCATE 22, 28: PRINT "Fichier non trouv‚" LOCATE 23, 25: PRINT "Appuyez sur une touche" CLOSE DO WHILE INKEY$ = "" LOOP CLS 2 x = 0 END SUB SUB info 99 : CALL page LOCATE 6, 1 PRINT TAB(12); "La soci‚t‚ Ion Beam Service entend d‚velopper une nouvelle activit‚." PRINT TAB(6); "Il s'agit de r‚aliser un traitement de surface par bombardement " PRINT TAB(6); "ionique d'azote d'une prothŠse de genoux en titane, afin de renforcer" PRINT TAB(6); "son ‚tat de surface et d'augmenter sa dur‚e de vie. Les prothŠses " PRINT TAB(6); "seront mont‚es sur un support, suivant un axe de r‚volution, de fa‡on" PRINT TAB(6); "… ˆtre trait‚es deux par deux.": PRINT LOCATE 15, 1: PRINT TAB(12); "Le substrat en titane doit ˆtre pr‚sent‚ au faisceau incident," PRINT TAB(6); "de fa‡on … ce que le d‚pot ionique soit homogŠne. La vitesse de rotation" PRINT TAB(6); "de l'axe doit donc pouvoir varier sur un tour, en fonction de la position" PRINT TAB(6); "de la piŠce. Une variation tous les 2 degr‚s est sufisante." 100 : c$ = INKEY$ IF c$ = "q" OR c$ = "Q" THEN GOTO 1000 IF c$ = "s" OR c$ = "S" THEN GOTO 101 GOTO 100 101 : CALL page LOCATE 6, 1 PRINT TAB(12); "L'‚quipement doit aussi comporter une d‚tection de la position z‚ro" PRINT TAB(6); "pour le calage de la piŠce, ainsi qu'un dispositif permettant de d‚tecter" PRINT TAB(6); "l'absence de rotation et de couper le faisceau.": PRINT PRINT TAB(12); "La vitesse instantann‚e sera transmise … l'actionneur … partir d'un " PRINT TAB(6); "poste de commande du type compatible PC, via une liaison s‚rie. ": PRINT PRINT TAB(12); "Les don‚es position/vitesse seront introduites sous forme de table" PRINT TAB(6); "( 180 valeurs )." 102 : c$ = INKEY$ IF c$ = "q" OR c$ = "Q" THEN GOTO 1000 IF c$ = "s" OR c$ = "S" THEN GOTO 103 IF c$ = "p" OR c$ = "P" THEN GOTO 99 GOTO 102 103 : CALL page LOCATE 6, 1 PRINT TAB(6); "Caract‚ristiques de la charge:": PRINT : PRINT PRINT TAB(20); "Vitesse de rotation : 0,1 … 10 tr/s": PRINT PRINT TAB(20); "Acc‚l‚ration maximale : 0 … 1 tr/s en 0,25 s": PRINT PRINT TAB(20); "Couple r‚sistant maximal : 40 N.cm": PRINT PRINT TAB(20); "Moment d'inertie : 0,02Kg.mý": PRINT PRINT TAB(20); "Inversion possible du sens de rotation." 104 : c$ = INKEY$ IF c$ = "q" OR c$ = "Q" THEN GOTO 1000 IF c$ = "s" OR c$ = "S" THEN GOTO 1000 IF c$ = "p" OR c$ = "P" THEN GOTO 101 GOTO 104 1000 : END SUB SUB lecture '******************* Lecture sur unit‚ de disque **************** LOCATE 22, 4: INPUT "Nom du programme "; m$ OPEN "i", #1, m$ FOR i = 1 TO 150 INPUT #1, a(i) NEXT i CLOSE lec: CALL nouveau menu: LOCATE 21, 4: PRINT "(C) Trac‚ de la Courbe de Vitesse." LOCATE 22, 4: PRINT "(T) Transmission vers l'Automate." LOCATE 23, 4: PRINT "(Q) Quitter." k$ = "" 60 : k$ = INKEY$ IF k$ = "C" OR k$ = "c" THEN CALL courbe: GOTO lec IF k$ = "T" OR k$ = "t" THEN CALL transmission: GOTO menu IF k$ = "Q" OR k$ = "q" THEN GOTO fin GOTO 60 fin: END SUB SUB modification CALL ecrandef COLOR 12: LOCATE 4, 26: PRINT "Modification d'un programme" LOCATE 22, 4: INPUT "Nom du programme "; m$ OPEN "i", #1, m$ FOR i = 1 TO 150 INPUT #1, a(i) NEXT i CLOSE CALL nouveau CALL parametre END SUB SUB nouveau '*********************** D‚finition d'un tableau **************** CLS 0 SCREEN 9 COLOR 15 e = 5: z = 3 CALL degres FOR i = 1 TO 150 x(i) = e: y(i) = z LOCATE y(i), x(i): PRINT a(i) e = e + 5 IF e = 80 THEN e = 5: z = z + 1 NEXT i CALL table END SUB SUB page CLS 0 SCREEN 9 VIEW (1, 1)-(638, 20), 1, 10 VIEW (20, 318)-(618, 342), 0, 10 VIEW PRINT 1 TO 25 COLOR 15 LOCATE 24, 6: PRINT "Quitter= Q" LOCATE 24, 30: PRINT "Page Pr‚c‚dente = P" LOCATE 24, 60: PRINT "Page Suivante = S" LOCATE 3, 26: PRINT "Informations" COLOR 9 END SUB SUB parametre '******************** modification des paramŠtres ************* 12 : LOCATE 22, 4: PRINT " " LOCATE 23, 4: PRINT " " LOCATE 22, 4: INPUT "Angle (degr‚s): "; g i = INT(g / 2) + 1 ici: LOCATE 23, 4: INPUT "Vitesse (tr/mn): "; q a(i) = q IF a(i) < 0 GOTO ici IF a(i) > 600 GOTO ici LOCATE y(i), x(i) + 2: PRINT " ": LOCATE y(i), x(i): PRINT a(i) CALL table LOCATE 22, 4: PRINT "Autre paramŠtre ( O/N ) ? " LOCATE 23, 4: PRINT " " 13 : c$ = INKEY$ IF c$ = "o" OR c$ = "O" THEN GOTO 12 IF c$ = "n" OR c$ = "N" THEN GOTO 14 GOTO 13 14 : LOCATE 22, 4: PRINT "Enregistrer le programme ( O/N ) ?" 40 : D$ = INKEY$ IF D$ = "o" OR D$ = "O" THEN GOTO 41 IF D$ = "n" OR D$ = "N" THEN GOTO 42 GOTO 40 41 : LOCATE 22, 4: PRINT " " CALL sauvegarde 42 : LOCATE 22, 4: PRINT " " END SUB SUB sauvegarde '***************** sauvegarde sur unite de disque ************ 70 : LOCATE 22, 4: INPUT "Nom du programme de donn‚es"; m$ IF m$ = "" THEN GOTO 70 OPEN "O", #1, m$ FOR i = 1 TO 150 PRINT #1, a(i) NEXT i CLOSE END SUB SUB table '*************** D‚finition du tableau degr‚s/vitesse ************* VIEW (39, 28)-(636, 165), , 10 FOR i = 13 TO 140 STEP 14 LINE (0, i)-(638, i), 10 NEXT i FOR i = 39 TO 559 STEP 40 LINE (i, 0)-(i, 139), 10 NEXT i END SUB SUB tableau '******************** introduction des paramŠtres *************** CLS 0 CALL degres CALL table e = 5: z = 3 FOR i = 1 TO 150 x(i) = e: y(i) = z LOCATE 22, 4: PRINT " " la: LOCATE 22, 4: PRINT " " LOCATE 22, 4: INPUT "Vitesse de rotation (tr/mn)"; a(i) IF a(i) < 0 THEN GOTO la IF a(i) > 600 THEN GOTO la LOCATE y(i), x(i) + 1: PRINT a(i) CALL table e = e + 5 IF e = 80 THEN e = 5: z = z + 1 IF z = 15 THEN GOTO 17 NEXT i 17 : END SUB SUB transmission '******************* Transmission vers Automate ************ LOCATE 21, 4: PRINT " " LOCATE 22, 4: PRINT " " LOCATE 23, 4: PRINT " " LOCATE 22, 8: PRINT "Envoi des valeurs (O/N)?" recom: k$ = INKEY$ IF k$ = "o" OR k$ = "O" THEN GOTO trans IF k$ = "n" OR k$ = "N" THEN GOTO pastrans ELSE GOTO recom trans: LOCATE 22, 8: PRINT "transmission en cours..." OPEN "COM2:9600,N,8,1" FOR RANDOM AS #1 FOR i = 1 TO 150 u(i) = a(i) * (255 / 600) FOR j = 1 TO 10: NEXT j 'Temporisation OUT &H2F8, u(i) NEXT i LOCATE 22, 8: PRINT " " LOCATE 22, 8: INPUT "nombre de tours "; b OUT &H2F8, b tmp = 10000 boucle: DO UNTIL tmp = 0 tmp = tmp - 1 IF EOF(1) THEN GOTO boucle IF INP(&H2F8) <> &H55 THEN GOTO boucle ELSE GOTO transcor LOOP GOTO deftr transcor: LOCATE 22, 8: PRINT "Transmission correcte " GOTO pastrans deftr: LOCATE 22, 8: PRINT "D‚faut de transmission " pastrans: CLOSE 1 FOR i = 1 TO 10000: NEXT i END SUB SUB utilisation CALL ecrandef COLOR 12: LOCATE 4, 26: PRINT "Utilisation d'un programme " CALL lecture END SUB