Télécharger soudage.procedur

Retour à la liste

Numérotation des lignes :

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

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