Télécharger soudage.procedur

Retour à la liste

Numérotation des lignes :

  1. * SOUDAGE PROCEDUR SP204843 23/07/07 21:15:08 11702
  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 / 4 pour POINT / PASSE / DEPLA / MAIL
  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 ; imot4 = faux ;
  109. ieve1 = faux ;
  110. repe b1 3 ;
  111. argu MOT2/'MOT' ;
  112. si (non (exis mot2)) ; quit B1 ; fins ;
  113. si (ega mot2 'PUIS') ;
  114. imot2 = vrai ;
  115. argu qtot1*'FLOTTANT' ;
  116. fins ;
  117. si (ega mot2 'DEBI') ;
  118. imot3 = vrai ;
  119. argu debi1*'FLOTTANT' ;
  120. fins ;
  121. si (ega mot2 'EVEN') ;
  122. imot4 = vrai ;
  123. argu even1*'MOT' ;
  124. argu teve1/'FLOTTANT' ;
  125. ieve1 = exis teve1 ;
  126. fins ;
  127. fin b1 ;
  128. si (non imot2) ;
  129. qtot1 = tab1.puissance_de_soudage ;
  130. fins ;
  131. wtab1 . puis = qtot1 ;
  132. si (non imot3) ;
  133. debi1 = tab1.debit_de_fil ;
  134. fins ;
  135. wtab1 . debi = debi1 ;
  136. *list qtot1 ;
  137. *list debi1 ;
  138. *list idebut1 ;
  139. *
  140. * Ajout ou pas du temps de coupure option POINT :
  141. idtcp1 = faux ;
  142. si (non idebut1) ;
  143. evqtot0 = tab1.evolution_puissance ;
  144. lqtot0 = extr evqtot0 ordo ;
  145. qtot0 = extr lqtot0 (dime lqtot0) ;
  146. idtcp1 = (abs(qtot0-qtot1)) > (abs(1.e-4*qtot1)) ;
  147.  
  148. evdebi0 = tab1.evolution_debit ;
  149. ldebi0 = extr evdebi0 ordo ;
  150. debi0 = extr ldebi0 (dime ldebi0) ;
  151. idtcp1 = idtcp1 ou ((abs(debi0-debi1)) > (abs(1.e-4*debi1))) ;
  152. fins ;
  153. * idtcp1 = idtcp1 ou ieve1 ;
  154. si idtcp1 ;
  155. * si ieve1 ;
  156. * dtcp1 = teve1 ;
  157. * sino ;
  158. dtcp1 = tab1.temps_de_coupure ;
  159. * fins ;
  160. flot1 = flot1 + dtcp1 ;
  161. fins ;
  162.  
  163. * Evolution puissance option POINT :
  164. si idebut1 ;
  165. ltps1 = prog 0. flot1 ;
  166. lqtot1 = prog qtot1 qtot1 ;
  167. lti1 = ltps1 ;
  168. sino ;
  169. evqtot0 = tab1.evolution_puissance ;
  170. ltps0 = extr evqtot0 absc ;
  171. lqtot0 = extr evqtot0 ordo ;
  172. tps0 = extr ltps0 (dime ltps0) ;
  173. qtot0 = extr lqtot0 (dime lqtot0) ;
  174. * Si la puissance indiquee est differente de celle existante :
  175. si ((abs(qtot0-qtot1)) > (abs(1.e-4*qtot1))) ;
  176. * Ajout temps de coupure au temps de realisation du POINT :
  177. ltps1 = prog (tps0 + dtcp1) (tps0 + flot1) ;
  178. lqtot1 = prog qtot1 qtot1 ;
  179. sino ;
  180. ltps1 = prog (tps0 + flot1) ;
  181. lqtot1 = prog qtot1 ;
  182. fins ;
  183. lti1 = prog tps0 (tps0 + flot1) ;
  184. ltps1 = ltps0 et ltps1 ;
  185. lqtot1 = lqtot0 et lqtot1 ;
  186. fins ;
  187. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  188. tab1.evolution_puissance = evqtot1 ;
  189.  
  190. * Evolution debit POINT :
  191. si idebut1 ;
  192. ltps1 = prog 0. flot1 ;
  193. ldebi1 = prog debi1 debi1 ;
  194. sino ;
  195. evdebi0 = tab1.evolution_debit ;
  196. ltps0 = extr evdebi0 absc ;
  197. ldebi0 = extr evdebi0 ordo ;
  198. tps0 = extr ltps0 (dime ltps0) ;
  199. debi0 = extr ldebi0 (dime ldebi0) ;
  200. * Si la puissance indiquee est differente de celle existante :
  201. si ((abs(debi0-debi1)) > (abs(1.e-4*debi1))) ;
  202. * Ajout temps de coupure au temps de realisation du POINT :
  203. ltps1 = prog (tps0 + dtcp1) (tps0 + flot1) ;
  204. ldebi1 = prog debi1 debi1 ;
  205. lqi1 = prog 1. 1. ;
  206. sino ;
  207. ltps1 = prog (tps0 + flot1) ;
  208. ldebi1 = prog debi1 ;
  209. lqi1 = prog 1. ;
  210. fins ;
  211. ltps1 = ltps0 et ltps1 ;
  212. ldebi1 = ldebi0 et ldebi1 ;
  213. fins ;
  214. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  215. tab1.evolution_debit = evdebi1 ;
  216.  
  217. * Evolution deplacement POINT :
  218. si idebut1 ;
  219. ltps1 = prog 0. flot1 ;
  220. ldep1 = prog 0. 0. ;
  221. tps0 = 0. ;
  222. sino ;
  223. evdep0 = tab1.evolution_deplacement ;
  224. ltps0 = extr evdep0 absc ;
  225. ldep0 = extr evdep0 ordo ;
  226. tps0 = extr ltps0 (dime ltps0) ;
  227. dep0 = extr ldep0 (dime ldep0) ;
  228. ltps1 = prog (tps0 + flot1) ;
  229. ldep1 = prog dep0 ;
  230. ltps1 = ltps0 et ltps1 ;
  231. ldep1 = ldep0 et ldep1 ;
  232. fins ;
  233. evdep1 = evol vert manu temp ltps1 ldep1 ;
  234. tab1.evolution_deplacement = evdep1 ;
  235.  
  236. * Evenement :
  237. si imot4 ;
  238. si (exis tab1 'EVENEMENTS') ;
  239. nbev1 = (dime tab1.evenements) + 1 ;
  240. sino ;
  241. tab1.evenements = table ;
  242. nbev1 = 1 ;
  243. fins ;
  244. tab1.evenements.nbev1 = table ;
  245. ttev1 = tab1.evenements.nbev1 ;
  246. ttev1 . nom = even1 ;
  247. si ieve1 ;
  248. ttev1 . temps = prog tps0 (tps0 + teve1) ;
  249. sino ;
  250. ttev1 . temps = prog tps0 ;
  251. fins ;
  252. fins ;
  253.  
  254. * Enregistrement donnees POINT
  255. tab1.points.npt1.point = P1 ;
  256. tab1.points.npt1.instants = lti1 ;
  257. tab1.points.npt1.puissance = qtot1 ;
  258. tab1.points.npt1.debit = debi1 ;
  259.  
  260. quit soudage ;
  261. * Fin option POINT :
  262. fins ;
  263.  
  264. *----------------------------------------------------------------------*
  265. * Option PASSE *
  266. *----------------------------------------------------------------------*
  267. si (ega mot1 'PASSE') ;
  268. icas1 = 2 ;
  269.  
  270. * Lecture des arguments de l'option :
  271. argu MOT2*'MOT' ;
  272.  
  273. * Triatement particulier option CERC ordre arguments :
  274. si (ega mot2 'CERC') ;
  275. argu N1/ENTIER ;
  276. fins ;
  277.  
  278. * Lecture arguments RELA/ABSO, VITE, PUIS, DEBI
  279. imot3 = faux ; imot4 = faux ; imot5 = faux ; imot6 = faux ; imot7 = faux ;
  280. irela1 = vrai ;
  281. ieve1 = faux ;
  282. repe b1 5 ;
  283. argu mot3/'MOT' ;
  284. si (non (exis mot3)) ; quit b1; fins ;
  285. si (ega mot3 'ABSO') ;
  286. imot3 = vrai ;
  287. irela1 = faux ;
  288. fins ;
  289. si (ega mot3 'VITE') ;
  290. imot4 = vrai ;
  291. argu vdep1*'FLOTTANT' ;
  292. fins ;
  293. si (ega mot3 'PUIS') ;
  294. imot5 = vrai ;
  295. argu qtot1*'FLOTTANT' ;
  296. fins ;
  297. si (ega mot3 'DEBI') ;
  298. imot6 = vrai ;
  299. argu debi1*'FLOTTANT' ;
  300. fins ;
  301. si (ega mot3 'EVEN') ;
  302. imot7 = vrai ;
  303. argu even1*'MOT' ;
  304. argu teve1/'FLOTTANT' ;
  305. ieve1 = exis teve1 ;
  306. fins ;
  307. fin b1 ;
  308.  
  309. * Vitesse & Increment de temps PASSE :
  310. si (non imot4) ;
  311. vdep1 = tab1.vitesse_de_soudage ;
  312. fins ;
  313. wtab1 . vsou = vdep1 ;
  314.  
  315. * Puissance PASSE :
  316. si (non imot5) ;
  317. qtot1 = tab1.puissance_de_soudage ;
  318. fins ;
  319. wtab1 . puis = qtot1 ;
  320.  
  321. * Debit PASSE :
  322. si (non imot6) ;
  323. debi1 = tab1.debit_de_fil ;
  324. fins ;
  325. wtab1 . debi = debi1 ;
  326. *list vdep1 ;
  327. *list qtot1 ;
  328. *list debi1 ;
  329.  
  330. * Ajout ou pas du temps de coupure option PASSE :
  331. idtcp1 = faux ;
  332. si ((non idebut1)) ;
  333. evqtot0 = tab1.evolution_puissance ;
  334. lqtot0 = extr evqtot0 ordo ;
  335. qtot0 = extr lqtot0 (dime lqtot0) ;
  336. idtcp1 = (abs(qtot0-qtot1)) > (abs(1.e-4*qtot1)) ;
  337.  
  338. evdebi0 = tab1.evolution_debit ;
  339. ldebi0 = extr evdebi0 ordo ;
  340. debi0 = extr ldebi0 (dime ldebi0) ;
  341. idtcp1 = idtcp1 ou ((abs(debi0-debi1)) > (abs(1.e-4*debi1))) ;
  342. fins ;
  343. * idtcp1 = idtcp1 ou ieve1 ;
  344. *list idtcp1 ;
  345. si idtcp1 ;
  346. * si ieve1 ;
  347. * dtcp1 = teve1 ;
  348. * sino ;
  349. dtcp1 = tab1.temps_de_coupure ;
  350. * fins ;
  351. fins ;
  352.  
  353. * Initialisation enregistrement donnees PASSE :
  354. si (exis tab1 passes) ;
  355. nps1 = dime tab1.passes ;
  356. sino ;
  357. nps1 = 0 ;
  358. tab1.passes = table ;
  359. fins ;
  360. nps1 = nps1 + 1 ;
  361. tab1.passes.nps1 = table ;
  362.  
  363. * icas2 = indicateur sous-option realisee :
  364. icas2 = 0 ;
  365.  
  366. *----------------------------- PASSE DROI -----------------------------*
  367. * Sous-option DROI :
  368. si (ega mot2 'DROI') ;
  369. icas2 = 1 ;
  370.  
  371. * Lecture du point :
  372. argu P1*'POINT' ;
  373. P1 = P1 plus Pnul1 ;
  374.  
  375. * Trajectoire PASSE DROI :
  376. si idebut1 ;
  377. P0 = tab1.point_de_depart plus Pnul1 ;
  378. * Deplacements relatifs :
  379. si irela1 ;
  380. P1 = P0 plus P1 ;
  381. fins ;
  382. mail1 = P0 droi 1 P1 ;
  383. mail1 = mail1 coul roug ;
  384. ll1 = mesu mail1 ;
  385. maili1 = mail1 ;
  386. sino ;
  387. mail0 = tab1.trajectoire ;
  388. nbpts0 = nbno mail0 ;
  389. P0 = mail0 poin nbpts0 ;
  390. * Deplacements relatifs :
  391. si irela1 ;
  392. P1 = P0 plus P1 ;
  393. fins ;
  394. mail1 = P0 droi 1 P1 ;
  395. mail1 = mail1 coul roug ;
  396. ll1 = mesu mail1 ;
  397. maili1 = mail1 ;
  398. si (nbpts0 > 1) ;
  399. mail1 = mail0 et mail1 ;
  400. fins ;
  401. fins ;
  402. tab1.trajectoire = mail1 ;
  403.  
  404. * Increment de temps :
  405. dt1 = ll1 / vdep1 ;
  406. si idtcp1 ;
  407. dt1 = dt1 + dtcp1 ;
  408. fins ;
  409.  
  410. * Evolution puissance PASSE DROI :
  411. si idebut1 ;
  412. ltps1 = prog 0. dt1 ;
  413. lqtot1 = prog qtot1 qtot1 ;
  414. lti1 = ltps1 ;
  415. sino ;
  416. ltps0 = extr evqtot0 absc ;
  417. tps0 = extr ltps0 (dime ltps0) ;
  418. * Si la puissance indiquee est differente de celle existante :
  419. si idtcp1 ;
  420. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  421. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  422. lqtot1 = prog qtot1 qtot1 ;
  423. sino ;
  424. lti1 = prog tps0 (tps0 + dt1) ;
  425. ltps1 = prog (tps0 + dt1) ;
  426. lqtot1 = prog qtot1 ;
  427. fins ;
  428. ltps1 = ltps0 et ltps1 ;
  429. lqtot1 = lqtot0 et lqtot1 ;
  430. fins ;
  431. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  432. tab1.evolution_puissance = evqtot1 ;
  433.  
  434. * Evolution debit PASSE DROI :
  435. si idebut1 ;
  436. ltps1 = prog 0. dt1 ;
  437. ldebi1 = prog debi1 debi1 ;
  438. sino ;
  439. ltps0 = extr evdebi0 absc ;
  440. tps0 = extr ltps0 (dime ltps0) ;
  441. * Si la puissance indiquee est differente de celle existante :
  442. si idtcp1 ;
  443. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  444. ldebi1 = prog debi1 debi1 ;
  445. sino ;
  446. ltps1 = prog (tps0 + dt1) ;
  447. ldebi1 = prog debi1 ;
  448. fins ;
  449. ltps1 = ltps0 et ltps1 ;
  450. ldebi1 = ldebi0 et ldebi1 ;
  451. fins ;
  452. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  453. tab1.evolution_debit = evdebi1 ;
  454.  
  455. * Evolution deplacement PASSE DROI :
  456. si idebut1 ;
  457. ltps1 = prog 0. dt1 ;
  458. ldep1 = prog 0. ll1 ;
  459. tps0 = 0. ;
  460. sino ;
  461. evdep0 = tab1.evolution_deplacement ;
  462. ltps0 = extr evdep0 absc ;
  463. ldep0 = extr evdep0 ordo ;
  464. tps0 = extr ltps0 (dime ltps0) ;
  465. dep0 = extr ldep0 (dime ldep0) ;
  466. si idtcp1 ;
  467. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  468. ldep1 = prog dep0 (dep0 + ll1) ;
  469. sino ;
  470. ltps1 = prog (tps0 + dt1) ;
  471. ldep1 = prog (dep0 + ll1) ;
  472. fins ;
  473. ltps1 = ltps0 et ltps1 ;
  474. ldep1 = ldep0 et ldep1 ;
  475. fins ;
  476. ldep1 = ldep1 / (maxi ldep1) * (mesu mail1) ;
  477. evdep1 = evol vert manu temp ltps1 ldep1 ;
  478. tab1.evolution_deplacement = evdep1 ;
  479.  
  480. * Evenement :
  481. si imot7 ;
  482. si (exis tab1 'EVENEMENTS') ;
  483. nbev1 = (dime tab1.evenements) + 1 ;
  484. sino ;
  485. tab1.evenements = table ;
  486. nbev1 = 1 ;
  487. fins ;
  488. tab1.evenements.nbev1 = table ;
  489. ttev1 = tab1.evenements.nbev1 ;
  490. ttev1 . nom = even1 ;
  491. si ieve1 ;
  492. ttev1 . temps = prog tps0 (tps0 + teve1) ;
  493. sino ;
  494. ttev1 . temps = prog tps0 ;
  495. fins ;
  496. fins ;
  497.  
  498. * Enregistrement donnees PASSE DROI
  499. tab1.passes.nps1.maillage = maili1 ;
  500. tab1.passes.nps1.geometrie = mot 'DROI' ;
  501. tab1.passes.nps1.instants = lti1 ;
  502. tab1.passes.nps1.vitesse = vdep1 ;
  503. tab1.passes.nps1.puissance = qtot1 ;
  504. tab1.passes.nps1.debit = debi1 ;
  505.  
  506. si (exis tab1 'LARGEUR_DE_PASSE') ;
  507. tab1.passes.nps1.largeur = tab1.largeur_de_passe ;
  508. fins ;
  509.  
  510. quit soudage ;
  511. * Fin option PASSE DROI :
  512. fins ;
  513.  
  514. *----------------------------- PASSE CERC -----------------------------*
  515. * Sous-option CERC :
  516. si (ega mot2 'CERC') ;
  517. icas2 = 2 ;
  518.  
  519. * P1 est le centre du cercle, P2, l'extremite de la trajectoire
  520. argu P2*'POINT' P1*'POINT' ;
  521. P1 = P1 plus Pnul1 ;
  522. P2 = P2 plus Pnul1 ;
  523.  
  524. * Trajectoire PASSE CERC :
  525. si idebut1 ;
  526. P0 = tab1.point_de_depart plus Pnul1 ;
  527. * Deplacements relatifs :
  528. si irela1 ;
  529. P1 = P0 plus P1 ;
  530. P2 = P0 plus P2 ;
  531. fins ;
  532. si (non (exis N1)) ;
  533. V1 = P0 moin P1 ;
  534. V2 = P2 moin P1 ;
  535. V1 = V1 / (norm V1) ;
  536. V2 = V2 / (norm V2) ;
  537. N1 = (acos (psca V1 V2)) / 5. ;
  538. N1 = maxi (lect (enti N1) 1) ;
  539. fins ;
  540. mail1 = CERC N1 P0 P1 P2 ;
  541. mail1 = mail1 coul roug ;
  542. maili1 = mail1 ;
  543. ll1 = mesu mail1 ;
  544. sino ;
  545. mail0 = tab1.trajectoire ;
  546. nbpts0 = nbno mail0 ;
  547. P0 = mail0 poin nbpts0 ;
  548. * Deplacements relatifs :
  549. si irela1 ;
  550. P1 = P0 plus P1 ;
  551. P2 = P0 plus P2 ;
  552. fins ;
  553. si (non (exis N1)) ;
  554. V1 = P0 moin P1 ;
  555. V2 = P2 moin P1 ;
  556. V1 = V1 / (norm V1) ;
  557. V2 = V2 / (norm V2) ;
  558. N1 = (acos (psca V1 V2)) / 5. ;
  559. N1 = maxi (lect (enti N1) 1) ;
  560. fins ;
  561. mail1 = CERC N1 P0 P1 P2 ;
  562. mail1 = mail1 coul roug ;
  563. maili1 = mail1 ;
  564. ll1 = mesu mail1 ;
  565. si (nbpts0 > 1) ;
  566. mail1 = mail0 et mail1 ;
  567. fins ;
  568. fins ;
  569. tab1.trajectoire = mail1 ;
  570.  
  571. * Increment de temps :
  572. dt1 = ll1 / vdep1 ;
  573. si idtcp1 ;
  574. dt1 = dt1 + dtcp1 ;
  575. fins ;
  576.  
  577. * Evolution puissance PASSE CERC :
  578. si idebut1 ;
  579. ltps1 = prog 0. dt1 ;
  580. lqtot1 = prog qtot1 qtot1 ;
  581. lti1 = ltps1 ;
  582. sino ;
  583. ltps0 = extr evqtot0 absc ;
  584. tps0 = extr ltps0 (dime ltps0) ;
  585. * Si la puissance indiquee est differente de celle existante :
  586. si idtcp1 ;
  587. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  588. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  589. lqtot1 = prog qtot1 qtot1 ;
  590. sino ;
  591. lti1 = prog tps0 (tps0 + dt1) ;
  592. ltps1 = prog (tps0 + dt1) ;
  593. lqtot1 = prog qtot1 ;
  594. fins ;
  595. ltps1 = ltps0 et ltps1 ;
  596. lqtot1 = lqtot0 et lqtot1 ;
  597. fins ;
  598. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  599. tab1.evolution_puissance = evqtot1 ;
  600.  
  601. * Evolution debit PASSE CERC :
  602. si idebut1 ;
  603. ltps1 = prog 0. dt1 ;
  604. ldebi1 = prog debi1 debi1 ;
  605. sino ;
  606. ltps0 = extr evdebi0 absc ;
  607. tps0 = extr ltps0 (dime ltps0) ;
  608. * Si la puissance indiquee est differente de celle existante :
  609. si idtcp1 ;
  610. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  611. ldebi1 = prog debi1 debi1 ;
  612. sino ;
  613. ltps1 = prog (tps0 + dt1) ;
  614. ldebi1 = prog debi1 ;
  615. fins ;
  616. ltps1 = ltps0 et ltps1 ;
  617. ldebi1 = ldebi0 et ldebi1 ;
  618. fins ;
  619. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  620. tab1.evolution_debit = evdebi1 ;
  621.  
  622. * Evolution deplacement PASSE CERC :
  623. si idebut1 ;
  624. ltps1 = prog 0. dt1 ;
  625. ldep1 = prog 0. ll1 ;
  626. tps0 = 0. ;
  627. sino ;
  628. evdep0 = tab1.evolution_deplacement ;
  629. ltps0 = extr evdep0 absc ;
  630. ldep0 = extr evdep0 ordo ;
  631. tps0 = extr ltps0 (dime ltps0) ;
  632. dep0 = extr ldep0 (dime ldep0) ;
  633. si idtcp1 ;
  634. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  635. ldep1 = prog dep0 (dep0 + ll1) ;
  636. sino ;
  637. ltps1 = prog (tps0 + dt1) ;
  638. ldep1 = prog (dep0 + ll1) ;
  639. fins ;
  640. ltps1 = ltps0 et ltps1 ;
  641. ldep1 = ldep0 et ldep1 ;
  642. fins ;
  643. ldep1 = ldep1 / (maxi ldep1) * (mesu mail1) ;
  644. evdep1 = evol vert manu temp ltps1 ldep1 ;
  645. tab1.evolution_deplacement = evdep1 ;
  646.  
  647. * Evenement :
  648. si imot7 ;
  649. si (exis tab1 'EVENEMENTS') ;
  650. nbev1 = (dime tab1.evenements) + 1 ;
  651. sino ;
  652. tab1.evenements = table ;
  653. nbev1 = 1 ;
  654. fins ;
  655. tab1.evenements.nbev1 = table ;
  656. ttev1 = tab1.evenements.nbev1 ;
  657. ttev1 . nom = even1 ;
  658. si ieve1 ;
  659. ttev1 . temps = prog tps0 (tps0 + teve1) ;
  660. sino ;
  661. ttev1 . temps = prog tps0 ;
  662. fins ;
  663. fins ;
  664.  
  665. * Enregistrement donnees PASSE CERC
  666. tab1.passes.nps1.maillage = maili1 ;
  667. tab1.passes.nps1.geometrie = mot 'CERC' ;
  668. tab1.passes.nps1.centre = P1 ;
  669. tab1.passes.nps1.instants = lti1 ;
  670. tab1.passes.nps1.vitesse = vdep1 ;
  671. tab1.passes.nps1.puissance = qtot1 ;
  672. tab1.passes.nps1.debit = debi1 ;
  673.  
  674. si (exis tab1 'LARGEUR_DE_PASSE') ;
  675. tab1.passes.nps1.largeur = tab1.largeur_de_passe ;
  676. fins ;
  677.  
  678. quit soudage ;
  679. * Fin option PASSE CERC :
  680. fins ;
  681.  
  682. *----------------------------- PASSE MAIL -----------------------------*
  683. * Sous-option MAIL :
  684. si (ega mot2 'MAIL') ;
  685. icas2 = 3 ;
  686.  
  687. argu mail1*'MAILLAGE' ;
  688. eltyp1 = mail1 elem type ;
  689. imax1 = 0 ;
  690. si (exis eltyp1 'SEG2') ; imax1 = imax1 + 1 ; fins ;
  691. si (exis eltyp1 'SEG3') ; imax1 = imax1 + 1 ; fins ;
  692. si ((dime eltyp1) > imax1) ;
  693. erre '***** ERREUR : le maillage doit etre compose de SEG2 ou de SEG3.' ;
  694. fins ;
  695. ll1 = mesu mail1 ;
  696. maili1 = mail1 ;
  697.  
  698. * Trajectoire PASSE MAIL :
  699. si idebut1 ;
  700. P1 = mail1 poin 1 ;
  701. tab1.point_de_depart = P1 ;
  702. sino ;
  703. mail0 = tab1.trajectoire ;
  704. nbpts0 = nbno mail0 ;
  705. P0 = mail0 poin nbpts0 ;
  706. P1 = mail1 poin 1 ;
  707. si (P1 neg P0) ;
  708. tol1 = 1.e-10 * (mesu mail1) ;
  709. si ((norm (P1 moin P0)) > tol1) ;
  710. erre '***** ERREUR : MAILLAGE incompatible.' ;
  711. quit soudage ;
  712. sino ;
  713. elim (P0 et P1) tol1 ;
  714. fins ;
  715. fins ;
  716. si (nbpts0 > 1) ;
  717. mail1 = mail1 coul roug ;
  718. mail1 = mail0 et mail1 ;
  719. fins ;
  720. fins ;
  721. tab1.trajectoire = mail1 ;
  722.  
  723. * Increment de temps :
  724. dt1 = ll1 / vdep1 ;
  725. si idtcp1 ;
  726. dt1 = dt1 + dtcp1 ;
  727. fins ;
  728.  
  729. * Evolution puissance PASSE MAIL :
  730. si idebut1 ;
  731. ltps1 = prog 0. dt1 ;
  732. lqtot1 = prog qtot1 qtot1 ;
  733. lti1 = ltps1 ;
  734. sino ;
  735. ltps0 = extr evqtot0 absc ;
  736. tps0 = extr ltps0 (dime ltps0) ;
  737. * Si la puissance indiquee est differente de celle existante :
  738. si idtcp1 ;
  739. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  740. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  741. lqtot1 = prog qtot1 qtot1 ;
  742. sino ;
  743. lti1 = prog tps0 (tps0 + dt1) ;
  744. ltps1 = prog (tps0 + dt1) ;
  745. lqtot1 = prog qtot1 ;
  746. fins ;
  747. ltps1 = ltps0 et ltps1 ;
  748. lqtot1 = lqtot0 et lqtot1 ;
  749. fins ;
  750. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  751. tab1.evolution_puissance = evqtot1 ;
  752.  
  753. * Evolution debit PASSE MAIL :
  754. si idebut1 ;
  755. ltps1 = prog 0. dt1 ;
  756. ldebi1 = prog debi1 debi1 ;
  757. sino ;
  758. ltps0 = extr evdebi0 absc ;
  759. tps0 = extr ltps0 (dime ltps0) ;
  760. * Si la puissance indiquee est differente de celle existante :
  761. si idtcp1 ;
  762. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  763. ldebi1 = prog debi1 debi1 ;
  764. sino ;
  765. ltps1 = prog (tps0 + dt1) ;
  766. ldebi1 = prog debi1 ;
  767. fins ;
  768. ltps1 = ltps0 et ltps1 ;
  769. ldebi1 = ldebi0 et ldebi1 ;
  770. fins ;
  771. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  772. tab1.evolution_debit = evdebi1 ;
  773.  
  774. * Evolution deplacement PASSE MAIL :
  775. si idebut1 ;
  776. ltps1 = prog 0. dt1 ;
  777. ldep1 = prog 0. ll1 ;
  778. tps0 = 0. ;
  779. sino ;
  780. evdep0 = tab1.evolution_deplacement ;
  781. ltps0 = extr evdep0 absc ;
  782. ldep0 = extr evdep0 ordo ;
  783. tps0 = extr ltps0 (dime ltps0) ;
  784. dep0 = extr ldep0 (dime ldep0) ;
  785. si idtcp1 ;
  786. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  787. ldep1 = prog dep0 (dep0 + ll1) ;
  788. sino ;
  789. ltps1 = prog (tps0 + dt1) ;
  790. ldep1 = prog (dep0 + ll1) ;
  791. fins ;
  792. ltps1 = ltps0 et ltps1 ;
  793. ldep1 = ldep0 et ldep1 ;
  794. fins ;
  795. ldep1 = ldep1 / (maxi ldep1) * (mesu mail1) ;
  796. evdep1 = evol vert manu temp ltps1 ldep1 ;
  797. tab1.evolution_deplacement = evdep1 ;
  798.  
  799. * Evenement :
  800. si imot7 ;
  801. si (exis tab1 'EVENEMENTS') ;
  802. nbev1 = (dime tab1.evenements) + 1 ;
  803. sino ;
  804. tab1.evenements = table ;
  805. nbev1 = 1 ;
  806. fins ;
  807. tab1.evenements.nbev1 = table ;
  808. ttev1 = tab1.evenements.nbev1 ;
  809. ttev1 . nom = even1 ;
  810. si ieve1 ;
  811. ttev1 . temps = prog tps0 (tps0 + teve1) ;
  812. sino ;
  813. ttev1 . temps = prog tps0 ;
  814. fins ;
  815. fins ;
  816.  
  817. * Enregistrement donnees PASSE MAIL
  818. tab1.passes.nps1.maillage = maili1 ;
  819. tab1.passes.nps1.geometrie = mot 'MAIL' ;
  820. tab1.passes.nps1.instants = lti1 ;
  821. tab1.passes.nps1.vitesse = vdep1 ;
  822. tab1.passes.nps1.puissance = qtot1 ;
  823. tab1.passes.nps1.debit = debi1 ;
  824.  
  825. si (exis tab1 'LARGEUR_DE_PASSE') ;
  826. tab1.passes.nps1.largeur = tab1.largeur_de_passe ;
  827. fins ;
  828.  
  829. quit soudage ;
  830. * Fin option PASSE MAIL :
  831. fins ;
  832.  
  833. * Si mot2 ne correspond a aucune option connue, icas2 = 0 : erreur
  834. si (icas2 ega 0) ;
  835. erre '***** ERREUR : MOT option non reconnu.' ;
  836. quit soudage ;
  837. fins ;
  838.  
  839. * Fin option PASSE :
  840. fins ;
  841.  
  842. *----------------------------------------------------------------------*
  843. * Option DEPLA *
  844. *----------------------------------------------------------------------*
  845.  
  846. si (ega mot1 'DEPLA') ;
  847. icas1 = 3 ;
  848. *
  849. * Lecture des arguments de l'option :
  850. argu MOT2*'MOT' ;
  851.  
  852. * Ajout ou pas du temps de coupure option PASSE :
  853. idtcp1 = faux ;
  854. qtot1 = 0. ;
  855. debi1 = 0. ;
  856. si ((non idebut1)) ;
  857. evqtot0 = tab1.evolution_puissance ;
  858. lqtot0 = extr evqtot0 ordo ;
  859. evdebi0 = tab1.evolution_debit ;
  860. ldebi0 = extr evdebi0 ordo ;
  861. qtot0 = extr lqtot0 (dime lqtot0) ;
  862. idtcp1 = (abs(qtot0-qtot1)) > (abs(1.e-4*qtot1)) ;
  863. debi0 = extr ldebi0 (dime ldebi0) ;
  864. idtcp1 = idtcp1 ou ((abs(debi0-debi1)) > (abs(1.e-4*debi1))) ;
  865. fins ;
  866. *list idtcp1 ;
  867. si idtcp1 ;
  868. dtcp1 = tab1.temps_de_coupure ;
  869. fins ;
  870.  
  871. * icas2 = indicateur sous-option realisee :
  872. icas2 = 0 ;
  873.  
  874. *----------------------------- DEPLA DROI -----------------------------*
  875. si (ega mot2 'DROI') ;
  876. icas2 = 1 ;
  877.  
  878. argu P1*'POINT' ;
  879. P1 = P1 plus Pnul1 ;
  880.  
  881. * Deplacement relatif / absolu :
  882. imot3 = faux ; imot4 = faux ; imot5 = faux ;
  883. irela1 = vrai ;
  884. ieve1 = faux ;
  885. repe b1 3 ;
  886. argu mot3/'MOT' ;
  887. si (non (exis mot3)) ; quit b1 ; fins ;
  888. si (ega mot3 'ABSO') ;
  889. imot3 = vrai ;
  890. irela1 = faux ;
  891. fins ;
  892. si (ega mot3 'VITE') ;
  893. imot4 = vrai ;
  894. argu vdep1*'FLOTTANT' ;
  895. fins ;
  896. si (ega mot3 'EVEN') ;
  897. imot5 = vrai ;
  898. argu even1*'MOT' ;
  899. argu teve1/'FLOTTANT' ;
  900. ieve1 = exis teve1 ;
  901. fins ;
  902. fin b1 ;
  903.  
  904. * Coupure et temps de coupure selon existence EVEN :
  905. * idtcp1 = idtcp1 ou ieve1 ;
  906. * si ieve1 ;
  907. * dtcp1 = teve1 ;
  908. * fins ;
  909.  
  910. * Trajectoire DEPLA DROI :
  911. *list idebut1 ;
  912. si idebut1 ;
  913. P0 = tab1.point_de_depart plus Pnul1 ;
  914. * Deplacements relatifs :
  915. si irela1 ;
  916. P1 = P0 plus P1 ;
  917. fins ;
  918. mail1 = P0 droi 1 P1 ;
  919. mail1 = mail1 coul vert ;
  920. ll1 = mesu mail1 ;
  921. sino ;
  922. mail0 = tab1.trajectoire ;
  923. nbpts0 = nbno mail0 ;
  924. P0 = mail0 poin nbpts0 ;
  925. *list P0 ;
  926. * Deplacements relatifs :
  927. si irela1 ;
  928. P1 = P0 plus P1 ;
  929. fins ;
  930. mail1 = P0 droi 1 P1 ;
  931. mail1 = mail1 coul vert ;
  932. ll1 = mesu mail1 ;
  933. si (nbpts0 > 1) ;
  934. mail1 = mail0 et mail1 ;
  935. fins ;
  936. fins ;
  937. tab1.trajectoire = mail1 ;
  938.  
  939. * Increment de temps DEPLA DROI :
  940. si (non imot4) ;
  941. vdep1 = tab1.vitesse_de_deplacement ;
  942. fins ;
  943. wtab1 . vdep = vdep1 ;
  944. dt1 = ll1 / vdep1 ;
  945. si idtcp1 ;
  946. dt1 = dt1 + dtcp1 ;
  947. fins ;
  948.  
  949. * Evolution puissance DEPLA DROI :
  950. si idebut1 ;
  951. ltps1 = prog 0. dt1 ;
  952. lqtot1 = prog qtot1 qtot1 ;
  953. lqi1 = prog 1. 1. ;
  954. sino ;
  955. ltps0 = extr evqtot0 absc ;
  956. tps0 = extr ltps0 (dime ltps0) ;
  957. * Si la puissance indiquee est differente de celle existante :
  958. si idtcp1 ;
  959. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  960. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  961. lqtot1 = prog qtot1 qtot1 ;
  962. sino ;
  963. lti1 = prog tps0 (tps0 + dt1) ;
  964. ltps1 = prog (tps0 + dt1) ;
  965. lqtot1 = prog qtot1 ;
  966. fins ;
  967. ltps1 = ltps0 et ltps1 ;
  968. lqtot1 = lqtot0 et lqtot1 ;
  969. fins ;
  970. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  971. tab1.evolution_puissance = evqtot1 ;
  972.  
  973. * Evolution debit DEPLA DROI :
  974. si idebut1 ;
  975. ltps1 = prog 0. dt1 ;
  976. ldebi1 = prog debi1 debi1 ;
  977. sino ;
  978. ltps0 = extr evdebi0 absc ;
  979. tps0 = extr ltps0 (dime ltps0) ;
  980. * Si la puissance indiquee est differente de celle existante :
  981. si idtcp1 ;
  982. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  983. ldebi1 = prog debi1 debi1 ;
  984. sino ;
  985. ltps1 = prog (tps0 + dt1) ;
  986. ldebi1 = prog debi1 ;
  987. fins ;
  988. ltps1 = ltps0 et ltps1 ;
  989. ldebi1 = ldebi0 et ldebi1 ;
  990. fins ;
  991. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  992. tab1.evolution_debit = evdebi1 ;
  993.  
  994. * Evolution deplacement DEPLA DROI :
  995. si idebut1 ;
  996. ltps1 = prog 0. dt1 ;
  997. ldep1 = prog 0. ll1 ;
  998. tps0 = 0. ;
  999. sino ;
  1000. evdep0 = tab1.evolution_deplacement ;
  1001. ltps0 = extr evdep0 absc ;
  1002. ldep0 = extr evdep0 ordo ;
  1003. tps0 = extr ltps0 (dime ltps0) ;
  1004. dep0 = extr ldep0 (dime ldep0) ;
  1005. si idtcp1 ;
  1006. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1007. ldep1 = prog dep0 (dep0 + ll1) ;
  1008. sino ;
  1009. ltps1 = prog (tps0 + dt1) ;
  1010. ldep1 = prog (dep0 + ll1) ;
  1011. fins ;
  1012. ltps1 = ltps0 et ltps1 ;
  1013. ldep1 = ldep0 et ldep1 ;
  1014. fins ;
  1015. ldep1 = ldep1 / (maxi ldep1) * (mesu mail1) ;
  1016. evdep1 = evol vert manu temp ltps1 ldep1 ;
  1017. tab1.evolution_deplacement = evdep1 ;
  1018.  
  1019. * Evenement :
  1020. si imot5 ;
  1021. si (exis tab1 'EVENEMENTS') ;
  1022. nbev1 = (dime tab1.evenements) + 1 ;
  1023. sino ;
  1024. tab1.evenements = table ;
  1025. nbev1 = 1 ;
  1026. fins ;
  1027. tab1.evenements.nbev1 = table ;
  1028. ttev1 = tab1.evenements.nbev1 ;
  1029. ttev1 . nom = even1 ;
  1030. si ieve1 ;
  1031. ttev1 . temps = prog tps0 (tps0 + teve1) ;
  1032. sino ;
  1033. ttev1 . temps = prog tps0 ;
  1034. fins ;
  1035. fins ;
  1036.  
  1037. quit soudage ;
  1038. * Fin option DEPLA DROI :
  1039. fins ;
  1040.  
  1041. *----------------------------- DEPLA CERC -----------------------------*
  1042. si (ega mot2 'CERC') ;
  1043. icas2 = 2 ;
  1044.  
  1045. * P1 est le centre du cercle, P2, l'extremite de la trajectoire
  1046. argu P2*'POINT' P1*'POINT' N1/'ENTIER';
  1047. P1 = P1 plus Pnul1 ;
  1048. P2 = P2 plus Pnul1 ;
  1049.  
  1050. * Deplacement relatif / absolu :
  1051. imot3 = faux ; imot4 = faux ; imot5 = faux ;
  1052. irela1 = vrai ;
  1053. ieve1 = faux ;
  1054. repe b1 3 ;
  1055. argu mot3/'MOT' ;
  1056. si (non (exis mot3)) ; quit b1 ; fins ;
  1057. si (ega mot3 'ABSO') ;
  1058. imot3 = vrai ;
  1059. irela1 = faux ;
  1060. fins ;
  1061. si (ega mot3 'VITE') ;
  1062. imot4 = vrai ;
  1063. argu vdep1*'FLOTTANT' ;
  1064. fins ;
  1065. si (ega mot3 'EVEN') ;
  1066. imot5 = vrai ;
  1067. argu even1*'MOT' ;
  1068. argu teve1/'FLOTTANT' ;
  1069. ieve1 = exis teve1 ;
  1070. fins ;
  1071. fin b1 ;
  1072.  
  1073. * Coupure et temps de coupure selon existence EVEN :
  1074. * idtcp1 = idtcp1 ou ieve1 ;
  1075. * si ieve1 ;
  1076. * dtcp1 = teve1 ;
  1077. * fins ;
  1078.  
  1079. * Trajectoire DEPLA CERC :
  1080. si idebut1 ;
  1081. P0 = tab1.point_de_depart plus Pnul1 ;
  1082. * Deplacements relatifs :
  1083. si irela1 ;
  1084. P1 = P0 plus P1 ;
  1085. P2 = P0 plus P2 ;
  1086. fins ;
  1087. * Par defaut, N1 calcule pour avoir angle de 5 deg.
  1088. si (non (exis N1)) ;
  1089. V1 = P0 moin P1 ;
  1090. V2 = P2 moin P1 ;
  1091. V1 = V1 / (norm V1) ;
  1092. V2 = V2 / (norm V2) ;
  1093. N1 = (acos (psca V1 V2)) / 5. ;
  1094. N1 = maxi (lect (enti N1) 1) ;
  1095. fins ;
  1096. mail1 = CERC N1 P0 P1 P2 ;
  1097. mail1 = mail1 coul vert ;
  1098. ll1 = mesu mail1 ;
  1099. sino ;
  1100. mail0 = tab1.trajectoire ;
  1101. nbpts0 = nbno mail0 ;
  1102. P0 = mail0 poin nbpts0 ;
  1103. * Deplacements relatifs :
  1104. si irela1 ;
  1105. P1 = P0 plus P1 ;
  1106. P2 = P0 plus P2 ;
  1107. fins ;
  1108. si (non (exis N1)) ;
  1109. V1 = P0 moin P1 ;
  1110. V2 = P2 moin P1 ;
  1111. V1 = V1 / (norm V1) ;
  1112. V2 = V2 / (norm V2) ;
  1113. N1 = (acos (psca V1 V2)) / 5. ;
  1114. N1 = maxi (lect (enti N1) 1) ;
  1115. fins ;
  1116. mail1 = CERC N1 P0 P1 P2 ;
  1117. mail1 = mail1 coul vert ;
  1118. ll1 = mesu mail1 ;
  1119. si (nbpts0 > 1) ;
  1120. mail1 = mail0 et mail1 ;
  1121. fins ;
  1122. fins ;
  1123. tab1.trajectoire = mail1 ;
  1124.  
  1125. * Increment de temps DEPLA CERC :
  1126. si (non imot4) ;
  1127. vdep1 = tab1.vitesse_de_deplacement ;
  1128. fins ;
  1129. wtab1 . vdep = vdep1 ;
  1130. dt1 = ll1 / vdep1 ;
  1131. si idtcp1 ;
  1132. dt1 = dt1 + dtcp1 ;
  1133. fins ;
  1134.  
  1135. * Evolution puissance DEPLA CERC :
  1136. icoup1 = faux ;
  1137. si idebut1 ;
  1138. ltps1 = prog 0. dt1 ;
  1139. lqtot1 = prog qtot1 qtot1 ;
  1140. lqi1 = prog 1. 1. ;
  1141. sino ;
  1142. ltps0 = extr evqtot0 absc ;
  1143. tps0 = extr ltps0 (dime ltps0) ;
  1144. * Si la puissance indiquee est differente de celle existante :
  1145. si idtcp1 ;
  1146. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1147. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1148. lqtot1 = prog qtot1 qtot1 ;
  1149. sino ;
  1150. lti1 = prog tps0 (tps0 + dt1) ;
  1151. ltps1 = prog (tps0 + dt1) ;
  1152. lqtot1 = prog qtot1 ;
  1153. fins ;
  1154. ltps1 = ltps0 et ltps1 ;
  1155. lqtot1 = lqtot0 et lqtot1 ;
  1156. fins ;
  1157. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  1158. tab1.evolution_puissance = evqtot1 ;
  1159.  
  1160. * Evolution debit DEPLA CERC :
  1161. si idebut1 ;
  1162. ltps1 = prog 0. dt1 ;
  1163. ldebi1 = prog debi1 debi1 ;
  1164. sino ;
  1165. ltps0 = extr evdebi0 absc ;
  1166. tps0 = extr ltps0 (dime ltps0) ;
  1167. * Si la puissance indiquee est differente de celle existante :
  1168. si idtcp1 ;
  1169. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1170. ldebi1 = prog debi1 debi1 ;
  1171. sino ;
  1172. ltps1 = prog (tps0 + dt1) ;
  1173. ldebi1 = prog debi1 ;
  1174. fins ;
  1175. ltps1 = ltps0 et ltps1 ;
  1176. ldebi1 = ldebi0 et ldebi1 ;
  1177. fins ;
  1178. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  1179. tab1.evolution_debit = evdebi1 ;
  1180.  
  1181. * Evolution deplacement DEPLA CERC :
  1182. si idebut1 ;
  1183. ltps1 = prog 0. dt1 ;
  1184. ldep1 = prog 0. ll1 ;
  1185. tps0 = 0. ;
  1186. sino ;
  1187. evdep0 = tab1.evolution_deplacement ;
  1188. ltps0 = extr evdep0 absc ;
  1189. ldep0 = extr evdep0 ordo ;
  1190. tps0 = extr ltps0 (dime ltps0) ;
  1191. dep0 = extr ldep0 (dime ldep0) ;
  1192. si idtcp1 ;
  1193. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1194. ldep1 = prog dep0 (dep0 + ll1) ;
  1195. sino ;
  1196. ltps1 = prog (tps0 + dt1) ;
  1197. ldep1 = prog (dep0 + ll1) ;
  1198. fins ;
  1199. ltps1 = ltps0 et ltps1 ;
  1200. ldep1 = ldep0 et ldep1 ;
  1201. fins ;
  1202. ldep1 = ldep1 / (maxi ldep1) * (mesu mail1) ;
  1203. evdep1 = evol vert manu temp ltps1 ldep1 ;
  1204. tab1.evolution_deplacement = evdep1 ;
  1205.  
  1206. * Evenement :
  1207. si imot5 ;
  1208. si (exis tab1 'EVENEMENTS') ;
  1209. nbev1 = (dime tab1.evenements) + 1 ;
  1210. sino ;
  1211. tab1.evenements = table ;
  1212. nbev1 = 1 ;
  1213. fins ;
  1214. tab1.evenements.nbev1 = table ;
  1215. ttev1 = tab1.evenements.nbev1 ;
  1216. ttev1 . nom = even1 ;
  1217. si ieve1 ;
  1218. ttev1 . temps = prog tps0 (tps0 + teve1) ;
  1219. sino ;
  1220. ttev1 . temps = prog tps0 ;
  1221. fins ;
  1222. fins ;
  1223.  
  1224. quit soudage ;
  1225. * Fin option DEPLA CERC :
  1226. fins ;
  1227.  
  1228. *----------------------------- DEPLA MAIL -----------------------------*
  1229. * Sous-option MAIL :
  1230. si (ega mot2 'MAIL') ;
  1231. icas2 = 3 ;
  1232.  
  1233. argu mail1*'MAILLAGE' ;
  1234. eltyp1 = mail1 elem type ;
  1235. imax1 = 0 ;
  1236. si (exis eltyp1 'SEG2') ; imax1 = imax1 + 1 ; fins ;
  1237. si (exis eltyp1 'SEG3') ; imax1 = imax1 + 1 ; fins ;
  1238. si ((dime eltyp1) > imax1) ;
  1239. erre '***** ERREUR : le maillage doit etre compose de SEG2 ou de SEG3.' ;
  1240. fins ;
  1241. ll1 = mesu mail1 ;
  1242.  
  1243. * Trajectoire DEPLA MAIL :
  1244. si idebut1 ;
  1245. P1 = mail1 poin 1 ;
  1246. tab1.point_de_depart = P1 ;
  1247. sino ;
  1248. mail0 = tab1.trajectoire ;
  1249. nbpts0 = nbno mail0 ;
  1250. P0 = mail0 poin nbpts0 ;
  1251. P1 = mail1 poin 1 ;
  1252. si (P1 neg P0) ;
  1253. tol1 = 1.e-10 * (mesu mail1) ;
  1254. si ((norm (P1 moin P0)) > tol1) ;
  1255. erre '***** ERREUR : MAILLAGE incompatible.' ;
  1256. quit soudage ;
  1257. sino ;
  1258. elim (P0 et P1) tol1 ;
  1259. fins ;
  1260. fins ;
  1261. si (nbpts0 > 1) ;
  1262. mail1 = mail1 coul vert ;
  1263. mail1 = mail0 et mail1 ;
  1264. fins ;
  1265. fins ;
  1266. tab1.trajectoire = mail1 ;
  1267.  
  1268. * Increment de temps DEPLA MAIL :
  1269. imot4 = faux ; imot5 = faux ;
  1270. ieve1 = faux ;
  1271. repe b1 2 ;
  1272. argu mot4/'MOT' ;
  1273. si (non (exis mot4)) ; quit b1 ; fins ;
  1274. si (ega mot4 'VITE') ;
  1275. imot4 = vrai ;
  1276. argu vdep1*'FLOTTANT' ;
  1277. fins ;
  1278. si (ega mot4 'EVEN') ;
  1279. imot5 = vrai ;
  1280. argu even1*'MOT' ;
  1281. argu teve1/'FLOTTANT' ;
  1282. ieve1 = exis teve1 ;
  1283. fins ;
  1284. fin b1 ;
  1285.  
  1286. * Coupure et temps de coupure selon existence EVEN :
  1287. * idtcp1 = idtcp1 ou ieve1 ;
  1288. * si ieve1 ;
  1289. * dtcp1 = teve1 ;
  1290. * fins ;
  1291.  
  1292. * Vitesse de deplacement :
  1293. si (non imot4) ;
  1294. vdep1 = tab1.vitesse_de_deplacement ;
  1295. fins ;
  1296. wtab1 . vdep = vdep1 ;
  1297. dt1 = ll1 / vdep1 ;
  1298. si idtcp1 ;
  1299. dt1 = dt1 + dtcp1 ;
  1300. fins ;
  1301.  
  1302. * Evolution puissance DEPLA MAIL :
  1303. si idebut1 ;
  1304. ltps1 = prog 0. dt1 ;
  1305. lqtot1 = prog qtot1 qtot1 ;
  1306. lqi1 = prog 1. 1. ;
  1307. sino ;
  1308. ltps0 = extr evqtot0 absc ;
  1309. tps0 = extr ltps0 (dime ltps0) ;
  1310. * Si la puissance indiquee est differente de celle existante :
  1311. si idtcp1 ;
  1312. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1313. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1314. lqtot1 = prog qtot1 qtot1 ;
  1315. sino ;
  1316. lti1 = prog tps0 (tps0 + dt1) ;
  1317. ltps1 = prog (tps0 + dt1) ;
  1318. lqtot1 = prog qtot1 ;
  1319. fins ;
  1320. ltps1 = ltps0 et ltps1 ;
  1321. lqtot1 = lqtot0 et lqtot1 ;
  1322. fins ;
  1323. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  1324. tab1.evolution_puissance = evqtot1 ;
  1325.  
  1326. * Evolution debit DEPLA MAIL :
  1327. si idebut1 ;
  1328. ltps1 = prog 0. dt1 ;
  1329. ldebi1 = prog debi1 debi1 ;
  1330. sino ;
  1331. ltps0 = extr evdebi0 absc ;
  1332. tps0 = extr ltps0 (dime ltps0) ;
  1333. * Si la puissance indiquee est differente de celle existante :
  1334. si idtcp1 ;
  1335. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1336. ldebi1 = prog debi1 debi1 ;
  1337. sino ;
  1338. ltps1 = prog (tps0 + dt1) ;
  1339. ldebi1 = prog debi1 ;
  1340. fins ;
  1341. ltps1 = ltps0 et ltps1 ;
  1342. ldebi1 = ldebi0 et ldebi1 ;
  1343. fins ;
  1344. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  1345. tab1.evolution_debit = evdebi1 ;
  1346.  
  1347. * Evolution deplacement DEPLA MAIL :
  1348. si idebut1 ;
  1349. ltps1 = prog 0. dt1 ;
  1350. ldep1 = prog 0. ll1 ;
  1351. tps0 = 0. ;
  1352. sino ;
  1353. evdep0 = tab1.evolution_deplacement ;
  1354. ltps0 = extr evdep0 absc ;
  1355. ldep0 = extr evdep0 ordo ;
  1356. tps0 = extr ltps0 (dime ltps0) ;
  1357. dep0 = extr ldep0 (dime ldep0) ;
  1358. si idtcp1 ;
  1359. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1360. ldep1 = prog dep0 (dep0 + ll1) ;
  1361. sino ;
  1362. ltps1 = prog (tps0 + dt1) ;
  1363. ldep1 = prog (dep0 + ll1) ;
  1364. fins ;
  1365. ltps1 = ltps0 et ltps1 ;
  1366. ldep1 = ldep0 et ldep1 ;
  1367. fins ;
  1368. ldep1 = ldep1 / (maxi ldep1) * (mesu mail1) ;
  1369. evdep1 = evol vert manu temp ltps1 ldep1 ;
  1370. tab1.evolution_deplacement = evdep1 ;
  1371.  
  1372. * Evenement :
  1373. si imot5 ;
  1374. si (exis tab1 'EVENEMENTS') ;
  1375. nbev1 = (dime tab1.evenements) + 1 ;
  1376. sino ;
  1377. tab1.evenements = table ;
  1378. nbev1 = 1 ;
  1379. fins ;
  1380. tab1.evenements.nbev1 = table ;
  1381. ttev1 = tab1.evenements.nbev1 ;
  1382. ttev1 . nom = even1 ;
  1383. si ieve1 ;
  1384. ttev1 . temps = prog tps0 (tps0 + teve1) ;
  1385. sino ;
  1386. ttev1 . temps = prog tps0 ;
  1387. fins ;
  1388. fins ;
  1389.  
  1390. quit soudage ;
  1391. * Fin option DEPLA MAIL :
  1392. fins ;
  1393.  
  1394. *---------------------------- DEPLA COUCHE ----------------------------*
  1395. * Sous-option COUCHE :
  1396. si (ega mot2 'COUCHE') ;
  1397. icas2 = 4 ;
  1398.  
  1399. * Option PAUSE :
  1400. imot3 = faux ; imot4 = faux ; imot5 = faux ; imot6 = faux ;
  1401. ieve1 = faux ;
  1402. repe b1 4 ;
  1403. argu mot3/'MOT' ;
  1404. si (non (exis mot3)) ; quit b1; fins ;
  1405. si (ega mot3 'VITE') ;
  1406. imot3 = vrai ;
  1407. argu flot2*'FLOTTANT' ;
  1408. fins ;
  1409. si (ega mot3 'DEBI') ;
  1410. imot4 = vrai ;
  1411. argu flot3*'FLOTTANT' ;
  1412. fins ;
  1413. si (ega mot3 'PAUSE') ;
  1414. imot5 = vrai ;
  1415. argu flot4*'FLOTTANT' ;
  1416. fins ;
  1417. si (ega mot3 'EVEN') ;
  1418. imot6 = vrai ;
  1419. argu even1*'MOT' ;
  1420. argu teve1/'FLOTTANT' ;
  1421. ieve1 = exis teve1 ;
  1422. fins ;
  1423. fin b1 ;
  1424.  
  1425. * Epaisseur de la couche :
  1426. si imot3 ;
  1427. Vpf1 = flot2 ;
  1428. sino ;
  1429. Vpf1 = tab1.vitesse_de_soudage ;
  1430. fins ;
  1431. si imot4 ;
  1432. Dpf1 = flot3 ;
  1433. sino ;
  1434. Dpf1 = tab1.debit_de_fil ;
  1435. fins ;
  1436. *List Dpf1 ;
  1437. si (exis tab1 'LARGEUR_DE_PASSE') ;
  1438. Lpf1 = tab1.largeur_de_passe ;
  1439. sinon ;
  1440. erre '***** ERREUR : il manque la donnee de la largeur de passe.' ;
  1441. quit soudage ;
  1442. finsi ;
  1443. epf1 = Dpf1 / Vpf1 / Lpf1 ;
  1444. *List epf1 ;
  1445.  
  1446. * Pause :
  1447. si imot5 ;
  1448. vdep2 = epf1 / flot4 ;
  1449. sino ;
  1450. vdep2 = tab1.vitesse_de_deplacement ;
  1451. fins ;
  1452. si imot6 ;
  1453. si ieve1 ;
  1454. soudage tab1 depla droi (0 0 epf1) vite vdep2 even even1 teve1 ;
  1455. sino ;
  1456. soudage tab1 depla droi (0 0 epf1) vite vdep2 even even1 ;
  1457. fins ;
  1458. sino ;
  1459. soudage tab1 depla droi (0 0 epf1) vite vdep2 ;
  1460. fins ;
  1461.  
  1462. * Fin option DEPLA COUCHE :
  1463. fins ;
  1464.  
  1465. si (icas2 ega 0) ;
  1466. erre '***** ERREUR : MOT option non reconnu.' ;
  1467. quit soudage ;
  1468. fins ;
  1469.  
  1470. * Fin option DEPLA :
  1471. fins ;
  1472.  
  1473. *----------------------------------------------------------------------*
  1474. * Option MAIL *
  1475. *----------------------------------------------------------------------*
  1476.  
  1477. si (ega mot1 'MAIL') ;
  1478. icas1 = 4 ;
  1479.  
  1480. *----------------------- Lecture des arguments ------------------------*
  1481.  
  1482. * Lecture maillage cordons :
  1483. argu mail1*'MAILLAGE' ;
  1484.  
  1485. * Lecture facultative liste ordonnancement couleurs ;
  1486. argu list1/'LISTENTI' ;
  1487. ilist1 = exis list1 ;
  1488. si (non ilist1) ;
  1489. argu list1/'LISTMOTS' ;
  1490. ilist1 = exis list1 ;
  1491. fins ;
  1492.  
  1493. * Lecture du mot 'PAS' ;
  1494. argu mot1*'MOT' ;
  1495. si (neg mot1 'PAS') ;
  1496. erre '***** ERREUR : on attend le mot-cle PAS' ;
  1497. quit soudage ;
  1498. sino ;
  1499. argu flot1*'FLOTTANT' ;
  1500. fins ;
  1501.  
  1502. * Lecture option 'TEMP' ;
  1503. argu mot2/'MOT' ;
  1504. imot2 = faux ;
  1505. si (exis mot2) ;
  1506. imot2 = ega mot2 'TEMP' ;
  1507. si (imot2) ;
  1508. argu flot2/'FLOTTANT' ;
  1509. si (non (exis flot2)) ;
  1510. flot2 = -1. ;
  1511. fins ;
  1512. sino ;
  1513. erre '***** ERREUR : on attend le mot-cle TEMP' ;
  1514. quit soudage ;
  1515. fins ;
  1516. fins ;
  1517.  
  1518. *----------------------- Indexation du maillage -----------------------*
  1519.  
  1520. * Informations trajectoire :
  1521. ltraj1 = tab1.trajectoire ;
  1522. chxs1 = ltraj1 coor curv ;
  1523. x1 y1 z1 = mail1 coor ;
  1524.  
  1525. * Informations evolution deplacements :
  1526. evxs1 = tab1.evolution_deplacement ;
  1527. ltxs1 = extr evxs1 absc ;
  1528. lxxs1 = extr evxs1 ordo ;
  1529. nbxs1 = dime lxxs1 ;
  1530. *list ltxs1 ;
  1531. *list lxxs1 ;
  1532.  
  1533. * Chargement trajectoire pour se positionner d'un PAS :
  1534. cgxs1 = char traj chxs1 evxs1 ;
  1535.  
  1536. * Information apport de matiere :
  1537. evdf1 = tab1.evolution_debit ;
  1538. ldeb1 = extr evdf1 ordo ;
  1539.  
  1540. * tolerance dimensionnelle :
  1541. tol1 = 1.e-10 * (maxi ltxs1) ;
  1542. tol2 = 1.e-6 * (maxi ldeb1) ;
  1543.  
  1544. * Table resultat :
  1545. tab2 = table ;
  1546. tab2 . maillage = mail1 ;
  1547. tab2 . evolution_maillage = table ;
  1548. tab2 . evolution_maillage . temps = table ;
  1549. tab2 . evolution_maillage . maillage = table ;
  1550. ttps1 = table ;
  1551. tmai1 = table ;
  1552.  
  1553. * Boucle sur les segents rouges de la trajectoire :
  1554. nb1 = nbel ltraj1 ;
  1555. geoi1 = vide maillage ;
  1556. indi1 = 0 ;
  1557. ic1 = 1 ;
  1558. inewcor1 = vrai ;
  1559. isuidep1 = vrai ;
  1560. ifermee1 = faux ;
  1561. icourbe1 = faux ;
  1562. ipredep1 = vrai ;
  1563.  
  1564. repe b1 nb1 ;
  1565. eli1 = ltraj1 elem &b1 ;
  1566. pi1 = eli1 poin 1 ;
  1567. pi2 = eli1 poin 2 ;
  1568.  
  1569. * Si pas trajectoire d'une passe, on saute en changeant de couleur :
  1570. si (neg ((eli1 elem coul) extr 1) 'ROUG') ;
  1571. inewcor1 = vrai ;
  1572. ifermee1 = faux ;
  1573. icourbe1 = faux ;
  1574. si (non ipredep1) ; ic1 = ic1 + 1 ; fins ;
  1575. ipredep1 = vrai ;
  1576. iter b1 ;
  1577. sino ;
  1578. ipredep1 = faux ;
  1579. si (&b1 neg nb1) ;
  1580. eli2 = ltraj1 elem (&b1 + 1) ;
  1581. isuidep1 = ega ((eli2 elem coul) extr 1) 'VERT' ;
  1582. si ((non isuidep1) et (non (ifermee1 ou icourbe1))) ;
  1583. ifin1 = &b1 + 1 ;
  1584. elfin1 = eli2 ;
  1585. repe bfermee1 (nb1 - &b1 - 1) ;
  1586. eli2 = ltraj1 elem (&b1 + 1 + &bfermee1) ;
  1587. si (ega ((eli2 elem coul) extr 1) 'VERT') ; quit bfermee1 ; fins ;
  1588. ifin1 = &b1 + 1 + &bfermee1 ;
  1589. elfin1 = eli2 ;
  1590. fin bfermee1 ;
  1591. ideb1 = &b1 ;
  1592. ifermee1 = (norm ((elfin1 poin 2) moin pi1)) < tol1 ;
  1593. icourbe1 = non ifermee1 ;
  1594. si icourbe1 ; mess '***** Passes successives : n° elem. debut =' ideb1 ', fin = ' ifin1 ; fins ;
  1595. si ifermee1 ; mess '***** Passe fermee : n° elem. debut =' ideb1 ', fin = ' ifin1 ; fins ;
  1596. fins ;
  1597. fins ;
  1598. fins ;
  1599. *list isuidep1 ;
  1600.  
  1601. * Maillage cordon passe ic1 :
  1602. si inewcor1 ;
  1603. inewcor1 = faux ;
  1604. si ilist1 ;
  1605. couli1 = extr list1 ic1 ;
  1606. si (ega (type couli1) 'MOT') ;
  1607. maili1 = mail1 elem couli1 ;
  1608. sino ;
  1609. maili1 = mail1 elem coul couli1 ;
  1610. fins ;
  1611. sino ;
  1612. maili1 = mail1 elem coul ic1 ;
  1613. fins ;
  1614. pci1 = maili1 poin proc pi1 ;
  1615. si ((norm (pci1 moin pi1)) > flot1 ) ;
  1616. erre '***** ERREUR : distance trajectoire cordon superieure au PAS' ;
  1617. erre ' Element de la trajectoire :' &b1 ;
  1618. quit soudage ;
  1619. fins ;
  1620. tpi1 = maili1 part nesc conn ;
  1621. repe bp1 (dime tpi1) ;
  1622. maili1 = tpi1.&bp1 ;
  1623. si (pci1 dans maili1) ; quit bp1 ; fins ;
  1624. fin bp1 ;
  1625. fins ;
  1626.  
  1627. * Vecteur(s) unitaire(s) de la trajectoire :
  1628. si (icourbe1 ou ifermee1) ;
  1629. si (&b1 ega ideb1) ;
  1630. ni1 = (pi2 moin pi1) / (mesu eli1) ;
  1631. eli2 = ltraj1 elem (&b1 + 1) ;
  1632. pi21 = eli2 poin 1 ;
  1633. pi22 = eli2 poin 2 ;
  1634. ni2 = (pi22 moin pi21) / (mesu eli2) ;
  1635. ni2 = 0.5 * (ni1 plus ni2) ;
  1636. si ifermee1 ;
  1637. pfin1 = elfin1 poin 1 ;
  1638. pfin2 = elfin1 poin 2 ;
  1639. nfin1 = (pfin2 moin pfin1) / (mesu elfin1) ;
  1640. ndeb1 = ni1 ;
  1641. ni1 = 0.5 * (ni1 plus nfin1) ;
  1642. fins ;
  1643. fins ;
  1644. si (&b1 ega ifin1) ;
  1645. ni1 = (pi2 moin pi1) / (mesu eli1) ;
  1646. nix = ni1 ;
  1647. ni1 = ni2 ;
  1648. ni2 = nix ;
  1649. si ifermee1 ;
  1650. ni2 = 0.5 * (ndeb1 plus ni2) ;
  1651. fins ;
  1652. fins ;
  1653. si ((ideb1 < &b1) et (&b1 < ifin1)) ;
  1654. ni1 = (pi2 moin pi1) / (mesu eli1) ;
  1655. nix = ni2 ;
  1656. eli2 = ltraj1 elem (&b1 + 1) ;
  1657. pi21 = eli2 poin 1 ;
  1658. pi22 = eli2 poin 2 ;
  1659. ni2 = (pi22 moin pi21) / (mesu eli2) ;
  1660. ni2 = 0.5 * (ni1 plus ni2) ;
  1661. ni1 = nix ;
  1662. fins ;
  1663. sino ;
  1664. ni1 = (pi2 moin pi1) / (mesu eli1) ;
  1665. fins ;
  1666. *list ni1 ; list ni2 ;
  1667.  
  1668. * Champ(s) de distance au(x) point(s) pi1 (Pi2) sur le maillage du cordon dans la direction ni1 (ni2)
  1669. x1 y1 z1 = maili1 coor ;
  1670. xp1 yp1 zp1 = pi1 coor ;
  1671. xni1 yni1 zni1 = ni1 coor ;
  1672. chpdi1 = ((x1 - xp1) * xni1) + ((y1 - yp1) * yni1) + ((z1 - zp1) * zni1) ;
  1673. modi1 = mode maili1 mecanique ;
  1674. chedi1 = chan cham chpdi1 modi1 gravite ;
  1675. si (icourbe1 ou ifermee1) ;
  1676. xp2 yp2 zp2 = pi2 coor ;
  1677. xni2 yni2 zni2 = ni2 coor ;
  1678. chpdi2 = ((x1 - xp2) * xni2) + ((y1 - yp2) * yni2) + ((z1 - zp2) * zni2) ;
  1679. chedi2 = chan cham chpdi2 modi1 gravite ;
  1680. fins ;
  1681. *list ni1 ; list pi1 ;
  1682. *trac chedi1 modi1 ;
  1683.  
  1684. * Extraction evolution deplacement sur ce segment :
  1685. xspi1 = chxs1 extr pi1 scal ;
  1686. xspi2 = chxs1 extr pi2 scal ;
  1687. repe bxs1 nbxs1 ;
  1688. xxsi1 = extr lxxs1 (nbxs1 + 1 - &bxs1) ;
  1689. si (non (xxsi1 < (xspi2 - tol1))) ;
  1690. xxxi2 = xxsi1 ;
  1691. txxi2 = extr ltxs1 (nbxs1 + 1 - &bxs1) ;
  1692. fins ;
  1693. xxsi1 = extr lxxs1 &bxs1 ;
  1694. si (non (xxsi1 > (xspi1 + tol1))) ;
  1695. xxxi1 = xxsi1 ;
  1696. txxi1 = extr ltxs1 &bxs1 ;
  1697. fins ;
  1698. fin bxs1 ;
  1699. lxxsi1 = prog xxxi1 xxxi2 ;
  1700. ltxsi1 = prog txxi1 txxi2 ;
  1701. *list lxxsi1 ;
  1702. *list ltxsi1 ;
  1703.  
  1704. * Sequencage maillage cordon selon pas fourni :
  1705. nb2 = ((mesu eli1) / flot1 + 0.5) enti ;
  1706. nb2 = maxi (lect 1 nb2) ;
  1707. *list nb2 ;
  1708. xsi1 = 0. ;
  1709. pmaili1 = maili1 poin proc pi1 ;
  1710. si ifermee1 ;
  1711. si (&b1 ega ideb1) ;
  1712. xdeb1 = 0. ;
  1713. sino ;
  1714. Sdeb1 = (enve tmai1 . (indi1 - 1)) inte (enve maili1) ;
  1715. pdeb1 = Sdeb1 poin proc pi1 ;
  1716. tconn1 = Sdeb1 part nesc conn ;
  1717. si (pdeb1 dans tconn1 . 1) ;
  1718. Sdeb1 = tconn1 . 1 ;
  1719. sino ;
  1720. Sdeb1 = tconn1 . 2 ;
  1721. fins ;
  1722. *trac cach Sdeb1 ;
  1723. xdeb1 = (redu chpdi1 Sdeb1) mini ;
  1724. fins ;
  1725. geoi2 = chedi1 elem supe (xsi1 - tol1 + xdeb1) stri ;
  1726. chedi1 = redu chedi1 geoi2 ;
  1727. fins ;
  1728. repe b2 nb2 ;
  1729. xsi2 = xsi1 + flot1 ;
  1730. si (xsi2 > (mesu eli1)) ;
  1731. xsi2 = mesu eli1 ;
  1732. fins ;
  1733. si ((&b2 ega nb2) et (isuidep1 ou (&b1 ega nb1))) ;
  1734. xsi2 = maxi chedi1 ;
  1735. *mess '*** Maxi !' ;
  1736. fins ;
  1737. geoi2 = chedi1 elem infe (xsi2 + tol1) stri ;
  1738. si (vide geoi2) ;
  1739. mess '***** Erreur indexation passe :' ic1 ' / segment trajectoire :' &b2 ;
  1740. mess ' Maillage trajectoire sans doute trop fin.' ;
  1741. mess ' Longueur segments trajectoire doit etre superieure au PAS de sequencage.' ;
  1742. erre ' ' ;
  1743. quit soudage ;
  1744. fins ;
  1745. tgeoi2 = geoi2 part nesc conn ;
  1746. geoix = vide maillage ;
  1747. repe bgeoi2 (dime tgeoi2) ;
  1748. si (pmaili1 dans tgeoi2.&bgeoi2) ;
  1749. geoix = tgeoi2.&bgeoi2 ;
  1750. quit bgeoi2 ;
  1751. fins ;
  1752. fin bgeoi2 ;
  1753. geoi2 = geoix ;
  1754.  
  1755. * Enregistrement sortie :
  1756. tmai1 . indi1 = geoi1 et geoi2 ;
  1757. ti2 = ipol (xspi1 + xsi1) lxxsi1 ltxsi1 ;
  1758. ttps1 . indi1 = ti2 ;
  1759. indi1 = indi1 + 1 ;
  1760. xsi1 = xsi2 ;
  1761. fin b2 ;
  1762. geoi1 = geoi1 et geoi2 ;
  1763.  
  1764. * Retrait du maillage deja indexe au maillage total -> reste a faire
  1765. mail1 = mail1 diff geoi1 ;
  1766. si (icourbe1 ou ifermee1) ;
  1767. maili1 = maili1 diff (geoi1 inte maili1) ;
  1768. fins ;
  1769. fin b1 ;
  1770. tab2 . evolution_maillage . temps = ttps1 ;
  1771. tab2 . evolution_maillage . maillage = tmai1 ;
  1772.  
  1773. *-------------------------- Sous-option TEMP --------------------------*
  1774.  
  1775. si imot2 ;
  1776.  
  1777. * Valeurs par defaut flot2 :
  1778. si (flot2 < 0.) ;
  1779. flot2 = flot1 / (tab1.vitesse_de_soudage) / pi / 3. ;
  1780. *list flot2 ;
  1781. fins ;
  1782. dtca1 = flot2 ;
  1783.  
  1784. * Redecoupage de la liste des temps de l'evolution de la puissance thermique :
  1785. evqt1 = tab1.evolution_puissance ;
  1786. ltqt1 = extr evqt1 absc ;
  1787. lqqt1 = extr evqt1 ordo ;
  1788. tol2 = 1.e-6 * (maxi lqqt1) ;
  1789. tol3 = 0.001 * tab1.temps_de_coupure ;
  1790.  
  1791. * Gestion des evenements :
  1792. ieve1 = exis tab1 evenements ;
  1793. Si ieve1 ;
  1794. lteve1 = prog ;
  1795. lieve1 = lect ;
  1796. repe beve1 (dime tab1.evenements) ;
  1797. ie1 = &beve1 ;
  1798. lteve1 = lteve1 et tab1.evenements.ie1.temps ;
  1799. lieve1 = lieve1 et (lect (dime (tab1.evenements.ie1.temps)) * ie1) ;
  1800. fin beve1 ;
  1801. lpeve1 = posi ltqt1 dans lteve1 tol3 ;
  1802. *list lteve1 ;
  1803. *list lieve1 ;
  1804. *list lpeve1 ;
  1805. sino ;
  1806. lpeve1 = lect (dime ltqt1) * 0 ;
  1807. fins ;
  1808.  
  1809. * Sous-decoupage de l'historique de puissance :
  1810. nb1 = dime ltqt1 ;
  1811. t0 = extr ltqt1 1 ;
  1812. q0 = extr lqqt1 1 ;
  1813.  
  1814. * Gestion evenements :
  1815. peve0 = extr lpeve1 1 ;
  1816. si (peve0 neg 0) ;
  1817. neve0 = extr lieve1 peve0 ;
  1818. si ((peve0 + 1) &lt;EG (dime lieve1)) ;
  1819. neve1 = extr lieve1 (peve0 + 1) ;
  1820. sino ;
  1821. neve1 = -1 ;
  1822. fins ;
  1823. idtev1 = neve0 ega neve1 ;
  1824. si idtev1 ;
  1825. tev1 = lteve1 extr (peve0 + 1) ;
  1826. dtev1 = tev1 - t0 ;
  1827. *mess (chai 'Even. = ' neve0 ', dtev1 =' dtev1) ;
  1828. fins ;
  1829. sino ;
  1830. idtev1 = faux ;
  1831. fins ;
  1832.  
  1833. * Boucle sur les piquets de temps :
  1834. ltca1 = prog t0 ;
  1835. repe b1 (nb1 - 1) ;
  1836. ip1 = &b1 + 1 ;
  1837. t1 = extr ltqt1 ip1 ;
  1838. q1 = extr lqqt1 ip1 ;
  1839. peve1 = extr lpeve1 ip1 ;
  1840. dt1 = t1 - t0 ;
  1841. si (&b1 ega 1) ; dt0 = dt1 ; fins ;
  1842. * Avec evements :
  1843. si idtev1 ;
  1844. si (dt1 &lt;EG dtca1) ;
  1845. si (dtev1 &lt;EG dtca1) ;
  1846. si (dt1 ega dtev1 tol3) ;
  1847. ltca1 = ltca1 et (prog t1) ;
  1848. sino ;
  1849. si (dt1 < dtev1) ;
  1850. ltca1 = ltca1 et (prog t1) et (prog tev1) ;
  1851. t1 = tev1 ;
  1852. sino ;
  1853. ltca1 = ltca1 et (prog tev1) et (prog t1) ;
  1854. fins ;
  1855. fins ;
  1856. sino ;
  1857. ltca1 = ltca1 et (prog t1) ;
  1858. si ((q0 > tol2) ou (q1 > tol2)) ;
  1859. ltca1 = ltca1 et ((prog t1 pas dtca1 tev1) enle 1) ;
  1860. sino ;
  1861. ltca1 = ltca1 et ((prog t1 pas dt1 geom 2. tev1) enle 1) ;
  1862. fins ;
  1863. t1 = tev1 ;
  1864. fins ;
  1865. sino ;
  1866. si (dt1 ega dtev1 tol3) ;
  1867. si ((q0 > tol2) ou (q1 > tol2)) ;
  1868. ltca1 = ltca1 et ((prog t0 pas dtca1 t1) enle 1) ;
  1869. sino ;
  1870. ltca1 = ltca1 et ((prog t0 pas dtev1 geom 2. t1) enle 1) ;
  1871. fins ;
  1872. sino ;
  1873. si (dtev1 < dt1) ;
  1874. si (dtev1 < dtca1) ;
  1875. ltca1 = ltca1 et (prog tev1) ;
  1876. sino ;
  1877. si ((q0 > tol2) ou (q1 > tol2)) ;
  1878. *mess '############ Ici 1' ;
  1879. ltca1 = ltca1 et ((prog t0 pas dtca1 tev1) enle 1) ;
  1880. ltca1 = ltca1 et ((prog tev1 pas dtca1 t1) enle 1) ;
  1881. sino ;
  1882. ltca1 = ltca1 et (prog tev1 pas dtev1 geom 2. t1) ;
  1883. fins ;
  1884. fins ;
  1885. sino ;
  1886. si ((q0 > tol2) ou (q1 > tol2)) ;
  1887. *mess '############ Ici 2' ;
  1888. ltca1 = ltca1 et ((prog t0 pas dtca1 tev1) enle 1) ;
  1889. sino ;
  1890. ltca1 = ltca1 et ((prog t0 pas dt0 geom 2. tev1) enle 1) ;
  1891. fins ;
  1892. t1 = tev1 ;
  1893. fins ;
  1894. fins ;
  1895. fins ;
  1896. * Pas d'evenement :
  1897. sino ;
  1898. si (dt1 &lt;EG dtca1) ;
  1899. ltca1 = ltca1 et (prog t1) ;
  1900. sino ;
  1901. si ((q0 > tol2) ou (q1 > tol2)) ;
  1902. ltca1 = ltca1 et ((prog t0 pas dtca1 t1) enle 1) ;
  1903. sino ;
  1904. ltca1 = ltca1 et ((prog t0 pas dt0 geom 2. t1) enle 1) ;
  1905. fins ;
  1906. fins ;
  1907. fins ;
  1908. t0 = t1 ;
  1909. q0 = q1 ;
  1910. ntca1 = dime ltca1 ;
  1911. dt0 = (ltca1 extr ntca1) - (ltca1 extr (ntca1-1)) ;
  1912. * Gestion evenement suivant :
  1913. peve0 = peve1 ;
  1914. si (peve0 neg 0) ;
  1915. neve0 = extr lieve1 peve0 ;
  1916. si ((peve0 + 1) &lt;EG (dime lieve1)) ;
  1917. neve1 = extr lieve1 (peve0 + 1) ;
  1918. sino ;
  1919. neve1 = -1 ;
  1920. fins ;
  1921. idtev1 = neve0 ega neve1 ;
  1922. si idtev1 ;
  1923. tev1 = lteve1 extr (peve0 + 1) ;
  1924. dtev1 = tev1 - t0 ;
  1925. *mess (chai 'Even. = ' neve0 ', dtev1 =' dtev1) ;
  1926. fins ;
  1927. sino ;
  1928. idtev1 = faux ;
  1929. fins ;
  1930. fin b1 ;
  1931.  
  1932. * Verification si liste temps calcules bien ordonnee :
  1933. ltca2 = ordo ltca1 ;
  1934. si (((ltca2 - ltca1) maxi abs) > (1.e-3*flot2)) ;
  1935. erre '***** ERREUR WAAM dans construction liste TEMPS_CALCULES' ;
  1936. quit waam ;
  1937. fins ;
  1938.  
  1939. tab2.temps_calcules = ltca1 ;
  1940.  
  1941. * Sorties si evenements :
  1942. si ieve1 ;
  1943. tab2.temps_evenements = lteve1 ;
  1944. tab2.index_evenements = lieve1 ;
  1945. fins ;
  1946.  
  1947. * Fin sous-option TEMP :
  1948. fins ;
  1949.  
  1950. * Sortie de la table resultat :
  1951. resp tab2 ;
  1952. quit soudage ;
  1953.  
  1954. * Fin option MAIL :
  1955. fins ;
  1956.  
  1957. *----------------------------------------------------------------------*
  1958. * FIN *
  1959. *----------------------------------------------------------------------*
  1960.  
  1961. * MOT1 n'est pas un des mots-cles des options de la procedure :
  1962. si (icas1 ega 0) ;
  1963. erre '***** ERREUR : MOT-cle option SOUDAGE non reconnu.' ;
  1964. quit soudage ;
  1965. fins ;
  1966.  
  1967. FINP ;
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  

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