Télécharger soudage.procedur

Retour à la liste

Numérotation des lignes :

  1. * SOUDAGE PROCEDUR PASCAL 22/10/20 21:15:01 11487
  2. DEBP SOUDAGE TAB1*'TABLE' ;
  3.  
  4. *-------------- Analyse donnees table de fabrication --------------*
  5. *
  6. si (non (exis tab1 'VITESSE_DE_SOUDAGE')) ;
  7. erre '***** ERREUR : VITESSE_DE_SOUDAGE non definie.' ;
  8. quit soudage ;
  9. fins ;
  10. si (non (exis tab1 'PUISSANCE_DE_SOUDAGE')) ;
  11. erre '***** ERREUR : PUISSANCE_DE_SOUDAGE non definie.' ;
  12. quit soudage ;
  13. fins ;
  14.  
  15. * Diametre, vitesse et debit de fil :
  16. si (exis tab1 'DIAMETRE_DE_FIL') ;
  17. dfil1 = tab1.diametre_de_fil ;
  18. vfil1 = tab1.vitesse_de_fil ;
  19. debi1 = pi * dfil1 * dfil1 * 0.25 * vfil1 ;
  20. tab1.debit_de_fil = debi1 ;
  21. fins ;
  22. si (non (exis tab1 'DEBIT_DE_FIL')) ;
  23. erre '***** ERREUR : DEBIT_DE_FIL non defini.' ;
  24. quit soudage ;
  25. fins ;
  26.  
  27. * Vitesse de deplacement :
  28. si (non (exis tab1 'VITESSE_DE_DEPLACEMENT')) ;
  29. tab1.vitesse_de_deplacement = tab1.vitesse_de_soudage ;
  30. fins ;
  31.  
  32. * Point de depart :
  33. Si (non (exis tab1 'POINT_DE_DEPART')) ;
  34. P1 = 0 0 0 ;
  35. tab1.point_de_depart = P1 ;
  36. fins ;
  37.  
  38. * Temps de coupure :
  39. si (non (exis tab1 'TEMPS_DE_COUPURE')) ;
  40. tab1.temps_de_coupure = 0.1 ;
  41. fins ;
  42.  
  43. *-------------------------- Initialisations ---------------------------*
  44.  
  45. * Test dimension 3 :
  46. si ((vale dime) neg 3) ;
  47. erreur '***** SOUDAGE : fonctionne uniquement en dimension 3' ;
  48. quit soudage ;
  49. fins ;
  50.  
  51. * Indicateur 1er appel a soudage :
  52. si (exis tab1 'TRAJECTOIRE') ;
  53. idebut1 = faux ;
  54. sino ;
  55. idebut1 = vrai ;
  56. fins ;
  57.  
  58. * Sous-indice WTABLE : sert a stocker les valeurs courantes des parametres de soudage
  59. si (exis tab1 'WTABLE') ;
  60. wtab1 = tab1.wtable ;
  61. sino ;
  62. wtab1 = table ;
  63. wtab1 . vsou = tab1.vitesse_de_soudage ;
  64. wtab1 . puis = tab1.puissance_de_soudage ;
  65. wtab1 . debi = tab1.debit_de_fil ;
  66. wtab1 . vdep = tab1.vitesse_de_deplacement ;
  67. tab1.wtable = wtab1 ;
  68. fins ;
  69.  
  70. * icas1 = 1 / 2 / 3 pour POINT / PASSE / DEPLA
  71. * Si 0 in fine : erreur.
  72. icas1 = 0 ;
  73.  
  74. * Vecteur nul pour dupliquer points lus :
  75. Pnul1 = 0 0 0 ;
  76.  
  77. *------------------------- Lecture des options ------------------------*
  78.  
  79. argu MOT1*'MOT' ;
  80.  
  81. *----------------------------------------------------------------------*
  82. * Option POINT *
  83. *----------------------------------------------------------------------*
  84.  
  85. si (ega mot1 'POINT') ;
  86. icas1 = 1 ;
  87.  
  88. * Initialisation enregistrement donnees POINT :
  89. si (exis tab1 points) ;
  90. npt1 = dime tab1.points ;
  91. sino ;
  92. npt1 = 0 ;
  93. tab1.points = table ;
  94. fins ;
  95. npt1 = npt1 + 1 ;
  96. tab1.points.npt1 = table ;
  97. *
  98. * Lecture des arguments de l'option :
  99. argu FLOT1*'FLOTTANT' ;
  100.  
  101. * Trajectoire POINT :
  102. si idebut1 ;
  103. P1 = tab1.point_de_depart plus Pnul1 ;
  104. tab1.trajectoire = manu poi1 P1 ;
  105. fins ;
  106.  
  107. * Lecture Arguments PUIS, DEBI option POINT :
  108. imot2 = faux ; imot3 = faux ;
  109. repe b1 2 ;
  110. argu MOT2/'MOT' ;
  111. si (non (exis mot2)) ; quit B1 ; fins ;
  112. si (ega mot2 'PUIS') ;
  113. imot2 = vrai ;
  114. argu qtot1*'FLOTTANT' ;
  115. fins ;
  116. si (ega mot2 'DEBI') ;
  117. imot3 = vrai ;
  118. argu debi1*'FLOTTANT' ;
  119. fins ;
  120. fin b1 ;
  121. si (non imot2) ;
  122. qtot1 = tab1.puissance_de_soudage ;
  123. fins ;
  124. wtab1 . puis = qtot1 ;
  125. si (non imot3) ;
  126. debi1 = tab1.debit_de_fil ;
  127. fins ;
  128. wtab1 . debi = debi1 ;
  129. *list qtot1 ;
  130. *list debi1 ;
  131. *list idebut1 ;
  132. *
  133. * Ajout ou pas du temps de coupure option POINT :
  134. idtcp1 = faux ;
  135. si ((non idebut1)) ;
  136. evqtot0 = tab1.evolution_puissance ;
  137. lqtot0 = extr evqtot0 ordo ;
  138. qtot0 = extr lqtot0 (dime lqtot0) ;
  139. idtcp1 = (abs(qtot0-qtot1)) > (abs(1.e-4*qtot1)) ;
  140.  
  141. evdebi0 = tab1.evolution_debit ;
  142. ldebi0 = extr evdebi0 ordo ;
  143. debi0 = extr ldebi0 (dime ldebi0) ;
  144. idtcp1 = idtcp1 ou ((abs(debi0-debi1)) > (abs(1.e-4*debi1))) ;
  145. fins ;
  146. si idtcp1 ;
  147. dtcp1 = tab1.temps_de_coupure ;
  148. flot1 = flot1 + dtcp1 ;
  149. fins ;
  150.  
  151. * Evolution puissance option POINT :
  152. si idebut1 ;
  153. ltps1 = prog 0. flot1 ;
  154. lqtot1 = prog qtot1 qtot1 ;
  155. lti1 = ltps1 ;
  156. sino ;
  157. evqtot0 = tab1.evolution_puissance ;
  158. ltps0 = extr evqtot0 absc ;
  159. lqtot0 = extr evqtot0 ordo ;
  160. tps0 = extr ltps0 (dime ltps0) ;
  161. qtot0 = extr lqtot0 (dime lqtot0) ;
  162. * Si la puissance indiquee est differente de celle existante :
  163. si ((abs(qtot0-qtot1)) > (abs(1.e-4*qtot1))) ;
  164. * Ajout temps de coupure au temps de realisation du POINT :
  165. ltps1 = prog (tps0 + dtcp1) (tps0 + flot1) ;
  166. lqtot1 = prog qtot1 qtot1 ;
  167. sino ;
  168. ltps1 = prog (tps0 + flot1) ;
  169. lqtot1 = prog qtot1 ;
  170. fins ;
  171. lti1 = prog tps0 (tps0 + flot1) ;
  172. ltps1 = ltps0 et ltps1 ;
  173. lqtot1 = lqtot0 et lqtot1 ;
  174. fins ;
  175. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  176. tab1.evolution_puissance = evqtot1 ;
  177.  
  178. * Evolution debit POINT :
  179. si idebut1 ;
  180. ltps1 = prog 0. flot1 ;
  181. ldebi1 = prog debi1 debi1 ;
  182. sino ;
  183. evdebi0 = tab1.evolution_debit ;
  184. ltps0 = extr evdebi0 absc ;
  185. ldebi0 = extr evdebi0 ordo ;
  186. tps0 = extr ltps0 (dime ltps0) ;
  187. debi0 = extr ldebi0 (dime ldebi0) ;
  188. * Si la puissance indiquee est differente de celle existante :
  189. si ((abs(debi0-debi1)) > (abs(1.e-4*debi1))) ;
  190. * Ajout temps de coupure au temps de realisation du POINT :
  191. ltps1 = prog (tps0 + dtcp1) (tps0 + flot1) ;
  192. ldebi1 = prog debi1 debi1 ;
  193. lqi1 = prog 1. 1. ;
  194. sino ;
  195. ltps1 = prog (tps0 + flot1) ;
  196. ldebi1 = prog debi1 ;
  197. lqi1 = prog 1. ;
  198. fins ;
  199. ltps1 = ltps0 et ltps1 ;
  200. ldebi1 = ldebi0 et ldebi1 ;
  201. fins ;
  202. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  203. tab1.evolution_debit = evdebi1 ;
  204.  
  205. * Evolution deplacement POINT :
  206. si idebut1 ;
  207. ltps1 = prog 0. flot1 ;
  208. ldep1 = prog 0. 0. ;
  209. sino ;
  210. evdep0 = tab1.evolution_deplacement ;
  211. ltps0 = extr evdep0 absc ;
  212. ldep0 = extr evdep0 ordo ;
  213. tps0 = extr ltps0 (dime ltps0) ;
  214. dep0 = extr ldep0 (dime ldep0) ;
  215. ltps1 = prog (tps0 + flot1) ;
  216. ldep1 = prog dep0 ;
  217. ltps1 = ltps0 et ltps1 ;
  218. ldep1 = ldep0 et ldep1 ;
  219. fins ;
  220. evdep1 = evol vert manu temp ltps1 ldep1 ;
  221. tab1.evolution_deplacement = evdep1 ;
  222.  
  223. * Enregistrement donnees POINT
  224. tab1.points.npt1.point = P1 ;
  225. tab1.points.npt1.instants = lti1 ;
  226. tab1.points.npt1.puissance = qtot1 ;
  227. tab1.points.npt1.debit = debi1 ;
  228.  
  229. quit soudage ;
  230. * Fin option POINT :
  231. fins ;
  232.  
  233. *----------------------------------------------------------------------*
  234. * Option PASSE *
  235. *----------------------------------------------------------------------*
  236. si (ega mot1 'PASSE') ;
  237. icas1 = 2 ;
  238.  
  239. * Lecture des arguments de l'option :
  240. argu MOT2*'MOT' ;
  241.  
  242. * Triatement particulier option CERC ordre arguments :
  243. si (ega mot2 'CERC') ;
  244. argu N1/ENTIER ;
  245. fins ;
  246.  
  247. * Lecture arguments RELA/ABSO, VITE, PUIS, DEBI
  248. imot3 = faux ; imot4 = faux ; imot5 = faux ; imot6 = faux ;
  249. irela1 = vrai ;
  250. repe b1 4 ;
  251. argu mot3/'MOT' ;
  252. si (non (exis mot3)) ; quit b1; fins ;
  253. si (ega mot3 'ABSO') ;
  254. imot3 = vrai ;
  255. irela1 = faux ;
  256. fins ;
  257. si (ega mot3 'VITE') ;
  258. imot4 = vrai ;
  259. argu vdep1*'FLOTTANT' ;
  260. fins ;
  261. si (ega mot3 'PUIS') ;
  262. imot5 = vrai ;
  263. argu qtot1*'FLOTTANT' ;
  264. fins ;
  265. si (ega mot3 'DEBI') ;
  266. imot6 = vrai ;
  267. argu debi1*'FLOTTANT' ;
  268. fins ;
  269. fin b1 ;
  270.  
  271. * Vitesse & Increment de temps PASSE :
  272. si (non imot4) ;
  273. vdep1 = tab1.vitesse_de_soudage ;
  274. fins ;
  275. wtab1 . vsou = vdep1 ;
  276.  
  277. * Puissance PASSE :
  278. si (non imot5) ;
  279. qtot1 = tab1.puissance_de_soudage ;
  280. fins ;
  281. wtab1 . puis = qtot1 ;
  282.  
  283. * Debit PASSE :
  284. si (non imot6) ;
  285. debi1 = tab1.debit_de_fil ;
  286. fins ;
  287. wtab1 . debi = debi1 ;
  288. *list vdep1 ;
  289. *list qtot1 ;
  290. *list debi1 ;
  291.  
  292. * Ajout ou pas du temps de coupure option PASSE :
  293. idtcp1 = faux ;
  294. si ((non idebut1)) ;
  295. evqtot0 = tab1.evolution_puissance ;
  296. lqtot0 = extr evqtot0 ordo ;
  297. qtot0 = extr lqtot0 (dime lqtot0) ;
  298. idtcp1 = (abs(qtot0-qtot1)) > (abs(1.e-4*qtot1)) ;
  299.  
  300. evdebi0 = tab1.evolution_debit ;
  301. ldebi0 = extr evdebi0 ordo ;
  302. debi0 = extr ldebi0 (dime ldebi0) ;
  303. idtcp1 = idtcp1 ou ((abs(debi0-debi1)) > (abs(1.e-4*debi1))) ;
  304. fins ;
  305. *list idtcp1 ;
  306. si idtcp1 ;
  307. dtcp1 = tab1.temps_de_coupure ;
  308. fins ;
  309.  
  310. * Initialisation enregistrement donnees PASSE :
  311. si (exis tab1 passes) ;
  312. nps1 = dime tab1.passes ;
  313. sino ;
  314. nps1 = 0 ;
  315. tab1.passes = table ;
  316. fins ;
  317. nps1 = nps1 + 1 ;
  318. tab1.passes.nps1 = table ;
  319.  
  320. * icas2 = indicateur sous-option realisee :
  321. icas2 = 0 ;
  322.  
  323. *----------------------------- PASSE DROI -----------------------------*
  324. * Sous-option DROI :
  325. si (ega mot2 'DROI') ;
  326. icas2 = 1 ;
  327.  
  328. * Lecture du point :
  329. argu P1*'POINT' ;
  330. P1 = P1 plus Pnul1 ;
  331.  
  332. * Trajectoire PASSE DROI :
  333. si idebut1 ;
  334. P0 = tab1.point_de_depart plus Pnul1 ;
  335. * Deplacements relatifs :
  336. si irela1 ;
  337. P1 = P0 plus P1 ;
  338. fins ;
  339. mail1 = P0 droi 1 P1 ;
  340. mail1 = mail1 coul roug ;
  341. ll1 = mesu mail1 ;
  342. maili1 = mail1 ;
  343. sino ;
  344. mail0 = tab1.trajectoire ;
  345. nbpts0 = nbno mail0 ;
  346. P0 = mail0 poin nbpts0 ;
  347. * Deplacements relatifs :
  348. si irela1 ;
  349. P1 = P0 plus P1 ;
  350. fins ;
  351. mail1 = P0 droi 1 P1 ;
  352. mail1 = mail1 coul roug ;
  353. ll1 = mesu mail1 ;
  354. maili1 = mail1 ;
  355. si (nbpts0 > 1) ;
  356. mail1 = mail0 et mail1 ;
  357. fins ;
  358. fins ;
  359. tab1.trajectoire = mail1 ;
  360.  
  361. * Increment de temps :
  362. dt1 = ll1 / vdep1 ;
  363. si idtcp1 ;
  364. dt1 = dt1 + dtcp1 ;
  365. fins ;
  366.  
  367. * Evolution puissance PASSE DROI :
  368. si idebut1 ;
  369. ltps1 = prog 0. dt1 ;
  370. lqtot1 = prog qtot1 qtot1 ;
  371. lti1 = ltps1 ;
  372. sino ;
  373. ltps0 = extr evqtot0 absc ;
  374. tps0 = extr ltps0 (dime ltps0) ;
  375. * Si la puissance indiquee est differente de celle existante :
  376. si idtcp1 ;
  377. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  378. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  379. lqtot1 = prog qtot1 qtot1 ;
  380. sino ;
  381. lti1 = prog tps0 (tps0 + dt1) ;
  382. ltps1 = prog (tps0 + dt1) ;
  383. lqtot1 = prog qtot1 ;
  384. fins ;
  385. ltps1 = ltps0 et ltps1 ;
  386. lqtot1 = lqtot0 et lqtot1 ;
  387. fins ;
  388. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  389. tab1.evolution_puissance = evqtot1 ;
  390.  
  391. * Evolution debit PASSE DROI :
  392. si idebut1 ;
  393. ltps1 = prog 0. dt1 ;
  394. ldebi1 = prog debi1 debi1 ;
  395. sino ;
  396. ltps0 = extr evdebi0 absc ;
  397. tps0 = extr ltps0 (dime ltps0) ;
  398. * Si la puissance indiquee est differente de celle existante :
  399. si idtcp1 ;
  400. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  401. ldebi1 = prog debi1 debi1 ;
  402. sino ;
  403. ltps1 = prog (tps0 + dt1) ;
  404. ldebi1 = prog debi1 ;
  405. fins ;
  406. ltps1 = ltps0 et ltps1 ;
  407. ldebi1 = ldebi0 et ldebi1 ;
  408. fins ;
  409. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  410. tab1.evolution_debit = evdebi1 ;
  411.  
  412. * Evolution deplacement PASSE DROI :
  413. si idebut1 ;
  414. ltps1 = prog 0. dt1 ;
  415. ldep1 = prog 0. ll1 ;
  416. sino ;
  417. evdep0 = tab1.evolution_deplacement ;
  418. ltps0 = extr evdep0 absc ;
  419. ldep0 = extr evdep0 ordo ;
  420. tps0 = extr ltps0 (dime ltps0) ;
  421. dep0 = extr ldep0 (dime ldep0) ;
  422. si idtcp1 ;
  423. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  424. ldep1 = prog dep0 (dep0 + ll1) ;
  425. sino ;
  426. ltps1 = prog (tps0 + dt1) ;
  427. ldep1 = prog (dep0 + ll1) ;
  428. fins ;
  429. ltps1 = ltps0 et ltps1 ;
  430. ldep1 = ldep0 et ldep1 ;
  431. fins ;
  432. evdep1 = evol vert manu temp ltps1 ldep1 ;
  433. tab1.evolution_deplacement = evdep1 ;
  434.  
  435. * Enregistrement donnees PASSE DROI
  436. tab1.passes.nps1.maillage = maili1 ;
  437. tab1.passes.nps1.geometrie = mot 'DROI' ;
  438. tab1.passes.nps1.instants = lti1 ;
  439. tab1.passes.nps1.vitesse = vdep1 ;
  440. tab1.passes.nps1.puissance = qtot1 ;
  441. tab1.passes.nps1.debit = debi1 ;
  442.  
  443. si (exis tab1 'LARGEUR_DE_PASSE') ;
  444. tab1.passes.nps1.largeur = tab1.largeur_de_passe ;
  445. fins ;
  446.  
  447. quit soudage ;
  448. * Fin option PASSE DROI :
  449. fins ;
  450.  
  451. *----------------------------- PASSE CERC -----------------------------*
  452. * Sous-option CERC :
  453. si (ega mot2 'CERC') ;
  454. icas2 = 2 ;
  455.  
  456. * P1 est le centre du cercle, P2, l'extremite de la trajectoire
  457. argu P2*'POINT' P1*'POINT' ;
  458. P1 = P1 plus Pnul1 ;
  459. P2 = P2 plus Pnul1 ;
  460.  
  461. * Trajectoire PASSE CERC :
  462. si idebut1 ;
  463. P0 = tab1.point_de_depart plus Pnul1 ;
  464. * Deplacements relatifs :
  465. si irela1 ;
  466. P1 = P0 plus P1 ;
  467. P2 = P0 plus P2 ;
  468. fins ;
  469. si (non (exis N1)) ;
  470. V1 = P0 moin P1 ;
  471. V2 = P2 moin P1 ;
  472. V1 = V1 / (norm V1) ;
  473. V2 = V2 / (norm V2) ;
  474. N1 = (acos (psca V1 V2)) / 5. ;
  475. N1 = maxi (lect (enti N1) 1) ;
  476. fins ;
  477. mail1 = CERC N1 P0 P1 P2 ;
  478. mail1 = mail1 coul roug ;
  479. maili1 = mail1 ;
  480. ll1 = mesu mail1 ;
  481. sino ;
  482. mail0 = tab1.trajectoire ;
  483. nbpts0 = nbno mail0 ;
  484. P0 = mail0 poin nbpts0 ;
  485. * Deplacements relatifs :
  486. si irela1 ;
  487. P1 = P0 plus P1 ;
  488. P2 = P0 plus P2 ;
  489. fins ;
  490. si (non (exis N1)) ;
  491. V1 = P0 moin P1 ;
  492. V2 = P2 moin P1 ;
  493. V1 = V1 / (norm V1) ;
  494. V2 = V2 / (norm V2) ;
  495. N1 = (acos (psca V1 V2)) / 5. ;
  496. N1 = maxi (lect (enti N1) 1) ;
  497. fins ;
  498. mail1 = CERC N1 P0 P1 P2 ;
  499. mail1 = mail1 coul roug ;
  500. maili1 = mail1 ;
  501. ll1 = mesu mail1 ;
  502. si (nbpts0 > 1) ;
  503. mail1 = mail0 et mail1 ;
  504. fins ;
  505. fins ;
  506. tab1.trajectoire = mail1 ;
  507.  
  508. * Increment de temps :
  509. dt1 = ll1 / vdep1 ;
  510. si idtcp1 ;
  511. dt1 = dt1 + dtcp1 ;
  512. fins ;
  513.  
  514. * Evolution puissance PASSE CERC :
  515. si idebut1 ;
  516. ltps1 = prog 0. dt1 ;
  517. lqtot1 = prog qtot1 qtot1 ;
  518. lti1 = ltps1 ;
  519. sino ;
  520. ltps0 = extr evqtot0 absc ;
  521. tps0 = extr ltps0 (dime ltps0) ;
  522. * Si la puissance indiquee est differente de celle existante :
  523. si idtcp1 ;
  524. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  525. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  526. lqtot1 = prog qtot1 qtot1 ;
  527. sino ;
  528. lti1 = prog tps0 (tps0 + dt1) ;
  529. ltps1 = prog (tps0 + dt1) ;
  530. lqtot1 = prog qtot1 ;
  531. fins ;
  532. ltps1 = ltps0 et ltps1 ;
  533. lqtot1 = lqtot0 et lqtot1 ;
  534. fins ;
  535. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  536. tab1.evolution_puissance = evqtot1 ;
  537.  
  538. * Evolution debit PASSE CERC :
  539. si idebut1 ;
  540. ltps1 = prog 0. dt1 ;
  541. ldebi1 = prog debi1 debi1 ;
  542. sino ;
  543. ltps0 = extr evdebi0 absc ;
  544. tps0 = extr ltps0 (dime ltps0) ;
  545. * Si la puissance indiquee est differente de celle existante :
  546. si idtcp1 ;
  547. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  548. ldebi1 = prog debi1 debi1 ;
  549. sino ;
  550. ltps1 = prog (tps0 + dt1) ;
  551. ldebi1 = prog debi1 ;
  552. fins ;
  553. ltps1 = ltps0 et ltps1 ;
  554. ldebi1 = ldebi0 et ldebi1 ;
  555. fins ;
  556. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  557. tab1.evolution_debit = evdebi1 ;
  558.  
  559. * Evolution deplacement PASSE CERC :
  560. si idebut1 ;
  561. ltps1 = prog 0. dt1 ;
  562. ldep1 = prog 0. ll1 ;
  563. sino ;
  564. evdep0 = tab1.evolution_deplacement ;
  565. ltps0 = extr evdep0 absc ;
  566. ldep0 = extr evdep0 ordo ;
  567. tps0 = extr ltps0 (dime ltps0) ;
  568. dep0 = extr ldep0 (dime ldep0) ;
  569. si idtcp1 ;
  570. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  571. ldep1 = prog dep0 (dep0 + ll1) ;
  572. sino ;
  573. ltps1 = prog (tps0 + dt1) ;
  574. ldep1 = prog (dep0 + ll1) ;
  575. fins ;
  576. ltps1 = ltps0 et ltps1 ;
  577. ldep1 = ldep0 et ldep1 ;
  578. fins ;
  579. evdep1 = evol vert manu temp ltps1 ldep1 ;
  580. tab1.evolution_deplacement = evdep1 ;
  581.  
  582. * Enregistrement donnees PASSE CERC
  583. tab1.passes.nps1.maillage = maili1 ;
  584. tab1.passes.nps1.geometrie = mot 'CERC' ;
  585. tab1.passes.nps1.centre = P1 ;
  586. tab1.passes.nps1.instants = lti1 ;
  587. tab1.passes.nps1.vitesse = vdep1 ;
  588. tab1.passes.nps1.puissance = qtot1 ;
  589. tab1.passes.nps1.debit = debi1 ;
  590.  
  591. si (exis tab1 'LARGEUR_DE_PASSE') ;
  592. tab1.passes.nps1.largeur = tab1.largeur_de_passe ;
  593. fins ;
  594.  
  595. quit soudage ;
  596. * Fin option PASSE CERC :
  597. fins ;
  598.  
  599. *----------------------------- PASSE MAIL -----------------------------*
  600. * Sous-option MAIL :
  601. si (ega mot2 'MAIL') ;
  602. icas2 = 3 ;
  603.  
  604. argu mail1*'MAILLAGE' ;
  605. eltyp1 = mail1 elem type ;
  606. imax1 = 0 ;
  607. si (exis eltyp1 'SEG2') ; imax1 = imax1 + 1 ; fins ;
  608. si (exis eltyp1 'SEG3') ; imax1 = imax1 + 1 ; fins ;
  609. si ((dime eltyp1) > imax1) ;
  610. erre '***** ERREUR : le maillage doit etre compose de SEG2 ou de SEG3.' ;
  611. fins ;
  612. ll1 = mesu mail1 ;
  613. maili1 = mail1 ;
  614.  
  615. * Trajectoire PASSE MAIL :
  616. si idebut1 ;
  617. P1 = mail1 poin 1 ;
  618. tab1.point_de_depart = P1 ;
  619. sino ;
  620. mail0 = tab1.trajectoire ;
  621. nbpts0 = nbno mail0 ;
  622. P0 = mail0 poin nbpts0 ;
  623. P1 = mail1 poin 1 ;
  624. si (P1 neg P0) ;
  625. erre '***** ERREUR : MAILLAGE incompatible.' ;
  626. quit soudage ;
  627. fins ;
  628. si (nbpts0 > 1) ;
  629. mail1 = mail1 coul roug ;
  630. mail1 = mail0 et mail1 ;
  631. fins ;
  632. fins ;
  633. tab1.trajectoire = mail1 ;
  634.  
  635. * Increment de temps :
  636. dt1 = ll1 / vdep1 ;
  637. si idtcp1 ;
  638. dt1 = dt1 + dtcp1 ;
  639. fins ;
  640.  
  641. * Evolution puissance PASSE MAIL :
  642. si idebut1 ;
  643. ltps1 = prog 0. dt1 ;
  644. lqtot1 = prog qtot1 qtot1 ;
  645. lti1 = ltps1 ;
  646. sino ;
  647. ltps0 = extr evqtot0 absc ;
  648. tps0 = extr ltps0 (dime ltps0) ;
  649. * Si la puissance indiquee est differente de celle existante :
  650. si idtcp1 ;
  651. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  652. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  653. lqtot1 = prog qtot1 qtot1 ;
  654. sino ;
  655. lti1 = prog tps0 (tps0 + dt1) ;
  656. ltps1 = prog (tps0 + dt1) ;
  657. lqtot1 = prog qtot1 ;
  658. fins ;
  659. ltps1 = ltps0 et ltps1 ;
  660. lqtot1 = lqtot0 et lqtot1 ;
  661. fins ;
  662. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  663. tab1.evolution_puissance = evqtot1 ;
  664.  
  665. * Evolution debit PASSE MAIL :
  666. si idebut1 ;
  667. ltps1 = prog 0. dt1 ;
  668. ldebi1 = prog debi1 debi1 ;
  669. sino ;
  670. ltps0 = extr evdebi0 absc ;
  671. tps0 = extr ltps0 (dime ltps0) ;
  672. * Si la puissance indiquee est differente de celle existante :
  673. si idtcp1 ;
  674. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  675. ldebi1 = prog debi1 debi1 ;
  676. sino ;
  677. ltps1 = prog (tps0 + dt1) ;
  678. ldebi1 = prog debi1 ;
  679. fins ;
  680. ltps1 = ltps0 et ltps1 ;
  681. ldebi1 = ldebi0 et ldebi1 ;
  682. fins ;
  683. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  684. tab1.evolution_debit = evdebi1 ;
  685.  
  686. * Evolution deplacement PASSE MAIL :
  687. si idebut1 ;
  688. ltps1 = prog 0. dt1 ;
  689. ldep1 = prog 0. ll1 ;
  690. sino ;
  691. evdep0 = tab1.evolution_deplacement ;
  692. ltps0 = extr evdep0 absc ;
  693. ldep0 = extr evdep0 ordo ;
  694. tps0 = extr ltps0 (dime ltps0) ;
  695. dep0 = extr ldep0 (dime ldep0) ;
  696. si idtcp1 ;
  697. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  698. ldep1 = prog dep0 (dep0 + ll1) ;
  699. sino ;
  700. ltps1 = prog (tps0 + dt1) ;
  701. ldep1 = prog (dep0 + ll1) ;
  702. fins ;
  703. ltps1 = ltps0 et ltps1 ;
  704. ldep1 = ldep0 et ldep1 ;
  705. fins ;
  706. evdep1 = evol vert manu temp ltps1 ldep1 ;
  707. tab1.evolution_deplacement = evdep1 ;
  708.  
  709. * Enregistrement donnees PASSE MAIL
  710. tab1.passes.nps1.maillage = maili1 ;
  711. tab1.passes.nps1.geometrie = mot 'MAIL' ;
  712. tab1.passes.nps1.instants = lti1 ;
  713. tab1.passes.nps1.vitesse = vdep1 ;
  714. tab1.passes.nps1.puissance = qtot1 ;
  715. tab1.passes.nps1.debit = debi1 ;
  716.  
  717. si (exis tab1 'LARGEUR_DE_PASSE') ;
  718. tab1.passes.nps1.largeur = tab1.largeur_de_passe ;
  719. fins ;
  720.  
  721. quit soudage ;
  722. * Fin option PASSE MAIL :
  723. fins ;
  724.  
  725. * Si mot2 ne correspond a aucune option connue, icas2 = 0 : erreur
  726. si (icas2 ega 0) ;
  727. erre '***** ERREUR : MOT option non reconnu.' ;
  728. quit soudage ;
  729. fins ;
  730.  
  731. * Fin option PASSE :
  732. fins ;
  733.  
  734. *----------------------------------------------------------------------*
  735. * Option DEPLA *
  736. *----------------------------------------------------------------------*
  737.  
  738. si (ega mot1 'DEPLA') ;
  739. icas1 = 3 ;
  740. *
  741. * Lecture des arguments de l'option :
  742. argu MOT2*'MOT' ;
  743.  
  744. * Ajout ou pas du temps de coupure option PASSE :
  745. idtcp1 = faux ;
  746. qtot1 = 0. ;
  747. debi1 = 0. ;
  748. si ((non idebut1)) ;
  749. evqtot0 = tab1.evolution_puissance ;
  750. lqtot0 = extr evqtot0 ordo ;
  751. evdebi0 = tab1.evolution_debit ;
  752. ldebi0 = extr evdebi0 ordo ;
  753. qtot0 = extr lqtot0 (dime lqtot0) ;
  754. idtcp1 = (abs(qtot0-qtot1)) > (abs(1.e-4*qtot1)) ;
  755. debi0 = extr ldebi0 (dime ldebi0) ;
  756. idtcp1 = idtcp1 ou ((abs(debi0-debi1)) > (abs(1.e-4*debi1))) ;
  757. fins ;
  758. *list idtcp1 ;
  759. si idtcp1 ;
  760. dtcp1 = tab1.temps_de_coupure ;
  761. fins ;
  762.  
  763. * icas2 = indicateur sous-option realisee :
  764. icas2 = 0 ;
  765.  
  766. *----------------------------- DEPLA DROI -----------------------------*
  767. si (ega mot2 'DROI') ;
  768. icas2 = 1 ;
  769.  
  770. argu P1*'POINT' ;
  771. P1 = P1 plus Pnul1 ;
  772.  
  773. * Deplacement relatif / absolu :
  774. imot3 = faux ; imot4 = faux ;
  775. irela1 = vrai ;
  776. repe b1 2 ;
  777. argu mot3/'MOT' ;
  778. si (non (exis mot3)) ; quit b1 ; fins ;
  779. si (ega mot3 'ABSO') ;
  780. imot3 = vrai ;
  781. irela1 = faux ;
  782. fins ;
  783. si (ega mot3 'VITE') ;
  784. imot4 = vrai ;
  785. argu vdep1*'FLOTTANT' ;
  786. fins ;
  787. fin b1 ;
  788.  
  789. * Trajectoire DEPLA DROI :
  790. *list idebut1 ;
  791. si idebut1 ;
  792. P0 = tab1.point_de_depart plus Pnul1 ;
  793. * Deplacements relatifs :
  794. si irela1 ;
  795. P1 = P0 plus P1 ;
  796. fins ;
  797. mail1 = P0 droi 1 P1 ;
  798. mail1 = mail1 coul vert ;
  799. ll1 = mesu mail1 ;
  800. sino ;
  801. mail0 = tab1.trajectoire ;
  802. nbpts0 = nbno mail0 ;
  803. P0 = mail0 poin nbpts0 ;
  804. *list P0 ;
  805. * Deplacements relatifs :
  806. si irela1 ;
  807. P1 = P0 plus P1 ;
  808. fins ;
  809. mail1 = P0 droi 1 P1 ;
  810. mail1 = mail1 coul vert ;
  811. ll1 = mesu mail1 ;
  812. si (nbpts0 > 1) ;
  813. mail1 = mail0 et mail1 ;
  814. fins ;
  815. fins ;
  816. tab1.trajectoire = mail1 ;
  817.  
  818. * Increment de temps DEPLA DROI :
  819. si (non imot4) ;
  820. vdep1 = tab1.vitesse_de_deplacement ;
  821. fins ;
  822. wtab1 . vdep = vdep1 ;
  823. dt1 = ll1 / vdep1 ;
  824. si idtcp1 ;
  825. dt1 = dt1 + dtcp1 ;
  826. fins ;
  827.  
  828. * Evolution puissance DEPLA DROI :
  829. si idebut1 ;
  830. ltps1 = prog 0. dt1 ;
  831. lqtot1 = prog qtot1 qtot1 ;
  832. lqi1 = prog 1. 1. ;
  833. sino ;
  834. ltps0 = extr evqtot0 absc ;
  835. tps0 = extr ltps0 (dime ltps0) ;
  836. * Si la puissance indiquee est differente de celle existante :
  837. si idtcp1 ;
  838. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  839. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  840. lqtot1 = prog qtot1 qtot1 ;
  841. sino ;
  842. lti1 = prog tps0 (tps0 + dt1) ;
  843. ltps1 = prog (tps0 + dt1) ;
  844. lqtot1 = prog qtot1 ;
  845. fins ;
  846. ltps1 = ltps0 et ltps1 ;
  847. lqtot1 = lqtot0 et lqtot1 ;
  848. fins ;
  849. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  850. tab1.evolution_puissance = evqtot1 ;
  851.  
  852. * Evolution debit DEPLA DROI :
  853. si idebut1 ;
  854. ltps1 = prog 0. dt1 ;
  855. ldebi1 = prog debi1 debi1 ;
  856. sino ;
  857. ltps0 = extr evdebi0 absc ;
  858. tps0 = extr ltps0 (dime ltps0) ;
  859. * Si la puissance indiquee est differente de celle existante :
  860. si idtcp1 ;
  861. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  862. ldebi1 = prog debi1 debi1 ;
  863. sino ;
  864. ltps1 = prog (tps0 + dt1) ;
  865. ldebi1 = prog debi1 ;
  866. fins ;
  867. ltps1 = ltps0 et ltps1 ;
  868. ldebi1 = ldebi0 et ldebi1 ;
  869. fins ;
  870. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  871. tab1.evolution_debit = evdebi1 ;
  872.  
  873. * Evolution deplacement DEPLA DROI :
  874. si idebut1 ;
  875. ltps1 = prog 0. dt1 ;
  876. ldep1 = prog 0. ll1 ;
  877. sino ;
  878. evdep0 = tab1.evolution_deplacement ;
  879. ltps0 = extr evdep0 absc ;
  880. ldep0 = extr evdep0 ordo ;
  881. tps0 = extr ltps0 (dime ltps0) ;
  882. dep0 = extr ldep0 (dime ldep0) ;
  883. si idtcp1 ;
  884. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  885. ldep1 = prog dep0 (dep0 + ll1) ;
  886. sino ;
  887. ltps1 = prog (tps0 + dt1) ;
  888. ldep1 = prog (dep0 + ll1) ;
  889. fins ;
  890. ltps1 = ltps0 et ltps1 ;
  891. ldep1 = ldep0 et ldep1 ;
  892. fins ;
  893. evdep1 = evol vert manu temp ltps1 ldep1 ;
  894. tab1.evolution_deplacement = evdep1 ;
  895.  
  896. quit soudage ;
  897. * Fin option DEPLA DROI :
  898. fins ;
  899.  
  900. *----------------------------- DEPLA CERC -----------------------------*
  901. si (ega mot2 'CERC') ;
  902. icas2 = 2 ;
  903.  
  904. * P1 est le centre du cercle, P2, l'extremite de la trajectoire
  905. argu P2*'POINT' P1*'POINT' N1/'ENTIER';
  906. P1 = P1 plus Pnul1 ;
  907. P2 = P2 plus Pnul1 ;
  908.  
  909. * Deplacement relatif / absolu :
  910. imot3 = faux ; imot4 = faux ;
  911. irela1 = vrai ;
  912. repe b1 2 ;
  913. argu mot3/'MOT' ;
  914. si (non (exis mot3)) ; quit b1 ; fins ;
  915. si (ega mot3 'ABSO') ;
  916. imot3 = vrai ;
  917. irela1 = faux ;
  918. fins ;
  919. si (ega mot3 'VITE') ;
  920. imot4 = vrai ;
  921. argu vdep1*'FLOTTANT' ;
  922. fins ;
  923. fin b1 ;
  924.  
  925. * Trajectoire DEPLA CERC :
  926. si idebut1 ;
  927. P0 = tab1.point_de_depart plus Pnul1 ;
  928. * Deplacements relatifs :
  929. si irela1 ;
  930. P1 = P0 plus P1 ;
  931. P2 = P0 plus P2 ;
  932. fins ;
  933. * Par defaut, N1 calcule pour avoir angle de 5 deg.
  934. si (non (exis N1)) ;
  935. V1 = P0 moin P1 ;
  936. V2 = P2 moin P1 ;
  937. V1 = V1 / (norm V1) ;
  938. V2 = V2 / (norm V2) ;
  939. N1 = (acos (psca V1 V2)) / 5. ;
  940. N1 = maxi (lect (enti N1) 1) ;
  941. fins ;
  942. mail1 = CERC N1 P0 P1 P2 ;
  943. mail1 = mail1 coul vert ;
  944. ll1 = mesu mail1 ;
  945. sino ;
  946. mail0 = tab1.trajectoire ;
  947. nbpts0 = nbno mail0 ;
  948. P0 = mail0 poin nbpts0 ;
  949. * Deplacements relatifs :
  950. si irela1 ;
  951. P1 = P0 plus P1 ;
  952. P2 = P0 plus P2 ;
  953. fins ;
  954. si (non (exis N1)) ;
  955. V1 = P0 moin P1 ;
  956. V2 = P2 moin P1 ;
  957. V1 = V1 / (norm V1) ;
  958. V2 = V2 / (norm V2) ;
  959. N1 = (acos (psca V1 V2)) / 5. ;
  960. N1 = maxi (lect (enti N1) 1) ;
  961. fins ;
  962. mail1 = CERC N1 P0 P1 P2 ;
  963. mail1 = mail1 coul vert ;
  964. ll1 = mesu mail1 ;
  965. si (nbpts0 > 1) ;
  966. mail1 = mail0 et mail1 ;
  967. fins ;
  968. fins ;
  969. tab1.trajectoire = mail1 ;
  970.  
  971. * Increment de temps DEPLA CERC :
  972. si (non imot4) ;
  973. vdep1 = tab1.vitesse_de_deplacement ;
  974. fins ;
  975. wtab1 . vdep = vdep1 ;
  976. dt1 = ll1 / vdep1 ;
  977. si idtcp1 ;
  978. dt1 = dt1 + dtcp1 ;
  979. fins ;
  980.  
  981. * Evolution puissance DEPLA CERC :
  982. icoup1 = faux ;
  983. si idebut1 ;
  984. ltps1 = prog 0. dt1 ;
  985. lqtot1 = prog qtot1 qtot1 ;
  986. lqi1 = prog 1. 1. ;
  987. sino ;
  988. ltps0 = extr evqtot0 absc ;
  989. tps0 = extr ltps0 (dime ltps0) ;
  990. * Si la puissance indiquee est differente de celle existante :
  991. si idtcp1 ;
  992. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  993. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  994. lqtot1 = prog qtot1 qtot1 ;
  995. sino ;
  996. lti1 = prog tps0 (tps0 + dt1) ;
  997. ltps1 = prog (tps0 + dt1) ;
  998. lqtot1 = prog qtot1 ;
  999. fins ;
  1000. ltps1 = ltps0 et ltps1 ;
  1001. lqtot1 = lqtot0 et lqtot1 ;
  1002. fins ;
  1003. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  1004. tab1.evolution_puissance = evqtot1 ;
  1005.  
  1006. * Evolution debit DEPLA CERC :
  1007. si idebut1 ;
  1008. ltps1 = prog 0. dt1 ;
  1009. ldebi1 = prog debi1 debi1 ;
  1010. sino ;
  1011. ltps0 = extr evdebi0 absc ;
  1012. tps0 = extr ltps0 (dime ltps0) ;
  1013. * Si la puissance indiquee est differente de celle existante :
  1014. si idtcp1 ;
  1015. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1016. ldebi1 = prog debi1 debi1 ;
  1017. sino ;
  1018. ltps1 = prog (tps0 + dt1) ;
  1019. ldebi1 = prog debi1 ;
  1020. fins ;
  1021. ltps1 = ltps0 et ltps1 ;
  1022. ldebi1 = ldebi0 et ldebi1 ;
  1023. fins ;
  1024. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  1025. tab1.evolution_debit = evdebi1 ;
  1026.  
  1027. * Evolution deplacement DEPLA CERC :
  1028. si idebut1 ;
  1029. ltps1 = prog 0. dt1 ;
  1030. ldep1 = prog 0. ll1 ;
  1031. sino ;
  1032. evdep0 = tab1.evolution_deplacement ;
  1033. ltps0 = extr evdep0 absc ;
  1034. ldep0 = extr evdep0 ordo ;
  1035. tps0 = extr ltps0 (dime ltps0) ;
  1036. dep0 = extr ldep0 (dime ldep0) ;
  1037. si idtcp1 ;
  1038. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1039. ldep1 = prog dep0 (dep0 + ll1) ;
  1040. sino ;
  1041. ltps1 = prog (tps0 + dt1) ;
  1042. ldep1 = prog (dep0 + ll1) ;
  1043. fins ;
  1044. ltps1 = ltps0 et ltps1 ;
  1045. ldep1 = ldep0 et ldep1 ;
  1046. fins ;
  1047. evdep1 = evol vert manu temp ltps1 ldep1 ;
  1048. tab1.evolution_deplacement = evdep1 ;
  1049.  
  1050. quit soudage ;
  1051. * Fin option DEPLA CERC :
  1052. fins ;
  1053.  
  1054. *----------------------------- DEPLA MAIL -----------------------------*
  1055. * Sous-option MAIL :
  1056. si (ega mot2 'MAIL') ;
  1057. icas2 = 3 ;
  1058.  
  1059. argu mail1*'MAILLAGE' ;
  1060. eltyp1 = mail1 elem type ;
  1061. imax1 = 0 ;
  1062. si (exis eltyp1 'SEG2') ; imax1 = imax1 + 1 ; fins ;
  1063. si (exis eltyp1 'SEG3') ; imax1 = imax1 + 1 ; fins ;
  1064. si ((dime eltyp1) > imax1) ;
  1065. erre '***** ERREUR : le maillage doit etre compose de SEG2 ou de SEG3.' ;
  1066. fins ;
  1067. ll1 = mesu mail1 ;
  1068.  
  1069. * Trajectoire DEPLA MAIL :
  1070. si idebut1 ;
  1071. P1 = mail1 poin 1 ;
  1072. tab1.point_de_depart = P1 ;
  1073. sino ;
  1074. mail0 = tab1.trajectoire ;
  1075. nbpts0 = nbno mail0 ;
  1076. P0 = mail0 poin nbpts0 ;
  1077. P1 = mail1 poin 1 ;
  1078. si (P1 neg P0) ;
  1079. erre '***** ERREUR : MAILLAGE incompatible.' ;
  1080. quit soudage ;
  1081. fins ;
  1082. si (nbpts0 > 1) ;
  1083. mail1 = mail1 coul vert ;
  1084. mail1 = mail0 et mail1 ;
  1085. fins ;
  1086. fins ;
  1087. tab1.trajectoire = mail1 ;
  1088.  
  1089. * Increment de temps DEPLA MAIL :
  1090. argu mot4/'MOT' ;
  1091. si (exis mot4) ;
  1092. si (ega mot4 'VITE') ;
  1093. argu vdep1*'FLOTTANT' ;
  1094. sino ;
  1095. erre '***** ERREUR : on attend le mot-cle VITE.' ;
  1096. quit soudage ;
  1097. fins ;
  1098. sino ;
  1099. vdep1 = tab1.vitesse_de_deplacement ;
  1100. fins ;
  1101. wtab1 . vdep = vdep1 ;
  1102. dt1 = ll1 / vdep1 ;
  1103. si idtcp1 ;
  1104. dt1 = dt1 + dtcp1 ;
  1105. fins ;
  1106.  
  1107. * Evolution puissance DEPLA MAIL :
  1108. si idebut1 ;
  1109. ltps1 = prog 0. dt1 ;
  1110. lqtot1 = prog qtot1 qtot1 ;
  1111. lqi1 = prog 1. 1. ;
  1112. sino ;
  1113. ltps0 = extr evqtot0 absc ;
  1114. tps0 = extr ltps0 (dime ltps0) ;
  1115. * Si la puissance indiquee est differente de celle existante :
  1116. si idtcp1 ;
  1117. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1118. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1119. lqtot1 = prog qtot1 qtot1 ;
  1120. sino ;
  1121. lti1 = prog tps0 (tps0 + dt1) ;
  1122. ltps1 = prog (tps0 + dt1) ;
  1123. lqtot1 = prog qtot1 ;
  1124. fins ;
  1125. ltps1 = ltps0 et ltps1 ;
  1126. lqtot1 = lqtot0 et lqtot1 ;
  1127. fins ;
  1128. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  1129. tab1.evolution_puissance = evqtot1 ;
  1130.  
  1131. * Evolution debit DEPLA MAIL :
  1132. si idebut1 ;
  1133. ltps1 = prog 0. dt1 ;
  1134. ldebi1 = prog debi1 debi1 ;
  1135. sino ;
  1136. ltps0 = extr evdebi0 absc ;
  1137. tps0 = extr ltps0 (dime ltps0) ;
  1138. * Si la puissance indiquee est differente de celle existante :
  1139. si idtcp1 ;
  1140. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1141. ldebi1 = prog debi1 debi1 ;
  1142. sino ;
  1143. ltps1 = prog (tps0 + dt1) ;
  1144. ldebi1 = prog debi1 ;
  1145. fins ;
  1146. ltps1 = ltps0 et ltps1 ;
  1147. ldebi1 = ldebi0 et ldebi1 ;
  1148. fins ;
  1149. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  1150. tab1.evolution_debit = evdebi1 ;
  1151.  
  1152. * Evolution deplacement DEPLA MAIL :
  1153. si idebut1 ;
  1154. ltps1 = prog 0. dt1 ;
  1155. ldep1 = prog 0. ll1 ;
  1156. sino ;
  1157. evdep0 = tab1.evolution_deplacement ;
  1158. ltps0 = extr evdep0 absc ;
  1159. ldep0 = extr evdep0 ordo ;
  1160. tps0 = extr ltps0 (dime ltps0) ;
  1161. dep0 = extr ldep0 (dime ldep0) ;
  1162. si idtcp1 ;
  1163. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1164. ldep1 = prog dep0 (dep0 + ll1) ;
  1165. sino ;
  1166. ltps1 = prog (tps0 + dt1) ;
  1167. ldep1 = prog (dep0 + ll1) ;
  1168. fins ;
  1169. ltps1 = ltps0 et ltps1 ;
  1170. ldep1 = ldep0 et ldep1 ;
  1171. fins ;
  1172. evdep1 = evol vert manu temp ltps1 ldep1 ;
  1173. tab1.evolution_deplacement = evdep1 ;
  1174.  
  1175. quit soudage ;
  1176. * Fin option DEPLA MAIL :
  1177. fins ;
  1178.  
  1179. *---------------------------- DEPLA COUCHE ----------------------------*
  1180. * Sous-option COUCHE :
  1181. si (ega mot2 'COUCHE') ;
  1182. icas2 = 4 ;
  1183.  
  1184. * Option PAUSE :
  1185. imot3 = faux ; imot4 = faux ; imot5 = faux ;
  1186. repe b1 3 ;
  1187. argu mot3/'MOT' ;
  1188. si (non (exis mot3)) ; quit b1; fins ;
  1189. si (ega mot3 'VITE') ;
  1190. imot3 = vrai ;
  1191. argu flot2*'FLOTTANT' ;
  1192. fins ;
  1193. si (ega mot3 'DEBI') ;
  1194. imot4 = vrai ;
  1195. argu flot3*'FLOTTANT' ;
  1196. fins ;
  1197. si (ega mot3 'PAUSE') ;
  1198. imot5 = vrai ;
  1199. argu flot4*'FLOTTANT' ;
  1200. fins ;
  1201. fin b1 ;
  1202.  
  1203. * Epaisseur de la couche :
  1204. si imot3 ;
  1205. Vpf1 = flot2 ;
  1206. sino ;
  1207. Vpf1 = tab1.vitesse_de_soudage ;
  1208. fins ;
  1209. si imot4 ;
  1210. Dpf1 = flot3 ;
  1211. sino ;
  1212. Dpf1 = tab1.debit_de_fil ;
  1213. fins ;
  1214. *List Dpf1 ;
  1215. si (exis tab1 'LARGEUR_DE_PASSE') ;
  1216. Lpf1 = tab1.largeur_de_passe ;
  1217. sinon ;
  1218. erre '***** ERREUR : il manque la donnee de la largeur de passe.' ;
  1219. quit soudage ;
  1220. finsi ;
  1221. epf1 = Dpf1 / Vpf1 / Lpf1 ;
  1222. *List epf1 ;
  1223.  
  1224. * Pause :
  1225. si imot5 ;
  1226. vdep2 = epf1 / flot4 ;
  1227. sino ;
  1228. vdep2 = tab1.vitesse_de_deplacement ;
  1229. fins ;
  1230. soudage tab1 depla droi (0 0 epf1) vite vdep2 ;
  1231.  
  1232. * Fin option DEPLA COUCHE :
  1233. fins ;
  1234.  
  1235. si (icas2 ega 0) ;
  1236. erre '***** ERREUR : MOT option non reconnu.' ;
  1237. quit soudage ;
  1238. fins ;
  1239.  
  1240. * Fin option DEPLA :
  1241. fins ;
  1242.  
  1243. *----------------------------------------------------------------------*
  1244. * Option MAIL *
  1245. *----------------------------------------------------------------------*
  1246.  
  1247. si (ega mot1 'MAIL') ;
  1248. icas1 = 4 ;
  1249.  
  1250. *----------------------- Lecture des arguments ------------------------*
  1251.  
  1252. * Lecture maillage cordons :
  1253. argu mail1*'MAILLAGE' ;
  1254.  
  1255. * Lecture facultative liste ordonnancement couleurs ;
  1256. argu list1/'LISTENTI' ;
  1257. ilist1 = exis list1 ;
  1258. si (non ilist1) ;
  1259. argu list1/'LISTMOTS' ;
  1260. ilist1 = exis list1 ;
  1261. fins ;
  1262.  
  1263. * Lecture du mot 'PAS' ;
  1264. argu mot1*'MOT' ;
  1265. si (neg mot1 'PAS') ;
  1266. erre '***** ERREUR : on attend le mot-cle PAS' ;
  1267. quit soudage ;
  1268. sino ;
  1269. argu flot1*'FLOTTANT' ;
  1270. fins ;
  1271.  
  1272. * Lecture option 'TEMP' ;
  1273. argu mot2/'MOT' ;
  1274. imot2 = faux ;
  1275. si (exis mot2) ;
  1276. imot2 = ega mot2 'TEMP' ;
  1277. si (imot2) ;
  1278. argu flot2/'FLOTTANT' ;
  1279. si (non (exis flot2)) ;
  1280. flot2 = -1. ;
  1281. fins ;
  1282. sino ;
  1283. erre '***** ERREUR : on attend le mot-cle TEMP' ;
  1284. quit soudage ;
  1285. fins ;
  1286. fins ;
  1287.  
  1288. *----------------------- Indexation du maillage -----------------------*
  1289.  
  1290. * Informations trajectoire :
  1291. ltraj1 = tab1.trajectoire ;
  1292. chxs1 = ltraj1 coor curv ;
  1293. x1 y1 z1 = mail1 coor ;
  1294.  
  1295. * Informations evolution deplacements :
  1296. evxs1 = tab1.evolution_deplacement ;
  1297. ltxs1 = extr evxs1 absc ;
  1298. lxxs1 = extr evxs1 ordo ;
  1299. nbxs1 = dime lxxs1 ;
  1300. *list ltxs1 ;
  1301. *list lxxs1 ;
  1302.  
  1303. * Information apport de matiere :
  1304. evdf1 = tab1.evolution_debit ;
  1305. ldeb1 = extr evdf1 ordo ;
  1306.  
  1307. * tolerance dimensionnelle :
  1308. tol1 = 1.e-10 * (maxi ltxs1) ;
  1309. tol2 = 1.e-6 * (maxi ldeb1) ;
  1310.  
  1311. * Table resultat :
  1312. tab2 = table ;
  1313. tab2 . maillage = mail1 ;
  1314. tab2 . evolution_maillage = table ;
  1315. tab2 . evolution_maillage . temps = table ;
  1316. tab2 . evolution_maillage . maillage = table ;
  1317. ttps1 = table ;
  1318. tmai1 = table ;
  1319.  
  1320. * Boucle sur les segents rouges de la trajectoire :
  1321. nb1 = nbel ltraj1 ;
  1322. geoi1 = vide maillage ;
  1323. indi1 = 0 ;
  1324. ic1 = 1 ;
  1325. repe b1 nb1 ;
  1326. eli1 = ltraj1 elem &b1 ;
  1327.  
  1328. * Si pas trajectoire d'une passe, on saute en changeant de couleur :
  1329. isuidep1 = vrai ;
  1330. si (neg ((eli1 elem coul) extr 1) 'ROUG') ;
  1331. ic1 = ic1 + 1 ;
  1332. iter b1 ;
  1333. sino ;
  1334. si (&b1 neg nb1) ;
  1335. eli2 = ltraj1 elem (&b1 + 1) ;
  1336. isuidep1 = ega ((eli2 elem coul) extr 1) 'VERT' ;
  1337. fins ;
  1338. fins ;
  1339. *list isuidep1 ;
  1340.  
  1341. * Maillage cordon passe ic1 :
  1342. pi1 = eli1 poin 1 ;
  1343. xspi1 = chxs1 extr pi1 scal ;
  1344. si ilist1 ;
  1345. couli1 = extr list1 ic1 ;
  1346. si (ega (type couli1) 'MOT') ;
  1347. maili1 = mail1 elem couli1 ;
  1348. sino ;
  1349. maili1 = mail1 elem coul couli1 ;
  1350. fins ;
  1351. sino ;
  1352. maili1 = mail1 elem coul ic1 ;
  1353. fins ;
  1354. pci1 = maili1 poin proc pi1 ;
  1355. tpi1 = maili1 part nesc conn ;
  1356. repe bp1 (dime tpi1) ;
  1357. maili1 = tpi1.&bp1 ;
  1358. si (pci1 dans maili1) ; quit bp1 ; fins ;
  1359. fin bp1 ;
  1360.  
  1361. * Champ de distance du cordon le long de ce segment
  1362. pi2 = eli1 poin 2 ;
  1363. xspi2 = chxs1 extr pi2 scal ;
  1364. ni1 = (pi2 moin pi1) / (mesu eli1) ;
  1365. x1 y1 z1 = maili1 coor ;
  1366. xp1 yp1 zp1 = pi1 coor ;
  1367. xni1 yni1 zni1 = ni1 coor ;
  1368. chdi1 = ((x1 - xp1) * xni1) + ((y1 - yp1) * yni1) + ((z1 - zp1) * zni1) ;
  1369. chdi2 = chan cham chdi1 maili1 ;
  1370.  
  1371. * Extraction evolution deplacement sur ce segment :
  1372. lxxsi1 = prog xspi1 xspi2 ;
  1373. ltxsi1 = prog ;
  1374. repe bxs1 nbxs1 ;
  1375. xxsi1 = extr lxxs1 (nbxs1 + 1 - &bxs1) ;
  1376. txxix = extr ltxs1 (nbxs1 + 1 - &bxs1) ;
  1377. si (non (xxsi1 < (xspi2 - tol1))) ;
  1378. txxi2 = txxix ;
  1379. fins ;
  1380. xxsi1 = extr lxxs1 &bxs1 ;
  1381. si (non (xxsi1 > (xspi1 + tol1))) ;
  1382. txxi1 = extr ltxs1 &bxs1 ;
  1383. fins ;
  1384. fin bxs1 ;
  1385. ltxsi1 = prog txxi1 txxi2 ;
  1386. *list lxxsi1 ;
  1387. *list ltxsi1 ;
  1388. * erre 21 ;
  1389.  
  1390. * Sequencage maillage cordon selon pas fourni :
  1391. nb2 = ((mesu eli1) / flot1 + 0.5) enti ;
  1392. nb2 = maxi (lect 1 nb2) ;
  1393. *list nb2 ;
  1394. xsi1 = 0. ;
  1395. repe b2 nb2 ;
  1396. xsi2 = xsi1 + flot1 ;
  1397. si (xsi2 > (mesu eli1)) ;
  1398. xsi2 = mesu eli1 ;
  1399. fins ;
  1400. si ((&b2 ega nb2) et isuidep1) ;
  1401. xsi2 = maxi chdi2 ;
  1402. *mess '*** Maxi !' ;
  1403. fins ;
  1404. *mess (chai 'It. , Maxi chdi2 / xsi2 =' &B2 ' , ' (maxi chdi2) ' / ' xsi2) ;
  1405. geoi2 = chdi2 elem egin (xsi2 + tol1) larg ;
  1406. *list resu geoi2 ;
  1407. *si (vide geoi1) ; trac face geoi2 ;
  1408. *sino ; trac ((geoi1 aret) et geoi2) face ;
  1409. *fins ;
  1410. tmai1 . indi1 = geoi1 et geoi2 ;
  1411. ti2 = ipol (xspi1 + xsi1) lxxsi1 ltxsi1 ;
  1412. ttps1 . indi1 = ti2 ;
  1413. indi1 = indi1 + 1 ;
  1414. xsi1 = xsi2 ;
  1415. fin b2 ;
  1416. geoi1 = geoi1 et geoi2 ;
  1417.  
  1418. * Retrait du maillage deja indexe au maillage total -> reste a faire
  1419. mail1 = mail1 diff geoi1 ;
  1420. fin b1 ;
  1421. tab2 . evolution_maillage . temps = ttps1 ;
  1422. tab2 . evolution_maillage . maillage = tmai1 ;
  1423.  
  1424. *-------------------------- Sous-option TEMP --------------------------*
  1425.  
  1426. si imot2 ;
  1427.  
  1428. * Valeurs par defaut flot2 :
  1429. si (flot2 < 0.) ;
  1430. flot2 = flot1 / (tab1.vitesse_de_soudage) / pi / 3. ;
  1431. *list flot2 ;
  1432. fins ;
  1433.  
  1434. * Redecoupage de la liste des temps de l'evolution de la puissance thermique :
  1435. evqt1 = tab1.evolution_puissance ;
  1436. ltqt1 = extr evqt1 absc ;
  1437. lqqt1 = extr evqt1 ordo ;
  1438. tol2 = 1.e-6 * (maxi lqqt1) ;
  1439.  
  1440. nb1 = dime ltqt1 ;
  1441. t0 = extr ltqt1 1 ;
  1442. q0 = extr lqqt1 1 ;
  1443. ltca1 = prog t0 ;
  1444. repe b1 (nb1 - 1) ;
  1445. ip1 = &b1 + 1 ;
  1446. t1 = extr ltqt1 ip1 ;
  1447. q1 = extr lqqt1 ip1 ;
  1448. dt1 = t1 - t0 ;
  1449. si (&b1 ega 1) ; dt0 = dt1 ; fins ;
  1450. si (dt1 &lt;EG flot2) ;
  1451. ltca1 = ltca1 et (prog t1) ;
  1452. t0 = t1 ;
  1453. q0 = q1 ;
  1454. dt0 = dt1 ;
  1455. iter b1 ;
  1456. fins ;
  1457. si ((q0 > tol2) ou (q1 > tol2)) ;
  1458. ltca1 = ltca1 et ((prog t0 pas flot2 t1) enle 1) ;
  1459. sino ;
  1460. * mess 'dt0 = ' dt0 ;
  1461. * mess 'flot2 = ' flot2 ;
  1462. * mess 'dtf1 = ' dtf1 ;
  1463. ltca1 = ltca1 et ((prog t0 pas dt0 geom 2. t1) enle 1) ;
  1464. fins ;
  1465. t0 = t1 ;
  1466. q0 = q1 ;
  1467. ntca1 = dime ltca1 ;
  1468. dt0 = (ltca1 extr ntca1) - (ltca1 extr (ntca1-1)) ;
  1469. fin b1 ;
  1470.  
  1471. * Verification si liste temps calcules bien ordonnee :
  1472. ltca2 = ordo ltca1 ;
  1473. si (((ltca2 - ltca1) maxi abs) > (1.e-3*flot2)) ;
  1474. erre '***** ERREUR WAAM dans construction liste TEMPS_CALCULES' ;
  1475. quit waam ;
  1476. fins ;
  1477.  
  1478. tab2.temps_calcules = ltca1 ;
  1479.  
  1480. * Fin sous-option TEMP :
  1481. fins ;
  1482.  
  1483. * Sortie de la table resultat :
  1484. resp tab2 ;
  1485. quit soudage ;
  1486.  
  1487. * Fin option MAIL :
  1488. fins ;
  1489.  
  1490. *----------------------------------------------------------------------*
  1491. * FIN *
  1492. *----------------------------------------------------------------------*
  1493.  
  1494. * MOT1 n'est pas un des mots-cles des options de la procedure :
  1495. si (icas1 ega 0) ;
  1496. erre '***** ERREUR : MOT-cle option SOUDAGE non reconnu.' ;
  1497. quit soudage ;
  1498. fins ;
  1499.  
  1500. FINP ;
  1501.  
  1502.  
  1503.  
  1504.  
  1505.  
  1506.  
  1507.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales