Télécharger soudage.procedur

Retour à la liste

Numérotation des lignes :

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

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