Télécharger soudage.procedur

Retour à la liste

Numérotation des lignes :

  1. * SOUDAGE PROCEDUR SP204843 24/11/05 21:15:10 12065
  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. * mettre a VRAI pou // PVEC sur liste de vecteurs.
  44. * FAUX car probleme // avec creation points (COMMON MCOORD).
  45. ipara1 = faux ;
  46.  
  47. *-------------------------- Initialisations ---------------------------*
  48.  
  49. * Test dimension 3 :
  50. si ((vale dime) neg 3) ;
  51. erreur '***** SOUDAGE : fonctionne uniquement en dimension 3' ;
  52. quit soudage ;
  53. fins ;
  54.  
  55. * Indicateur 1er appel a soudage :
  56. si (exis tab1 'TRAJECTOIRE') ;
  57. idebut1 = faux ;
  58. sino ;
  59. idebut1 = vrai ;
  60. fins ;
  61.  
  62. * Sous-indice WTABLE : sert a stocker les valeurs courantes des parametres de soudage
  63. si (exis tab1 'WTABLE') ;
  64. wtab1 = tab1.wtable ;
  65. sino ;
  66. wtab1 = table ;
  67. wtab1 . vsou = tab1.vitesse_de_soudage ;
  68. wtab1 . puis = tab1.puissance_de_soudage ;
  69. wtab1 . debi = tab1.debit_de_fil ;
  70. wtab1 . vdep = tab1.vitesse_de_deplacement ;
  71. tab1.wtable = wtab1 ;
  72. fins ;
  73.  
  74. * icas1 = 1 / 2 / 3 / 4 pour POINT / PASSE / DEPLA / MAIL
  75. * Si 0 in fine : erreur.
  76. icas1 = 0 ;
  77.  
  78. * Vecteur nul pour dupliquer points lus :
  79. Pnul1 = 0 0 0 ;
  80.  
  81. *------------------------- Lecture des options ------------------------*
  82.  
  83. argu MOT1*'MOT' ;
  84.  
  85. *----------------------------------------------------------------------*
  86. * Option POINT *
  87. *----------------------------------------------------------------------*
  88.  
  89. si (ega mot1 'POINT') ;
  90. icas1 = 1 ;
  91.  
  92. * Lecture des arguments de l'option :
  93. argu FLOT1*'FLOTTANT' ;
  94.  
  95. * Lecture Arguments PUIS, DEBI, EVEN et DIRE option POINT :
  96. imot2 = faux ; imot3 = faux ; imot4 = faux ; imot5 = faux ;
  97. ieve1 = faux ;
  98. repe b1 4 ;
  99. argu MOT2/'MOT' ;
  100. si (non (exis mot2)) ; quit B1 ; fins ;
  101. si (ega mot2 'PUIS') ;
  102. imot2 = vrai ;
  103. argu qtot1*'FLOTTANT' ;
  104. fins ;
  105. si (ega mot2 'DEBI') ;
  106. imot3 = vrai ;
  107. argu debi1*'FLOTTANT' ;
  108. fins ;
  109. si (ega mot2 'DIRE') ;
  110. imot5 = vrai ;
  111. argu pdir1*'POINT' ;
  112. fins ;
  113. si (ega mot2 'EVEN') ;
  114. imot4 = vrai ;
  115. argu even1*'MOT' ;
  116. argu teve1/'FLOTTANT' ;
  117. ieve1 = exis teve1 ;
  118. fins ;
  119. fin b1 ;
  120. si (non imot2) ;
  121. qtot1 = tab1.puissance_de_soudage ;
  122. fins ;
  123. wtab1 . puis = qtot1 ;
  124. si (non imot3) ;
  125. debi1 = tab1.debit_de_fil ;
  126. fins ;
  127. wtab1 . debi = debi1 ;
  128. si (non imot5) ;
  129. si (exis tab1 orientation_soudure) ;
  130. pdir1 = tab1.orientation_soudure ;
  131. sino ;
  132. erre '***** SOUDAGE : il manque la donnee de l''orientation de la soudure' ;
  133. fins ;
  134. fins ;
  135. wtab1 . dire = pdir1 ;
  136. *list qtot1 ;
  137. *list debi1 ;
  138. *list idebut1 ;
  139. *list pdir1 ;
  140. *
  141. * idtcp1 : temps de coupure ou pas ?
  142. * iqtot1 : on chauffe ou pas ?
  143. idtcp1 = faux ;
  144. iqtot1 = faux ;
  145. si idebut1 ;
  146. iqtot1 = qtot1 > 0. ;
  147. sino ;
  148. evqtot0 = tab1.evolution_puissance ;
  149. lqtot0 = extr evqtot0 ordo ;
  150. qtot0 = extr lqtot0 (dime lqtot0) ;
  151. idtcp1 = (abs(qtot0-qtot1)) > (abs(1.e-4*qtot1)) ;
  152.  
  153. qmax1 = maxi (prog qtot0 qtot1) ;
  154. iqtot1 = qtot1 > (1.e-4 * qmax1) ;
  155.  
  156. evdebi0 = tab1.evolution_debit ;
  157. ldebi0 = extr evdebi0 ordo ;
  158. debi0 = extr ldebi0 (dime ldebi0) ;
  159. idtcp1 = idtcp1 ou ((abs(debi0-debi1)) > (abs(1.e-4*debi1))) ;
  160. fins ;
  161. * idtcp1 = idtcp1 ou ieve1 ;
  162. si idtcp1 ;
  163. * si ieve1 ;
  164. * dtcp1 = teve1 ;
  165. * sino ;
  166. dtcp1 = tab1.temps_de_coupure ;
  167. * fins ;
  168. flot1 = flot1 + dtcp1 ;
  169. fins ;
  170.  
  171. * Evolution puissance option POINT :
  172. si idebut1 ;
  173. ltps1 = prog 0. flot1 ;
  174. lqtot1 = prog qtot1 qtot1 ;
  175. lti1 = ltps1 ;
  176. sino ;
  177. evqtot0 = tab1.evolution_puissance ;
  178. ltps0 = extr evqtot0 absc ;
  179. lqtot0 = extr evqtot0 ordo ;
  180. tps0 = extr ltps0 (dime ltps0) ;
  181. qtot0 = extr lqtot0 (dime lqtot0) ;
  182. * Si la puissance indiquee est differente de celle existante :
  183. si ((abs(qtot0-qtot1)) > (abs(1.e-4*qtot1))) ;
  184. * Ajout temps de coupure au temps de realisation du POINT :
  185. ltps1 = prog (tps0 + dtcp1) (tps0 + flot1) ;
  186. lqtot1 = prog qtot1 qtot1 ;
  187. sino ;
  188. ltps1 = prog (tps0 + flot1) ;
  189. lqtot1 = prog qtot1 ;
  190. fins ;
  191. lti1 = prog tps0 (tps0 + flot1) ;
  192. ltps1 = ltps0 et ltps1 ;
  193. lqtot1 = lqtot0 et lqtot1 ;
  194. fins ;
  195. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  196.  
  197. * Evolution debit POINT :
  198. si idebut1 ;
  199. ltps1 = prog 0. flot1 ;
  200. ldebi1 = prog debi1 debi1 ;
  201. sino ;
  202. evdebi0 = tab1.evolution_debit ;
  203. ltps0 = extr evdebi0 absc ;
  204. ldebi0 = extr evdebi0 ordo ;
  205. tps0 = extr ltps0 (dime ltps0) ;
  206. debi0 = extr ldebi0 (dime ldebi0) ;
  207. * Si la puissance indiquee est differente de celle existante :
  208. si ((abs(debi0-debi1)) > (abs(1.e-4*debi1))) ;
  209. * Ajout temps de coupure au temps de realisation du POINT :
  210. ltps1 = prog (tps0 + dtcp1) (tps0 + flot1) ;
  211. ldebi1 = prog debi1 debi1 ;
  212. lqi1 = prog 1. 1. ;
  213. sino ;
  214. ltps1 = prog (tps0 + flot1) ;
  215. ldebi1 = prog debi1 ;
  216. lqi1 = prog 1. ;
  217. fins ;
  218. ltps1 = ltps0 et ltps1 ;
  219. ldebi1 = ldebi0 et ldebi1 ;
  220. fins ;
  221. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  222.  
  223. * Evolution deplacement POINT :
  224. si idebut1 ;
  225. ltps1 = prog 0. flot1 ;
  226. ldep1 = prog 0. 0. ;
  227. tps0 = 0. ;
  228. sino ;
  229. evdep0 = tab1.evolution_deplacement ;
  230. ltps0 = extr evdep0 absc ;
  231. ldep0 = extr evdep0 ordo ;
  232. tps0 = extr ltps0 (dime ltps0) ;
  233. dep0 = extr ldep0 (dime ldep0) ;
  234. ltps1 = prog (tps0 + flot1) ;
  235. ldep1 = prog dep0 ;
  236. ltps1 = ltps0 et ltps1 ;
  237. ldep1 = ldep0 et ldep1 ;
  238. fins ;
  239. evdep1 = evol vert manu temp ltps1 ldep1 ;
  240.  
  241. * Evenement :
  242. si imot4 ;
  243. ttev1 = table ;
  244. ttev1 . nom = even1 ;
  245. si ieve1 ;
  246. ttev1 . temps = prog tps0 (tps0 + teve1) ;
  247. sino ;
  248. ttev1 . temps = prog tps0 ;
  249. fins ;
  250. *list ttev1.temps ;
  251. si (exis tab1 'EVENEMENTS') ;
  252. nbev1 = (dime tab1.evenements) + 1 ;
  253. sino ;
  254. tab1.evenements = table ;
  255. nbev1 = 1 ;
  256. fins ;
  257. tab1.evenements.nbev1 = ttev1 ;
  258. fins ;
  259.  
  260. * Evolution direction POINT (que si on soude) :
  261. si iqtot1 ;
  262.  
  263. * Direction transverse (DIRL) :
  264. ndir1 = norm pdir1 ;
  265. zprec1 = vale prec ;
  266. si ((abs ndir1) < zprec1) ;
  267. erre 239 ;
  268. fins ;
  269. xdir1 ydir1 zdir1 = pdir1 coor ;
  270. si ((abs xdir1) > (abs ydir1)) ;
  271. si ((abs zdir1) > (abs ydir1)) ;
  272. pdirl1 = zdir1 0. (-1. * xdir1) ;
  273. sino ;
  274. pdirl1 = (-1. * ydir1) xdir1 0. ;
  275. fins ;
  276. sino ;
  277. si ((abs xdir1) > (abs zdir1)) ;
  278. pdirl1 = (-1. * ydir1) xdir1 0. ;
  279. sino ;
  280. pdirl1 = 0. (-1. * zdir1) ydir1 ;
  281. fins ;
  282. fins ;
  283. pdirl1 = pdirl1 / (norm pdirl1) ;
  284.  
  285. si idebut1 ;
  286. ltps1 = prog 0. flot1 ;
  287. ldir1 = enum pdir1 pdir1 ;
  288. ldirl1 = enum pdirl1 pdirl1 ;
  289. sino ;
  290. si (exis tab1 evolution_orientation) ;
  291. cgdir0 = tab1.evolution_orientation ;
  292. ltps0 = extr cgdir0 lree dire ;
  293. ldir0 = extr cgdir0 lobj dire ;
  294. ldirl0 = extr cgdir0 lobj dirl ;
  295. tps0dir = extr ltps0 (dime ltps0) ;
  296. pdir0 = extr ldir0 (dime ltps0) ;
  297. si (tps0dir ega tps0) ;
  298. xcolli1 = (psca pdir0 pdir1) / (norm pdir0) / (norm pdir1) ;
  299. si (xcolli1 neg 1.) ;
  300. erre '***** SOUDAGE : orientation de soudure incompatible avec precedente' ;
  301. fins ;
  302. ltps1 = prog (tps0 + flot1) ;
  303. ldir1 = enum pdir1 ;
  304. ldirl1 = enum pdirl1 ;
  305. sino ;
  306. ltps1 = prog tps0 (tps0 + flot1) ;
  307. ldir1 = enum pdir1 pdir1 ;
  308. ldirl1 = enum pdirl1 pdirl1 ;
  309. fins ;
  310. ltps1 = ltps0 et ltps1 ;
  311. ldir1 = ldir0 et ldir1 ;
  312. ldirl1 = ldirl0 et ldirl1 ;
  313. sino ;
  314. ltps1 = prog tps0 (tps0 + flot1) ;
  315. ldir1 = enum pdir1 pdir1 ;
  316. ldirl1 = enum pdirl1 pdir11 ;
  317. fins ;
  318. fins ;
  319. cgdir1 = char dire ltps1 ldir1 ;
  320. * Direction transverse (DIRL) :
  321. cgdir2 = char dirl ltps1 ldirl1 ;
  322. cgdir1 = cgdir1 et cgdir2 ;
  323. fins ;
  324.  
  325. * Enregistrement donnees POINT
  326. si (exis tab1 points) ;
  327. npt1 = dime tab1.points ;
  328. sino ;
  329. npt1 = 0 ;
  330. tab1.points = table ;
  331. fins ;
  332. npt1 = npt1 + 1 ;
  333. tab1.points.npt1 = table ;
  334. tab1.points.npt1.point = P1 ;
  335. tab1.points.npt1.instants = lti1 ;
  336. tab1.points.npt1.puissance = qtot1 ;
  337. tab1.points.npt1.debit = debi1 ;
  338.  
  339. * Enregistrements en fin de traitement option pour eviter
  340. * modifier table avant fin realisation option
  341. si idebut1 ;
  342. P1 = tab1.point_de_depart plus Pnul1 ;
  343. tab1.trajectoire = manu poi1 P1 ;
  344. fins ;
  345. tab1.evolution_puissance = evqtot1 ;
  346. tab1.evolution_debit = evdebi1 ;
  347. tab1.evolution_deplacement = evdep1 ;
  348. si iqtot1 ;
  349. tab1.evolution_orientation = cgdir1 ;
  350. fins ;
  351.  
  352. quit soudage ;
  353. * Fin option POINT :
  354. fins ;
  355.  
  356. *----------------------------------------------------------------------*
  357. * Option PASSE *
  358. *----------------------------------------------------------------------*
  359. si (ega mot1 'PASSE') ;
  360. icas1 = 2 ;
  361.  
  362. * Lecture des arguments de l'option :
  363. argu MOT2*'MOT' ;
  364.  
  365. * Triatement particulier option CERC ordre arguments :
  366. si (ega mot2 'CERC') ;
  367. argu N1/ENTIER ;
  368. fins ;
  369.  
  370. * Lecture arguments RELA/ABSO, VITE, PUIS, DEBI
  371. imot3 = faux ; imot4 = faux ; imot5 = faux ; imot6 = faux ; imot7 = faux ; imot8 = faux ;
  372. iradext1 = faux ;
  373. iradint1 = faux ;
  374. irela1 = vrai ;
  375. ieve1 = faux ;
  376. repe b1 8 ;
  377. argu mot3/'MOT' ;
  378. si (non (exis mot3)) ; quit b1; fins ;
  379. si (ega mot3 'ABSO') ;
  380. imot3 = vrai ;
  381. irela1 = faux ;
  382. fins ;
  383. si (ega mot3 'VITE') ;
  384. imot4 = vrai ;
  385. argu vdep1*'FLOTTANT' ;
  386. fins ;
  387. si (ega mot3 'PUIS') ;
  388. imot5 = vrai ;
  389. argu qtot1*'FLOTTANT' ;
  390. fins ;
  391. si (ega mot3 'DEBI') ;
  392. imot6 = vrai ;
  393. argu debi1*'FLOTTANT' ;
  394. fins ;
  395. si (ega mot3 'EVEN') ;
  396. imot7 = vrai ;
  397. argu even1*'MOT' ;
  398. argu teve1/'FLOTTANT' ;
  399. ieve1 = exis teve1 ;
  400. fins ;
  401. si (ega mot3 'DIRE') ;
  402. imot8 = vrai ;
  403. fins ;
  404. si (ega mot3 'RADEXT') ;
  405. iradext1 = vrai ;
  406. fins ;
  407. si (ega mot3 'RADINT') ;
  408. iradint1 = vrai ;
  409. fins ;
  410. fin b1 ;
  411.  
  412. * Vitesse & Increment de temps PASSE :
  413. si (non imot4) ;
  414. vdep1 = tab1.vitesse_de_soudage ;
  415. fins ;
  416. wtab1 . vsou = vdep1 ;
  417.  
  418. * Puissance PASSE :
  419. si (non imot5) ;
  420. qtot1 = tab1.puissance_de_soudage ;
  421. fins ;
  422. wtab1 . puis = qtot1 ;
  423.  
  424. * Debit PASSE :
  425. si (non imot6) ;
  426. debi1 = tab1.debit_de_fil ;
  427. fins ;
  428. wtab1 . debi = debi1 ;
  429. *list vdep1 ;
  430. *list qtot1 ;
  431. *list debi1 ;
  432.  
  433. * idtcp1 : temps de coupure ou pas ?
  434. * iqtot1 : on chauffe ou pas ?
  435. idtcp1 = faux ;
  436. iqtot1 = faux ;
  437. si idebut1 ;
  438. iqtot1 = qtot1 > 0. ;
  439. sino ;
  440. evqtot0 = tab1.evolution_puissance ;
  441. lqtot0 = extr evqtot0 ordo ;
  442. qtot0 = extr lqtot0 (dime lqtot0) ;
  443. idtcp1 = (abs(qtot0-qtot1)) > (abs(1.e-4*qtot1)) ;
  444.  
  445. qmax1 = maxi (prog qtot0 qtot1) ;
  446. iqtot1 = qtot1 > (1.e-4 * qmax1) ;
  447.  
  448. evdebi0 = tab1.evolution_debit ;
  449. ldebi0 = extr evdebi0 ordo ;
  450. debi0 = extr ldebi0 (dime ldebi0) ;
  451. idtcp1 = idtcp1 ou ((abs(debi0-debi1)) > (abs(1.e-4*debi1))) ;
  452. fins ;
  453. * idtcp1 = idtcp1 ou ieve1 ;
  454. *list idtcp1 ;
  455. si idtcp1 ;
  456. * si ieve1 ;
  457. * dtcp1 = teve1 ;
  458. * sino ;
  459. dtcp1 = tab1.temps_de_coupure ;
  460. * fins ;
  461. fins ;
  462.  
  463. * icas2 = indicateur sous-option realisee :
  464. icas2 = 0 ;
  465.  
  466. *----------------------------- PASSE DROI -----------------------------*
  467. * Sous-option DROI :
  468. si (ega mot2 'DROI') ;
  469. icas2 = 1 ;
  470.  
  471. * Lecture du point :
  472. argu P1*'POINT' ;
  473. P1 = P1 plus Pnul1 ;
  474.  
  475. * Lecture orientation de soudure :
  476. ipdir1 = faux ;
  477. si imot8 ;
  478. argu pdir1/'POINT' ;
  479. ipdir1 = exis pdir1 ;
  480. si (non ipdir1) ;
  481. argu pdir1*'LISTOBJE' ;
  482. si (neg (extr pdir1 type) 'POINT') ;
  483. erre '***** SOUDAGE : le LISTOBJE ne contient pas des objets POINT' ;
  484. fins ;
  485. si (vide pdir1) ;
  486. erre '***** SOUDAGE : le LISTOBJ est vide' ;
  487. fins ;
  488. fins ;
  489. fins ;
  490. si (non imot8) ;
  491. si (exis tab1 orientation_soudure) ;
  492. pdir1 = tab1.orientation_soudure ;
  493. ipdir1 = vrai ;
  494. sino ;
  495. erre '***** SOUDAGE : il manque la donnee de l''orientation de la soudure' ;
  496. fins ;
  497. fins ;
  498. wtab1 . dire = pdir1 ;
  499. *list pdir1 ;
  500.  
  501. * Trajectoire PASSE DROI :
  502. si idebut1 ;
  503. P0 = tab1.point_de_depart plus Pnul1 ;
  504. * Deplacements relatifs :
  505. si irela1 ;
  506. P1 = P0 plus P1 ;
  507. fins ;
  508. mail1 = P0 droi 1 P1 ;
  509. mail1 = mail1 coul roug ;
  510. ll1 = mesu mail1 ;
  511. maili1 = mail1 ;
  512. sino ;
  513. mail0 = tab1.trajectoire ;
  514. nbpts0 = nbno mail0 ;
  515. P0 = mail0 poin nbpts0 ;
  516. * Deplacements relatifs :
  517. si irela1 ;
  518. P1 = P0 plus P1 ;
  519. fins ;
  520. mail1 = P0 droi 1 P1 ;
  521. mail1 = mail1 coul roug ;
  522. ll1 = mesu mail1 ;
  523. maili1 = mail1 ;
  524. si (nbpts0 > 1) ;
  525. mail1 = mail0 et mail1 ;
  526. fins ;
  527. fins ;
  528.  
  529. * Increment de temps :
  530. dt1 = ll1 / vdep1 ;
  531. si idtcp1 ;
  532. dt1 = dt1 + dtcp1 ;
  533. fins ;
  534.  
  535. * Evolution puissance PASSE DROI :
  536. si idebut1 ;
  537. ltps1 = prog 0. dt1 ;
  538. lqtot1 = prog qtot1 qtot1 ;
  539. lti1 = ltps1 ;
  540. sino ;
  541. ltps0 = extr evqtot0 absc ;
  542. tps0 = extr ltps0 (dime ltps0) ;
  543. * Si la puissance indiquee est differente de celle existante :
  544. si idtcp1 ;
  545. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  546. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  547. lqtot1 = prog qtot1 qtot1 ;
  548. sino ;
  549. lti1 = prog tps0 (tps0 + dt1) ;
  550. ltps1 = prog (tps0 + dt1) ;
  551. lqtot1 = prog qtot1 ;
  552. fins ;
  553. ltps1 = ltps0 et ltps1 ;
  554. lqtot1 = lqtot0 et lqtot1 ;
  555. fins ;
  556. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  557.  
  558. * Evolution debit PASSE DROI :
  559. si idebut1 ;
  560. ltps1 = prog 0. dt1 ;
  561. ldebi1 = prog debi1 debi1 ;
  562. sino ;
  563. ltps0 = extr evdebi0 absc ;
  564. tps0 = extr ltps0 (dime ltps0) ;
  565. * Si la puissance indiquee est differente de celle existante :
  566. si idtcp1 ;
  567. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  568. ldebi1 = prog debi1 debi1 ;
  569. sino ;
  570. ltps1 = prog (tps0 + dt1) ;
  571. ldebi1 = prog debi1 ;
  572. fins ;
  573. ltps1 = ltps0 et ltps1 ;
  574. ldebi1 = ldebi0 et ldebi1 ;
  575. fins ;
  576. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  577.  
  578. * Evolution deplacement PASSE DROI :
  579. si idebut1 ;
  580. ltps1 = prog 0. dt1 ;
  581. ldep1 = prog 0. ll1 ;
  582. tps0 = 0. ;
  583. sino ;
  584. evdep0 = tab1.evolution_deplacement ;
  585. ltps0 = extr evdep0 absc ;
  586. ldep0 = extr evdep0 ordo ;
  587. tps0 = extr ltps0 (dime ltps0) ;
  588. dep0 = extr ldep0 (dime ldep0) ;
  589. si idtcp1 ;
  590. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  591. ldep1 = prog dep0 (dep0 + ll1) ;
  592. sino ;
  593. ltps1 = prog (tps0 + dt1) ;
  594. ldep1 = prog (dep0 + ll1) ;
  595. fins ;
  596. ltps1 = ltps0 et ltps1 ;
  597. ldep1 = ldep0 et ldep1 ;
  598. fins ;
  599. ldep1 = ldep1 / (maxi ldep1) * (mesu mail1) ;
  600. evdep1 = evol vert manu temp ltps1 ldep1 ;
  601.  
  602. * Evenement :
  603. si imot7 ;
  604. ttev1 = table ;
  605. ttev1 . nom = even1 ;
  606. si ieve1 ;
  607. ttev1 . temps = prog tps0 (tps0 + teve1) ;
  608. sino ;
  609. ttev1 . temps = prog tps0 ;
  610. fins ;
  611. si (exis tab1 'EVENEMENTS') ;
  612. nbev1 = (dime tab1.evenements) + 1 ;
  613. sino ;
  614. tab1.evenements = table ;
  615. nbev1 = 1 ;
  616. fins ;
  617. tab1.evenements.nbev1 = ttev1 ;
  618. fins ;
  619.  
  620. * Evolution direction PASSE DROIT (si on soude) :
  621. si iqtot1 ;
  622. si idebut1 ;
  623. si ipdir1 ;
  624. ltps1 = prog 0. dt1 ;
  625. ldir1 = enum pdir1 pdir1 ;
  626. * Direction transverse (DIRL) :
  627. pdirl1 = (P1 moin P0) pvec pdir1 ;
  628. pdirl1 = pdirl1 / (norm pdirl1) ;
  629. ldirl1 = enum pdirl1 pdirl1 ;
  630. sino ;
  631. * Si ipdir1 FAUX, alors pdir1 LISTOBJE :
  632. nbdir1 = dime pdir1 ;
  633. si (nbdir1 ega 1) ;
  634. pdir1 = pdir1 et (pdir1 extr 1) ;
  635. nbdir1 = 2 ;
  636. fins ;
  637. ltps1 = prog 0. ;
  638. tpsi1 = 0. ;
  639. nbdir1 = nbdir1 - 1 ;
  640. dti1 = dt1 / (flot nbdir1) ;
  641. repe bdir1 nbdir1 ;
  642. tpsi1 = tpsi1 + dti1 ;
  643. si (&bdir1 ega nbdir1) ; tpsi1 = dt1 ; fins ;
  644. ltps1 = ltps1 et tpsi1 ;
  645. fin bdir1 ;
  646. ldir1 = pdir1 ;
  647. * Direction transverse (DIRL) :
  648. si ipara1 ;
  649. ldirl1 = enum (dime ldir1) * (P1 moin P0) ;
  650. opti para vrai ; mess 'ici 1' ;
  651. ldirl2 = pvec ldirl1 ldir1 ;
  652. opti para faux ;
  653. sino ;
  654. ldirl2 = enum ;
  655. pdirn1 = P1 moin P0 ;
  656. repe bx (dime ldir1) ;
  657. pnx = ldir1 extr &bx ;
  658. plx = pvec pdirn1 pnx ;
  659. ldirl2 = ldirl2 et plx ;
  660. fin bx ;
  661. fins ;
  662. ldirl1 = ldirl2 ;
  663. fins ;
  664. ltpsl1 = ltps1 ;
  665. sino ;
  666. si (exis tab1 evolution_orientation) ;
  667. cgdir0 = tab1.evolution_orientation ;
  668. ltps0 = extr cgdir0 lree dire ;
  669. ldir0 = extr cgdir0 lobj dire ;
  670. ltpsl0 = extr cgdir0 lree dirl ;
  671. ldirl0 = extr cgdir0 lobj dirl ;
  672. tps0dir = extr ltps0 (dime ltps0) ;
  673. pdir0 = extr ldir0 (dime ltps0) ;
  674. si (tps0dir ega tps0) ;
  675. si ipdir1 ;
  676. xcolli1 = (psca pdir0 pdir1) / (norm pdir0) / (norm pdir1) ;
  677. si (xcolli1 neg 1.) ;
  678. erre '***** SOUDAGE : orientation de soudure incompatible avec precedente' ;
  679. fins ;
  680. ltps1 = prog (tps0 + dt1) ;
  681. ldir1 = enum pdir1 ;
  682. * Direction transverse (DIRL) :
  683. pdirl1 = (P1 moin P0) pvec pdir1 ;
  684. pdirl1 = pdirl1 / (norm pdirl1) ;
  685. ldirl1 = enum pdirl1 ;
  686. pdirl0 = extr ldirl0 (dime ldirl0) ;
  687. pdirl10 = 0.5 * (pdirl0 plus pdirl1) ;
  688. *si ((norm pdirl10) < 1.e-10) ; mess '**** passe droi cas 1' ; list pdirl10 ; fins ;
  689. si ((norm pdirl10) > 1.e-3) ;
  690. ldirl0 = (ldirl0 enle (dime ldirl0)) et pdirl10 ;
  691. fins ;
  692. sino ;
  693. pdiri1 = pdir1 extr 1 ;
  694. xcolli1 = (psca pdir0 pdiri1) / (norm pdir0) / (norm pdiri1) ;
  695. si (xcolli1 neg 1.) ;
  696. erre '***** SOUDAGE : orientation de soudure incompatible avec precedente' ;
  697. fins ;
  698. nbdir1 = dime pdir1 ;
  699. si (nbdir1 ega 1) ;
  700. pdir1 = pdir1 et (pdir1 extr 1) ;
  701. nbdir1 = 2 ;
  702. fins ;
  703. ltps1 = prog ;
  704. tpsi1 = tps0 ;
  705. nbdir1 = nbdir1 - 1 ;
  706. dti1 = dt1 / (flot nbdir1) ;
  707. repe bdir1 nbdir1 ;
  708. tpsi1 = tpsi1 + dti1 ;
  709. si (&bdir1 ega nbdir1) ; tpsi1 = tps0 + dt1 ; fins ;
  710. ltps1 = ltps1 et tpsi1 ;
  711. fin bdir1 ;
  712. ldir1 = pdir1 enle 1 ;
  713. * Direction transverse (DIRL) :
  714. si ipara1 ;
  715. ldirl1 = enum (dime ldir1) * (P1 moin P0) ;
  716. opti para vrai ; mess 'ici 2' ;
  717. ldirl2 = pvec ldirl1 ldir1 ;
  718. opti para faux ;
  719. sino ;
  720. ldirl2 = enum ;
  721. pdirn1 = P1 moin P0 ;
  722. repe bx (dime ldir1) ;
  723. pnx = ldir1 extr &bx ;
  724. plx = pvec pdirn1 pnx ;
  725. ldirl2 = ldirl2 et plx ;
  726. fin bx ;
  727. fins ;
  728. ldirl1 = ldirl2 ;
  729. pdirl1 = extr ldirl1 1 ;
  730. pdirl0 = extr ldirl0 (dime ldirl0) ;
  731. pdirl10 = 0.5 * (pdirl0 plus pdirl1) ;
  732. *si ((norm pdirl10) < 1.e-10) ; mess '**** passe droi cas 2' ; list pdirl10 ; fins ;
  733. si ((norm pdirl10) > 1.e-3) ;
  734. ldirl0 = (ldirl0 enle (dime ldirl0)) et pdirl10 ;
  735. fins ;
  736. fins ;
  737. sino ;
  738. si ipdir1 ;
  739. ltps1 = prog tps0 (tps0 + dt1) ;
  740. ldir1 = enum pdir1 pdir1 ;
  741. * Direction transverse (DIRL) :
  742. pdirl1 = (P1 moin P0) pvec pdir1 ;
  743. pdirl1 = pdirl1 / (norm pdirl1) ;
  744. ldirl1 = enum pdirl1 pdirl1 ;
  745. sino ;
  746. nbdir1 = dime pdir1 ;
  747. si (nbdir1 ega 1) ;
  748. pdir1 = pdir1 et (pdir1 extr 1) ;
  749. nbdir1 = 2 ;
  750. fins ;
  751. ltps1 = prog tps0 ;
  752. tpsi1 = tps0 ;
  753. nbdir1 = nbdir1 - 1 ;
  754. dti1 = dt1 / (flot nbdir1) ;
  755. repe bdir1 nbdir1 ;
  756. tpsi1 = tpsi1 + dti1 ;
  757. si (&bdir1 ega nbdir1) ; tpsi1 = tps0 + dt1 ; fins ;
  758. ltps1 = ltps1 et tpsi1 ;
  759. fin bdir1 ;
  760. ldir1 = pdir1 ;
  761. * Direction transverse (DIRL) :
  762. si ipara1 ;
  763. ldirl1 = enum (dime ldir1) * (P1 moin P0) ;
  764. opti para vrai ; mess 'ici 3' ;
  765. ldirl2 = pvec ldirl1 ldir1 ;
  766. opti para faux ;
  767. sino ;
  768. ldirl2 = enum ;
  769. pdirn1 = P1 moin P0 ;
  770. repe bx (dime ldir1) ;
  771. pnx = ldir1 extr &bx ;
  772. plx = pvec pdirn1 pnx ;
  773. ldirl2 = ldirl2 et plx ;
  774. fin bx ;
  775. fins ;
  776. ldirl1 = ldirl2 ;
  777. fins ;
  778. fins ;
  779. ltpsl1 = ltpsl0 et ltps1 ;
  780. ltps1 = ltps0 et ltps1 ;
  781. ldir1 = ldir0 et ldir1 ;
  782. ldirl1 = ldirl0 et ldirl1 ;
  783. sino ;
  784. si ipdir1 ;
  785. ltps1 = prog flot0 dt1 ;
  786. ldir1 = enum pdir1 pdir1 ;
  787. * Direction transverse (DIRL) :
  788. pdirl1 = (P1 moin P0) pvec pdir1 ;
  789. pdirl1 = pdirl1 / (norm pdirl1) ;
  790. ldirl1 = enum pdirl1 pdirl1 ;
  791. sino ;
  792. * Si ipdir1 FAUX, alors pdir1 LISTOBJE :
  793. nbdir1 = dime pdir1 ;
  794. si (nbdir1 ega 1) ;
  795. pdir1 = pdir1 et (pdir1 extr 1) ;
  796. nbdir1 = 2 ;
  797. fins ;
  798. ltps1 = prog flot0 ;
  799. tpsi1 = flot0 ;
  800. nbdir1 = nbdir1 - 1 ;
  801. dti1 = dt1 / (flot nbdir1) ;
  802. repe bdir1 nbdir1 ;
  803. tpsi1 = tpsi1 + dti1 ;
  804. si (&bdir1 ega nbdir1) ; tpsi1 = tps0 + dt1 ; fins ;
  805. ltps1 = ltps1 et tpsi1 ;
  806. fin bdir1 ;
  807. ldir1 = pdir1 ;
  808. * Direction transverse (DIRL) :
  809. si ipara1 ;
  810. ldirl1 = enum (dime ldir1) * (P1 moin P0) ;
  811. ldirl1 = enum (dime ldir1) * (P1 moin P0) ;
  812. opti para vrai ; mess 'ici 4' ;
  813. ldirl2 = pvec ldirl1 ldir1 ;
  814. opti para faux ;
  815. sino ;
  816. ldirl2 = enum ;
  817. pdirn1 = P1 moin P0 ;
  818. repe bx (dime ldir1) ;
  819. pnx = ldir1 extr &bx ;
  820. plx = pvec pdirn1 pnx ;
  821. ldirl2 = ldirl2 et plx ;
  822. fin bx ;
  823. fins ;
  824. ldirl1 = ldirl2 ;
  825. fins ;
  826. ltpsl1 = ltps1 ;
  827. fins ;
  828. fins ;
  829. cgdir1 = char dire ltps1 ldir1 ;
  830. * Direction transverse (DIRL) :
  831. cgdir2 = char dirl ltpsl1 ldirl1 ;
  832. cgdir1 = cgdir1 et cgdir2 ;
  833. fins ;
  834.  
  835. * Enregistrement donnees PASSE DROI
  836. si (exis tab1 passes) ;
  837. nps1 = dime tab1.passes ;
  838. sino ;
  839. nps1 = 0 ;
  840. tab1.passes = table ;
  841. fins ;
  842. nps1 = nps1 + 1 ;
  843. tab1.passes.nps1 = table ;
  844.  
  845. tab1.passes.nps1.maillage = maili1 ;
  846. tab1.passes.nps1.geometrie = mot 'DROI' ;
  847. tab1.passes.nps1.instants = lti1 ;
  848. tab1.passes.nps1.vitesse = vdep1 ;
  849. tab1.passes.nps1.puissance = qtot1 ;
  850. tab1.passes.nps1.debit = debi1 ;
  851.  
  852. si (exis tab1 'LARGEUR_DE_PASSE') ;
  853. tab1.passes.nps1.largeur = tab1.largeur_de_passe ;
  854. fins ;
  855.  
  856. * Enregistrements en fin de traitement option pour eviter
  857. * modifier table avant fin realisation option
  858. tab1.trajectoire = mail1 ;
  859. tab1.evolution_puissance = evqtot1 ;
  860. tab1.evolution_debit = evdebi1 ;
  861. tab1.evolution_deplacement = evdep1 ;
  862. si iqtot1 ;
  863. tab1.evolution_orientation = cgdir1 ;
  864. fins ;
  865.  
  866. quit soudage ;
  867. * Fin option PASSE DROI :
  868. fins ;
  869.  
  870. *----------------------------- PASSE CERC -----------------------------*
  871. * Sous-option CERC :
  872. si (ega mot2 'CERC') ;
  873. icas2 = 2 ;
  874.  
  875. * P1 est le centre du cercle, P2, l'extremite de la trajectoire
  876. argu P2*'POINT' P1*'POINT' ;
  877. P1 = P1 plus Pnul1 ;
  878. P2 = P2 plus Pnul1 ;
  879.  
  880. * Lecture orientation de soudure :
  881. ipdir1 = faux ;
  882. iradx1 = iradext1 ou iradint1 ;
  883. si imot8 ;
  884. argu pdir1/'POINT' ;
  885. ipdir1 = exis pdir1 ;
  886. fins ;
  887. si ((non imot8) et (non iradx1)) ;
  888. si (exis tab1 orientation_soudure) ;
  889. pdir1 = tab1.orientation_soudure ;
  890. ipdir1 = vrai ;
  891. sino ;
  892. erre '***** SOUDAGE : il manque la donnee de l''orientation de la soudure' ;
  893. fins ;
  894. fins ;
  895. wtab1 . dire = pdir1 ;
  896. *list pdir1 ;
  897. *list iradext1 ;
  898. *list iradint1 ;
  899.  
  900. * Trajectoire PASSE CERC :
  901. si idebut1 ;
  902. P0 = tab1.point_de_depart plus Pnul1 ;
  903. * Deplacements relatifs :
  904. si irela1 ;
  905. P1 = P0 plus P1 ;
  906. P2 = P0 plus P2 ;
  907. fins ;
  908. si (non (exis N1)) ;
  909. V1 = P0 moin P1 ;
  910. V2 = P2 moin P1 ;
  911. V1 = V1 / (norm V1) ;
  912. V2 = V2 / (norm V2) ;
  913. N1 = (acos (psca V1 V2)) / 5. ;
  914. N1 = maxi (lect (enti N1) 1) ;
  915. fins ;
  916. mail1 = CERC N1 P0 P1 P2 ;
  917. mail1 = mail1 coul roug ;
  918. maili1 = mail1 ;
  919. ll1 = mesu mail1 ;
  920. sino ;
  921. mail0 = tab1.trajectoire ;
  922. nbpts0 = nbno mail0 ;
  923. P0 = mail0 poin nbpts0 ;
  924. * Deplacements relatifs :
  925. si irela1 ;
  926. P1 = P0 plus P1 ;
  927. P2 = P0 plus P2 ;
  928. fins ;
  929. si (non (exis N1)) ;
  930. V1 = P0 moin P1 ;
  931. V2 = P2 moin P1 ;
  932. V1 = V1 / (norm V1) ;
  933. V2 = V2 / (norm V2) ;
  934. N1 = (acos (psca V1 V2)) / 5. ;
  935. N1 = maxi (lect (enti N1) 1) ;
  936. fins ;
  937. mail1 = CERC N1 P0 P1 P2 ;
  938. mail1 = mail1 coul roug ;
  939. maili1 = mail1 ;
  940. ll1 = mesu mail1 ;
  941. si (nbpts0 > 1) ;
  942. mail1 = mail0 et mail1 ;
  943. fins ;
  944. fins ;
  945.  
  946. * Normale unitaire au plan du cercle pour DIRL :
  947. P1P0 = P1 moin P0 ;
  948. P1P2 = P1 moin P2 ;
  949. Pnc1 = pvec P1P0 P1P2 ;
  950. Pnc1 = Pnc1 / (norm Pnc1) ;
  951.  
  952. * Increment de temps :
  953. dt1 = ll1 / vdep1 ;
  954. si idtcp1 ;
  955. dt1 = dt1 + dtcp1 ;
  956. fins ;
  957.  
  958. * Evolution puissance PASSE CERC :
  959. si idebut1 ;
  960. ltps1 = prog 0. dt1 ;
  961. lqtot1 = prog qtot1 qtot1 ;
  962. lti1 = ltps1 ;
  963. sino ;
  964. ltps0 = extr evqtot0 absc ;
  965. tps0 = extr ltps0 (dime ltps0) ;
  966. * Si la puissance indiquee est differente de celle existante :
  967. si idtcp1 ;
  968. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  969. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  970. lqtot1 = prog qtot1 qtot1 ;
  971. sino ;
  972. lti1 = prog tps0 (tps0 + dt1) ;
  973. ltps1 = prog (tps0 + dt1) ;
  974. lqtot1 = prog qtot1 ;
  975. fins ;
  976. ltps1 = ltps0 et ltps1 ;
  977. lqtot1 = lqtot0 et lqtot1 ;
  978. fins ;
  979. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  980.  
  981. * Evolution debit PASSE CERC :
  982. si idebut1 ;
  983. ltps1 = prog 0. dt1 ;
  984. ldebi1 = prog debi1 debi1 ;
  985. sino ;
  986. ltps0 = extr evdebi0 absc ;
  987. tps0 = extr ltps0 (dime ltps0) ;
  988. * Si la puissance indiquee est differente de celle existante :
  989. si idtcp1 ;
  990. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  991. ldebi1 = prog debi1 debi1 ;
  992. sino ;
  993. ltps1 = prog (tps0 + dt1) ;
  994. ldebi1 = prog debi1 ;
  995. fins ;
  996. ltps1 = ltps0 et ltps1 ;
  997. ldebi1 = ldebi0 et ldebi1 ;
  998. fins ;
  999. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  1000.  
  1001. * Evolution deplacement PASSE CERC :
  1002. si idebut1 ;
  1003. ltps1 = prog 0. dt1 ;
  1004. ldep1 = prog 0. ll1 ;
  1005. tps0 = 0. ;
  1006. sino ;
  1007. evdep0 = tab1.evolution_deplacement ;
  1008. ltps0 = extr evdep0 absc ;
  1009. ldep0 = extr evdep0 ordo ;
  1010. tps0 = extr ltps0 (dime ltps0) ;
  1011. dep0 = extr ldep0 (dime ldep0) ;
  1012. si idtcp1 ;
  1013. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1014. ldep1 = prog dep0 (dep0 + ll1) ;
  1015. sino ;
  1016. ltps1 = prog (tps0 + dt1) ;
  1017. ldep1 = prog (dep0 + ll1) ;
  1018. fins ;
  1019. ltps1 = ltps0 et ltps1 ;
  1020. ldep1 = ldep0 et ldep1 ;
  1021. fins ;
  1022. ldep1 = ldep1 / (maxi ldep1) * (mesu mail1) ;
  1023. evdep1 = evol vert manu temp ltps1 ldep1 ;
  1024.  
  1025. * Evenement :
  1026. si imot7 ;
  1027. ttev1 = table ;
  1028. ttev1 . nom = even1 ;
  1029. si ieve1 ;
  1030. ttev1 . temps = prog tps0 (tps0 + teve1) ;
  1031. sino ;
  1032. ttev1 . temps = prog tps0 ;
  1033. fins ;
  1034. si (exis tab1 'EVENEMENTS') ;
  1035. nbev1 = (dime tab1.evenements) + 1 ;
  1036. sino ;
  1037. tab1.evenements = table ;
  1038. nbev1 = 1 ;
  1039. fins ;
  1040. tab1.evenements.nbev1 = ttev1 ;
  1041. fins ;
  1042.  
  1043. * Evolution direction PASSE CERC (si on soude) :
  1044. si iqtot1 ;
  1045. * Traitement direction radiale ext./int. , combo Pdir1 :
  1046. * & direction transverse (DIRL) :
  1047. ldir1 = enum ;
  1048. ldirn1 = enum ;
  1049. nbnoc1 = nbno maili1 ;
  1050. dti1 = dt1 / (flot (nbnoc1 - 1)) ;
  1051. repe bmail1 nbnoc1 ;
  1052. pi1 = maili1 poin &bmail1 ;
  1053. vi1 = (pi1 moin p1) ;
  1054. vi1 = vi1 / (norm vi1) ;
  1055. vli1 = pvec pnc1 vi1 ;
  1056. si iradint1 ;
  1057. vi1 = -1. * vi1 ;
  1058. fins ;
  1059. si ipdir1 ;
  1060. vi1 = vi1 plus pdir1 ;
  1061. fins ;
  1062. *list vi1 ;
  1063. ldir1 = ldir1 et vi1 ;
  1064. ldirn1 = ldirn1 et vli1 ;
  1065. fin bmail1 ;
  1066. si iradx1 ;
  1067. *list (ldir1 extr 1) ;
  1068. *list (ldir1 extr 2) ;
  1069. *list (ldir1 extr 4) ;
  1070. pdir1 = ldir1 ;
  1071. ipdir1 = faux ;
  1072. fins ;
  1073. * Construction liste directions :
  1074. si idebut1 ;
  1075. ltpsl1 = prog 0. pas dti1 dt1 ;
  1076. si ipdir1 ;
  1077. ltps1 = prog 0. dt1 ;
  1078. ldir1 = enum pdir1 pdir1 ;
  1079. * Direction transverse (DIRL) :
  1080. si ipara1 ;
  1081. ldirl1 = enum (dime ltpsl1) * pdir1 ;
  1082. opti para vrai ; mess 'ici 5' ;
  1083. ldirl2 = pvec ldirn1 ldirl1 ;
  1084. opti para faux ;
  1085. sino ;
  1086. ldirl2 = enum ;
  1087. repe bx (dime ltpsl1) ;
  1088. pnx = ldirn1 extr &bx ;
  1089. plx = pvec pnx pdir1 ;
  1090. ldirl2 = ldirl2 et plx ;
  1091. fin bx ;
  1092. fins ;
  1093. ldirl1 = ldirl2 ;
  1094. sino ;
  1095. * Si ipdir1 FAUX, alors pdir1 LISTOBJE :
  1096. nbdir1 = dime pdir1 ;
  1097. si (nbdir1 ega 1) ;
  1098. pdir1 = pdir1 et (pdir1 extr 1) ;
  1099. nbdir1 = 2 ;
  1100. fins ;
  1101. ltps1 = prog 0. ;
  1102. tpsi1 = 0. ;
  1103. nbdir1 = nbdir1 - 1 ;
  1104. dti1 = dt1 / (flot nbdir1) ;
  1105. repe bdir1 nbdir1 ;
  1106. tpsi1 = tpsi1 + dti1 ;
  1107. si (&bdir1 ega nbdir1) ; tpsi1 = dt1 ; fins ;
  1108. ltps1 = ltps1 et tpsi1 ;
  1109. fin bdir1 ;
  1110. ldir1 = pdir1 ;
  1111. * Direction transverse (DIRL) :
  1112. cgxx1 = char dirx ltps1 ldir1 ;
  1113. ldirl1 = enum ;
  1114. repe bxx1 (dime ltpsl1) ;
  1115. tpsli1 = extr ltpsl1 &bxx1 ;
  1116. pdirx1 = tire cgxx1 dirx tpsli1 ;
  1117. pdirn1 = ldirn1 extr &bxx1 ;
  1118. pdirli1 = pvec pdirn1 pdirx1 ;
  1119. ldirl1 = ldirl1 et pdirli1 ;
  1120. fin bxx1 ;
  1121. fins ;
  1122. sino ;
  1123. ltpsl1 = prog tps0 pas dti1 (tps0 + dt1) ;
  1124. si (exis tab1 evolution_orientation) ;
  1125. cgdir0 = tab1.evolution_orientation ;
  1126. ltps0 = extr cgdir0 lree dire ;
  1127. ldir0 = extr cgdir0 lobj dire ;
  1128. ltpsl0 = extr cgdir0 lree dirl ;
  1129. ldirl0 = extr cgdir0 lobj dirl ;
  1130. tps0dir = extr ltps0 (dime ltps0) ;
  1131. pdir0 = extr ldir0 (dime ltps0) ;
  1132. si (tps0dir ega tps0) ;
  1133. ltpsl1 = ltpsl1 enle 1 ;
  1134. si ipdir1 ;
  1135. xcolli1 = (psca pdir0 pdir1) / (norm pdir0) / (norm pdir1) ;
  1136. si (xcolli1 neg 1.) ;
  1137. erre '***** SOUDAGE : orientation de soudure incompatible avec precedente' ;
  1138. fins ;
  1139. ltps1 = prog (tps0 + dt1) ;
  1140. ldir1 = enum pdir1 ;
  1141. * Direction transverse (DIRL) :
  1142. si ipara1 ;
  1143. ldirl1 = enum (dime ltpsl1) * pdir1 ;
  1144. opti para vrai ; mess 'ici 6' ;
  1145. ldirl2 = pvec ldirn1 ldirl1 ;
  1146. opti para faux ;
  1147. sino ;
  1148. ldirl2 = enum ;
  1149. repe bx (dime ltpsl1) ;
  1150. pnx = ldirn1 extr &bx ;
  1151. plx = pvec pnx pdir1 ;
  1152. ldirl2 = ldirl2 et plx ;
  1153. fin bx ;
  1154. fins ;
  1155. ldirl1 = ldirl2 ;
  1156. pdirl1 = extr ldirl1 1 ;
  1157. pdirl0 = extr ldirl0 (dime ldirl0) ;
  1158. pdirl10 = 0.5 * (pdirl0 plus pdirl1) ;
  1159. *si ((norm pdirl10) < 1.e-10) ; mess '**** passe cerc cas 7' ; list pdirl10 ; fins ;
  1160. si ((norm pdirl10) > 1.e-3) ;
  1161. ldirl0 = (ldirl0 enle (dime ldirl0)) et pdirl10 ;
  1162. fins ;
  1163. sino ;
  1164. pdiri1 = pdir1 extr 1 ;
  1165. xcolli1 = (psca pdir0 pdiri1) / (norm pdir0) / (norm pdiri1) ;
  1166. si (xcolli1 neg 1.) ;
  1167. erre '***** SOUDAGE : orientation de soudure incompatible avec precedente' ;
  1168. fins ;
  1169.  
  1170. nbdir1 = dime pdir1 ;
  1171. si (nbdir1 ega 1) ;
  1172. pdir1 = pdir1 et (pdir1 extr 1) ;
  1173. nbdir1 = 2 ;
  1174. fins ;
  1175. ltps1 = prog ;
  1176. tpsi1 = tps0 ;
  1177. nbdir1 = nbdir1 - 1 ;
  1178. dti1 = dt1 / (flot nbdir1) ;
  1179. repe bdir1 nbdir1 ;
  1180. tpsi1 = tpsi1 + dti1 ;
  1181. si (&bdir1 ega nbdir1) ; tpsi1 = tps0 + dt1 ; fins ;
  1182. ltps1 = ltps1 et tpsi1 ;
  1183. fin bdir1 ;
  1184. ldir1 = pdir1 enle 1 ;
  1185. * Direction transverse (DIRL) :
  1186. si (nbdir1 ega 1) ;
  1187. ldirl1 = enum ;
  1188. repe bxx1 (dime ltpsl1) ;
  1189. tpsli1 = extr ltpsl1 &bxx1 ;
  1190. pdirn1 = ldirn1 extr &bxx1 ;
  1191. pdirli1 = pvec pdirn1 (extr ldir1 1) ;
  1192. ldirl1 = ldirl1 et pdirli1 ;
  1193. fin bxx1 ;
  1194. sino ;
  1195. cgxx1 = char dirx ltps1 ldir1 ;
  1196. ldirl1 = enum ;
  1197. repe bxx1 (dime ltpsl1) ;
  1198. tpsli1 = extr ltpsl1 &bxx1 ;
  1199. pdirx1 = tire cgxx1 dirx tpsli1 ;
  1200. pdirn1 = ldirn1 extr &bxx1 ;
  1201. pdirli1 = pvec pdirn1 pdirx1 ;
  1202. ldirl1 = ldirl1 et pdirli1 ;
  1203. fin bxx1 ;
  1204. fins ;
  1205. pdirl1 = extr ldirl1 1 ;
  1206. pdirl0 = extr ldirl0 (dime ldirl0) ;
  1207. pdirl10 = 0.5 * (pdirl0 plus pdirl1) ;
  1208. *si ((norm pdirl10) < 1.e-10) ; mess '**** passe cerc cas 2' ; list pdirl10 ; fins ;
  1209. si ((norm pdirl10) > 1.e-3) ;
  1210. ldirl0 = (ldirl0 enle (dime ldirl0)) et pdirl10 ;
  1211. fins ;
  1212. fins ;
  1213. sino ;
  1214. si ipdir1 ;
  1215. ltps1 = prog tps0 (tps0 + dt1) ;
  1216. ldir1 = enum pdir1 pdir1 ;
  1217. * Direction transverse (DIRL) :
  1218. si ipara1 ;
  1219. ldirl1 = enum (dime ltpsl1) * pdir1 ;
  1220. opti para vrai ; mess 'ici 7' ;
  1221. ldirl2 = pvec ldirn1 ldirl1 ;
  1222. opti para faux ;
  1223. sino ;
  1224. ldirl2 = enum ;
  1225. repe bx (dime ltpsl1) ;
  1226. pnx = ldirn1 extr &bx ;
  1227. plx = pvec pnx pdir1 ;
  1228. ldirl2 = ldirl2 et plx ;
  1229. fin bx ;
  1230. fins ;
  1231. ldirl1 = ldirl2 ;
  1232. sino ;
  1233. nbdir1 = dime pdir1 ;
  1234. si (nbdir1 ega 1) ;
  1235. pdir1 = pdir1 et (pdir1 extr 1) ;
  1236. nbdir1 = 2 ;
  1237. fins ;
  1238. ltps1 = prog tps0 ;
  1239. tpsi1 = tps0 ;
  1240. nbdir1 = nbdir1 - 1 ;
  1241. dti1 = dt1 / (flot nbdir1) ;
  1242. repe bdir1 nbdir1 ;
  1243. tpsi1 = tpsi1 + dti1 ;
  1244. si (&bdir1 ega nbdir1) ; tpsi1 = tps0 + dt1 ; fins ;
  1245. ltps1 = ltps1 et tpsi1 ;
  1246. fin bdir1 ;
  1247. ldir1 = pdir1 ;
  1248. * Direction transverse (DIRL) :
  1249. cgxx1 = char dirx ltps1 ldir1 ;
  1250. ldirl1 = enum ;
  1251. repe bxx1 (dime ltpsl1) ;
  1252. tpsli1 = extr ltpsl1 &bxx1 ;
  1253. pdirx1 = tire cgxx1 dirx tpsli1 ;
  1254. pdirn1 = ldirn1 extr &bxx1 ;
  1255. pdirli1 = pvec pdirn1 pdirx1 ;
  1256. ldirl1 = ldirl1 et pdirli1 ;
  1257. fin bxx1 ;
  1258. fins ;
  1259. fins ;
  1260. ltps1 = ltps0 et ltps1 ;
  1261. ldir1 = ldir0 et ldir1 ;
  1262. ltpsl1 = ltpsl0 et ltpsl1 ;
  1263. ldirl1 = ldirl0 et ldirl1 ;
  1264. *list tps0 ;
  1265. *list ltpsl1 ;
  1266. sino ;
  1267. si ipdir1 ;
  1268. ltps1 = prog flot0 dt1 ;
  1269. ldir1 = enum pdir1 pdir1 ;
  1270. * Direction transverse (DIRL) :
  1271. si ipara1 ;
  1272. ldirl1 = enum (dime ltpsl1) * pdir1 ;
  1273. opti para vrai ; mess 'ici 8' ;
  1274. ldirl2 = pvec ldirn1 ldirl1 ;
  1275. opti para faux ;
  1276. sino ;
  1277. ldirl2 = enum ;
  1278. repe bx (dime ltpsl1) ;
  1279. pnx = ldirn1 extr &bx ;
  1280. plx = pvec pnx pdir1 ;
  1281. ldirl2 = ldirl2 et plx ;
  1282. fin bx ;
  1283. fins ;
  1284. ldirl1 = ldirl2 ;
  1285. sino ;
  1286. * Si ipdir1 FAUX, alors pdir1 LISTOBJE :
  1287. nbdir1 = dime pdir1 ;
  1288. si (nbdir1 ega 1) ;
  1289. pdir1 = pdir1 et (pdir1 extr 1) ;
  1290. nbdir1 = 2 ;
  1291. fins ;
  1292. ltps1 = prog flot0 ;
  1293. tpsi1 = flot0 ;
  1294. nbdir1 = nbdir1 - 1 ;
  1295. dti1 = dt1 / (flot nbdir1) ;
  1296. repe bdir1 nbdir1 ;
  1297. tpsi1 = tpsi1 + dti1 ;
  1298. si (&bdir1 ega nbdir1) ; tpsi1 = tps0 + dt1 ; fins ;
  1299. ltps1 = ltps1 et tpsi1 ;
  1300. fin bdir1 ;
  1301. ldir1 = pdir1 ;
  1302. * Direction transverse (DIRL) :
  1303. cgxx1 = char dirx ltps1 ldir1 ;
  1304. ldirl1 = enum ;
  1305. repe bxx1 (dime ltpsl1) ;
  1306. tpsli1 = extr ltpsl1 &bxx1 ;
  1307. pdirx1 = tire cgxx1 dirx tpsli1 ;
  1308. pdirn1 = ldirn1 extr &bxx1 ;
  1309. pdirli1 = pvec pdirn1 pdirx1 ;
  1310. ldirl1 = ldirl1 et pdirli1 ;
  1311. fin bxx1 ;
  1312. fins ;
  1313. fins ;
  1314. fins ;
  1315. cgdir1 = char dire ltps1 ldir1 ;
  1316. * Direction transverse (DIRL) :
  1317. cgdir2 = char dirl ltpsl1 ldirl1 ;
  1318. cgdir1 = cgdir1 et cgdir2 ;
  1319. fins ;
  1320.  
  1321. * Enregistrement donnees PASSE CERC
  1322. si (exis tab1 passes) ;
  1323. nps1 = dime tab1.passes ;
  1324. sino ;
  1325. nps1 = 0 ;
  1326. tab1.passes = table ;
  1327. fins ;
  1328. nps1 = nps1 + 1 ;
  1329. tab1.passes.nps1 = table ;
  1330.  
  1331. tab1.passes.nps1.maillage = maili1 ;
  1332. tab1.passes.nps1.geometrie = mot 'CERC' ;
  1333. tab1.passes.nps1.centre = P1 ;
  1334. tab1.passes.nps1.instants = lti1 ;
  1335. tab1.passes.nps1.vitesse = vdep1 ;
  1336. tab1.passes.nps1.puissance = qtot1 ;
  1337. tab1.passes.nps1.debit = debi1 ;
  1338.  
  1339. si (exis tab1 'LARGEUR_DE_PASSE') ;
  1340. tab1.passes.nps1.largeur = tab1.largeur_de_passe ;
  1341. fins ;
  1342.  
  1343. * Enregistrements en fin de traitement option pour eviter
  1344. * modifier table avant fin realisation option
  1345. tab1.trajectoire = mail1 ;
  1346. tab1.evolution_puissance = evqtot1 ;
  1347. tab1.evolution_debit = evdebi1 ;
  1348. tab1.evolution_deplacement = evdep1 ;
  1349. si iqtot1 ;
  1350. tab1.evolution_orientation = cgdir1 ;
  1351. fins ;
  1352.  
  1353. quit soudage ;
  1354. * Fin option PASSE CERC :
  1355. fins ;
  1356.  
  1357. *----------------------------- PASSE MAIL -----------------------------*
  1358. * Sous-option MAIL :
  1359. si (ega mot2 'MAIL') ;
  1360. icas2 = 3 ;
  1361.  
  1362. argu mail1*'MAILLAGE' ;
  1363. eltyp1 = mail1 elem type ;
  1364. imax1 = 0 ;
  1365. si (exis eltyp1 'SEG2') ; imax1 = imax1 + 1 ; fins ;
  1366. si (exis eltyp1 'SEG3') ; imax1 = imax1 + 1 ; fins ;
  1367. si ((dime eltyp1) > imax1) ;
  1368. erre '***** ERREUR : le maillage doit etre compose de SEG2 ou de SEG3.' ;
  1369. fins ;
  1370. ll1 = mesu mail1 ;
  1371. maili1 = mail1 ;
  1372.  
  1373. * Lecture orientation de soudure :
  1374. ipdir1 = faux ;
  1375. si imot8 ;
  1376. argu pdir1/'POINT' ;
  1377. ipdir1 = exis pdir1 ;
  1378. si (non ipdir1) ;
  1379. argu pdir1*'LISTOBJE' ;
  1380. si (neg (extr pdir1 type) 'POINT') ;
  1381. erre '***** SOUDAGE : le LISTOBJE ne contient pas des objets POINT' ;
  1382. fins ;
  1383. si (vide pdir1) ;
  1384. erre '***** SOUDAGE : le LISTOBJ est vide' ;
  1385. fins ;
  1386. fins ;
  1387. fins ;
  1388. si (non imot8) ;
  1389. si (exis tab1 orientation_soudure) ;
  1390. pdir1 = tab1.orientation_soudure ;
  1391. ipdir1 = vrai ;
  1392. sino ;
  1393. erre '***** SOUDAGE : il manque la donnee de l''orientation de la soudure' ;
  1394. fins ;
  1395. fins ;
  1396. wtab1 . dire = pdir1 ;
  1397. *list pdir1 ;
  1398.  
  1399. * Trajectoire PASSE MAIL :
  1400. si idebut1 ;
  1401. P1 = mail1 poin 1 ;
  1402. tab1.point_de_depart = P1 ;
  1403. mail1 = mail1 coul roug ;
  1404. sino ;
  1405. mail0 = tab1.trajectoire ;
  1406. nbpts0 = nbno mail0 ;
  1407. P0 = mail0 poin nbpts0 ;
  1408. P1 = mail1 poin 1 ;
  1409. si (P1 neg P0) ;
  1410. tol1 = 1.e-10 * (mesu mail1) ;
  1411. si ((norm (P1 moin P0)) > tol1) ;
  1412. erre '***** ERREUR : MAILLAGE incompatible.' ;
  1413. quit soudage ;
  1414. sino ;
  1415. elim (P0 et P1) tol1 ;
  1416. fins ;
  1417. fins ;
  1418. si (nbpts0 > 1) ;
  1419. mail1 = mail1 coul roug ;
  1420. mail1 = mail0 et mail1 ;
  1421. fins ;
  1422. fins ;
  1423.  
  1424. * Increment de temps :
  1425. dt1 = ll1 / vdep1 ;
  1426. si idtcp1 ;
  1427. dt1 = dt1 + dtcp1 ;
  1428. fins ;
  1429.  
  1430. * Evolution puissance PASSE MAIL :
  1431. si idebut1 ;
  1432. ltps1 = prog 0. dt1 ;
  1433. lqtot1 = prog qtot1 qtot1 ;
  1434. lti1 = ltps1 ;
  1435. sino ;
  1436. ltps0 = extr evqtot0 absc ;
  1437. tps0 = extr ltps0 (dime ltps0) ;
  1438. * Si la puissance indiquee est differente de celle existante :
  1439. si idtcp1 ;
  1440. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1441. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1442. lqtot1 = prog qtot1 qtot1 ;
  1443. sino ;
  1444. lti1 = prog tps0 (tps0 + dt1) ;
  1445. ltps1 = prog (tps0 + dt1) ;
  1446. lqtot1 = prog qtot1 ;
  1447. fins ;
  1448. ltps1 = ltps0 et ltps1 ;
  1449. lqtot1 = lqtot0 et lqtot1 ;
  1450. fins ;
  1451. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  1452.  
  1453. * Evolution debit PASSE MAIL :
  1454. si idebut1 ;
  1455. ltps1 = prog 0. dt1 ;
  1456. ldebi1 = prog debi1 debi1 ;
  1457. sino ;
  1458. ltps0 = extr evdebi0 absc ;
  1459. tps0 = extr ltps0 (dime ltps0) ;
  1460. * Si la puissance indiquee est differente de celle existante :
  1461. si idtcp1 ;
  1462. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1463. ldebi1 = prog debi1 debi1 ;
  1464. sino ;
  1465. ltps1 = prog (tps0 + dt1) ;
  1466. ldebi1 = prog debi1 ;
  1467. fins ;
  1468. ltps1 = ltps0 et ltps1 ;
  1469. ldebi1 = ldebi0 et ldebi1 ;
  1470. fins ;
  1471. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  1472.  
  1473. * Evolution deplacement PASSE MAIL :
  1474. si idebut1 ;
  1475. ltps1 = prog 0. dt1 ;
  1476. ldep1 = prog 0. ll1 ;
  1477. tps0 = 0. ;
  1478. sino ;
  1479. evdep0 = tab1.evolution_deplacement ;
  1480. ltps0 = extr evdep0 absc ;
  1481. ldep0 = extr evdep0 ordo ;
  1482. tps0 = extr ltps0 (dime ltps0) ;
  1483. dep0 = extr ldep0 (dime ldep0) ;
  1484. si idtcp1 ;
  1485. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1486. ldep1 = prog dep0 (dep0 + ll1) ;
  1487. sino ;
  1488. ltps1 = prog (tps0 + dt1) ;
  1489. ldep1 = prog (dep0 + ll1) ;
  1490. fins ;
  1491. ltps1 = ltps0 et ltps1 ;
  1492. ldep1 = ldep0 et ldep1 ;
  1493. fins ;
  1494. ldep1 = ldep1 / (maxi ldep1) * (mesu mail1) ;
  1495. evdep1 = evol vert manu temp ltps1 ldep1 ;
  1496.  
  1497. * Evenement :
  1498. si imot7 ;
  1499. ttev1 = table ;
  1500. ttev1 . nom = even1 ;
  1501. si ieve1 ;
  1502. ttev1 . temps = prog tps0 (tps0 + teve1) ;
  1503. sino ;
  1504. ttev1 . temps = prog tps0 ;
  1505. fins ;
  1506. si (exis tab1 'EVENEMENTS') ;
  1507. nbev1 = (dime tab1.evenements) + 1 ;
  1508. sino ;
  1509. tab1.evenements = table ;
  1510. nbev1 = 1 ;
  1511. fins ;
  1512. tab1.evenements.nbev1 = ttev1 ;
  1513. fins ;
  1514.  
  1515. * Evolution direction PASSE MAIL (si on soude) :
  1516. si iqtot1 ;
  1517. * Traitement direction direction transverse (DIRL) :
  1518. ldirn1 = enum ;
  1519. nbelm1 = nbel maili1 ;
  1520. si (nbelm1 ega 1) ;
  1521. dti1 = dt1 ;
  1522. sino ;
  1523. dti1 = dt1 / (flot (nbelm1 - 1)) ;
  1524. fins ;
  1525. repe bmail1 nbelm1 ;
  1526. eli1 = maili1 elem &bmail1 ;
  1527. pi1 = eli1 poin 1 ;
  1528. pi2 = eli1 poin 2 ;
  1529. vni1 = (pi2 moin pi1) ;
  1530. vni1 = vni1 / (norm vni1) ;
  1531. *list vni1 ;
  1532. ldirn1 = ldirn1 et vni1 ;
  1533. fin bmail1 ;
  1534. si (nbelm1 ega 1) ;
  1535. ldirn1 = ldirn1 et vni1 ;
  1536. fins ;
  1537. si idebut1 ;
  1538. ltpsl1 = prog 0. pas dti1 dt1 ;
  1539. si ipdir1 ;
  1540. ltps1 = prog 0. dt1 ;
  1541. ldir1 = enum pdir1 pdir1 ;
  1542. * Direction transverse (DIRL) :
  1543. si ipara1 ;
  1544. ldirl1 = enum (dime ltpsl1) * pdir1 ;
  1545. opti para vrai ; mess 'ici 9' ;
  1546. ldirl2 = pvec ldirn1 ldirl1 ;
  1547. opti para faux ;
  1548. sino ;
  1549. ldirl2 = enum ;
  1550. repe bx (dime ltpsl1) ;
  1551. pnx = ldirn1 extr &bx ;
  1552. plx = pvec pnx pdir1 ;
  1553. ldirl2 = ldirl2 et plx ;
  1554. fin bx ;
  1555. fins ;
  1556. ldirl1 = ldirl2 ;
  1557. sino ;
  1558. * Si ipdir1 FAUX, alors pdir1 LISTOBJE :
  1559. nbdir1 = dime pdir1 ;
  1560. si (nbdir1 ega 1) ;
  1561. pdir1 = pdir1 et (pdir1 extr 1) ;
  1562. nbdir1 = 2 ;
  1563. fins ;
  1564. ltps1 = prog 0. ;
  1565. tpsi1 = 0. ;
  1566. nbdir1 = nbdir1 - 1 ;
  1567. dti1 = dt1 / (flot nbdir1) ;
  1568. repe bdir1 nbdir1 ;
  1569. tpsi1 = tpsi1 + dti1 ;
  1570. si (&bdir1 ega nbdir1) ; tpsi1 = dt1 ; fins ;
  1571. ltps1 = ltps1 et tpsi1 ;
  1572. fin bdir1 ;
  1573. ldir1 = pdir1 ;
  1574. * Direction transverse (DIRL) :
  1575. cgxx1 = char dirx ltps1 ldir1 ;
  1576. ldirl1 = enum ;
  1577. repe bxx1 (dime ltpsl1) ;
  1578. tpsli1 = extr ltpsl1 &bxx1 ;
  1579. pdirx1 = tire cgxx1 dirx tpsli1 ;
  1580. pdirn1 = ldirn1 extr &bxx1 ;
  1581. pdirli1 = pvec pdirn1 pdirx1 ;
  1582. ldirl1 = ldirl1 et pdirli1 ;
  1583. fin bxx1 ;
  1584. fins ;
  1585. sino ;
  1586. ltpsl1 = prog tps0 pas dti1 (tps0 + dt1) ;
  1587. si (exis tab1 evolution_orientation) ;
  1588. cgdir0 = tab1.evolution_orientation ;
  1589. ltps0 = extr cgdir0 lree dire ;
  1590. ldir0 = extr cgdir0 lobj dire ;
  1591. ltpsl0 = extr cgdir0 lree dirl ;
  1592. ldirl0 = extr cgdir0 lobj dirl ;
  1593. tps0dir = extr ltps0 (dime ltps0) ;
  1594. pdir0 = extr ldir0 (dime ltps0) ;
  1595. si (tps0dir ega tps0) ;
  1596. ltpsl1 = ltpsl1 enle 1 ;
  1597.  
  1598. si ipdir1 ;
  1599. xcolli1 = (psca pdir0 pdir1) / (norm pdir0) / (norm pdir1) ;
  1600. si (xcolli1 neg 1.) ;
  1601. erre '***** SOUDAGE : orientation de soudure incompatible avec precedente' ;
  1602. fins ;
  1603. ltps1 = prog (tps0 + dt1) ;
  1604. ldir1 = enum pdir1 ;
  1605. * Direction transverse (DIRL) :
  1606. si ipara1 ;
  1607. ldirl1 = enum (dime ltpsl1) * pdir1 ;
  1608. opti para vrai ; mess 'ici 10' ;
  1609. ldirl2 = pvec ldirn1 ldirl1 ;
  1610. opti para faux ;
  1611. sino ;
  1612. ldirl2 = enum ;
  1613. repe bx (dime ltpsl1) ;
  1614. pnx = ldirn1 extr &bx ;
  1615. plx = pvec pnx pdir1 ;
  1616. ldirl2 = ldirl2 et plx ;
  1617. fin bx ;
  1618. fins ;
  1619. ldirl1 = ldirl2 ;
  1620. pdirl1 = extr ldirl1 1 ;
  1621. pdirl0 = extr ldirl0 (dime ldirl0) ;
  1622. pdirl10 = 0.5 * (pdirl0 plus pdirl1) ;
  1623. *si ((norm pdirl10) < 1.e-10) ; mess '**** passe mail cas 1' ; list pdirl10 ; fins ;
  1624. si ((norm pdirl10) > 1.e-3) ;
  1625. ldirl0 = (ldirl0 enle (dime ldirl0)) et pdirl10 ;
  1626. fins ;
  1627. sino ;
  1628. pdiri1 = pdir1 extr 1 ;
  1629. xcolli1 = (psca pdir0 pdiri1) / (norm pdir0) / (norm pdiri1) ;
  1630. si (xcolli1 neg 1.) ;
  1631. erre '***** SOUDAGE : orientation de soudure incompatible avec precedente' ;
  1632. fins ;
  1633.  
  1634. nbdir1 = dime pdir1 ;
  1635. si (nbdir1 ega 1) ;
  1636. pdir1 = pdir1 et (pdir1 extr 1) ;
  1637. nbdir1 = 2 ;
  1638. fins ;
  1639. ltps1 = prog ;
  1640. tpsi1 = tps0 ;
  1641. nbdir1 = nbdir1 - 1 ;
  1642. dti1 = dt1 / (flot nbdir1) ;
  1643. repe bdir1 nbdir1 ;
  1644. tpsi1 = tpsi1 + dti1 ;
  1645. si (&bdir1 ega nbdir1) ; tpsi1 = tps0 + dt1 ; fins ;
  1646. ltps1 = ltps1 et tpsi1 ;
  1647. fin bdir1 ;
  1648. ldir1 = pdir1 enle 1 ;
  1649. * Direction transverse (DIRL) :
  1650. si (nbdir1 ega 1) ;
  1651. ldirl1 = enum ;
  1652. repe bxx1 (dime ltpsl1) ;
  1653. tpsli1 = extr ltpsl1 &bxx1 ;
  1654. pdirn1 = ldirn1 extr &bxx1 ;
  1655. pdirli1 = pvec pdirn1 (extr ldir1 1) ;
  1656. ldirl1 = ldirl1 et pdirli1 ;
  1657. fin bxx1 ;
  1658. sino ;
  1659. cgxx1 = char dirx ltps1 ldir1 ;
  1660. ldirl1 = enum ;
  1661. repe bxx1 (dime ltpsl1) ;
  1662. tpsli1 = extr ltpsl1 &bxx1 ;
  1663. pdirx1 = tire cgxx1 dirx tpsli1 ;
  1664. pdirn1 = ldirn1 extr &bxx1 ;
  1665. pdirli1 = pvec pdirn1 pdirx1 ;
  1666. ldirl1 = ldirl1 et pdirli1 ;
  1667. fin bxx1 ;
  1668. fins ;
  1669. pdirl1 = extr ldirl1 1 ;
  1670. pdirl0 = extr ldirl0 (dime ldirl0) ;
  1671. pdirl10 = 0.5 * (pdirl0 plus pdirl1) ;
  1672. *si ((norm pdirl10) < 1.e-10) ; mess '**** passe cerc cas 2' ; list pdirl10 ; fins ;
  1673. si ((norm pdirl10) > 1.e-3) ;
  1674. ldirl0 = (ldirl0 enle (dime ldirl0)) et pdirl10 ;
  1675. fins ;
  1676. fins ;
  1677. sino ;
  1678. si ipdir1 ;
  1679. ltps1 = prog tps0 (tps0 + dt1) ;
  1680. ldir1 = enum pdir1 pdir1 ;
  1681.  
  1682. * Direction transverse (DIRL) :
  1683. si ipara1 ;
  1684. ldirl1 = enum (dime ltpsl1) * pdir1 ;
  1685. opti para vrai ; mess 'ici 11' ;
  1686. ldirl2 = pvec ldirn1 ldirl1 ;
  1687. opti para faux ;
  1688. sino ;
  1689. ldirl2 = enum ;
  1690. repe bx (dime ltpsl1) ;
  1691. pnx = ldirn1 extr &bx ;
  1692. plx = pvec pnx pdir1 ;
  1693. ldirl2 = ldirl2 et plx ;
  1694. fin bx ;
  1695. fins ;
  1696. ldirl1 = ldirl2 ;
  1697. sino ;
  1698. nbdir1 = dime pdir1 ;
  1699. si (nbdir1 ega 1) ;
  1700. pdir1 = pdir1 et (pdir1 extr 1) ;
  1701. nbdir1 = 2 ;
  1702. fins ;
  1703. ltps1 = prog tps0 ;
  1704. tpsi1 = tps0 ;
  1705. nbdir1 = nbdir1 - 1 ;
  1706. dti1 = dt1 / (flot nbdir1) ;
  1707. repe bdir1 nbdir1 ;
  1708. tpsi1 = tpsi1 + dti1 ;
  1709. si (&bdir1 ega nbdir1) ; tpsi1 = tps0 + dt1 ; fins ;
  1710. ltps1 = ltps1 et tpsi1 ;
  1711. fin bdir1 ;
  1712. ldir1 = pdir1 ;
  1713. * Direction transverse (DIRL) :
  1714. cgxx1 = char dirx ltps1 ldir1 ;
  1715. ldirl1 = enum ;
  1716. repe bxx1 (dime ltpsl1) ;
  1717. tpsli1 = extr ltpsl1 &bxx1 ;
  1718. pdirx1 = tire cgxx1 dirx tpsli1 ;
  1719. pdirn1 = extr ldirn1 &bxx1 ;
  1720. pdirli1 = pvec pdirn1 pdirx1 ;
  1721. ldirl1 = ldirl1 et pdirli1 ;
  1722. fin bxx1 ;
  1723. fins ;
  1724. fins ;
  1725. ltps1 = ltps0 et ltps1 ;
  1726. ldir1 = ldir0 et ldir1 ;
  1727. ltpsl1 = ltpsl0 et ltpsl1 ;
  1728. ldirl1 = ldirl0 et ldirl1 ;
  1729. *list tps0 ;
  1730. *list ltpsl1 ;
  1731. sino ;
  1732. si ipdir1 ;
  1733. ltps1 = prog flot0 dt1 ;
  1734. ldir1 = enum pdir1 pdir1 ;
  1735. * Direction transverse (DIRL) :
  1736. si ipara1 ;
  1737. ldirl1 = enum (dime ltpsl1) * pdir1 ;
  1738. opti para vrai ; mess 'ici 12' ;
  1739. ldirl2 = pvec ldirn1 ldirl1 ;
  1740. opti para faux ;
  1741. sino ;
  1742. ldirl2 = enum ;
  1743. repe bx (dime ltpsl1) ;
  1744. pnx = ldirn1 extr &bx ;
  1745. plx = pvec pnx pdir1 ;
  1746. ldirl2 = ldirl2 et plx ;
  1747. fin bx ;
  1748. fins ;
  1749. ldirl1 = ldirl2 ;
  1750. sino ;
  1751. * Si ipdir1 FAUX, alors pdir1 LISTOBJE :
  1752. nbdir1 = dime pdir1 ;
  1753. si (nbdir1 ega 1) ;
  1754. pdir1 = pdir1 et (pdir1 extr 1) ;
  1755. nbdir1 = 2 ;
  1756. fins ;
  1757. ltps1 = prog flot0 ;
  1758. tpsi1 = flot0 ;
  1759. nbdir1 = nbdir1 - 1 ;
  1760. dti1 = dt1 / (flot nbdir1) ;
  1761. repe bdir1 nbdir1 ;
  1762. tpsi1 = tpsi1 + dti1 ;
  1763. si (&bdir1 ega nbdir1) ; tpsi1 = tps0 + dt1 ; fins ;
  1764. ltps1 = ltps1 et tpsi1 ;
  1765. fin bdir1 ;
  1766. ldir1 = pdir1 ;
  1767. * Direction transverse (DIRL) :
  1768. cgxx1 = char dirx ltps1 ldir1 ;
  1769. ldirl1 = enum ;
  1770. repe bxx1 (dime ltpsl1) ;
  1771. tpsli1 = extr ltpsl1 &bxx1 ;
  1772. pdirx1 = tire cgxx1 dirx tpsli1 ;
  1773. pdirn1 = ldirn1 extr &bxx1 ;
  1774. pdirli1 = pvec pdirn1 pdirx1 ;
  1775. ldirl1 = ldirl1 et pdirli1 ;
  1776. fin bxx1 ;
  1777. fins ;
  1778. fins ;
  1779. fins ;
  1780. cgdir1 = char dire ltps1 ldir1 ;
  1781. * Direction transverse (DIRL) :
  1782. cgdir2 = char dirl ltpsl1 ldirl1 ;
  1783. cgdir1 = cgdir1 et cgdir2 ;
  1784. fins ;
  1785.  
  1786. * Enregistrement donnees PASSE MAIL
  1787. si (exis tab1 passes) ;
  1788. nps1 = dime tab1.passes ;
  1789. sino ;
  1790. nps1 = 0 ;
  1791. tab1.passes = table ;
  1792. fins ;
  1793. nps1 = nps1 + 1 ;
  1794.  
  1795. tab1.passes.nps1 = table ;
  1796. tab1.passes.nps1.maillage = maili1 ;
  1797. tab1.passes.nps1.geometrie = mot 'MAIL' ;
  1798. tab1.passes.nps1.instants = lti1 ;
  1799. tab1.passes.nps1.vitesse = vdep1 ;
  1800. tab1.passes.nps1.puissance = qtot1 ;
  1801. tab1.passes.nps1.debit = debi1 ;
  1802.  
  1803. si (exis tab1 'LARGEUR_DE_PASSE') ;
  1804. tab1.passes.nps1.largeur = tab1.largeur_de_passe ;
  1805. fins ;
  1806.  
  1807. * Enregistrements en fin de traitement option pour eviter
  1808. * modifier table avant fin realisation option
  1809. tab1.trajectoire = mail1 ;
  1810. tab1.evolution_puissance = evqtot1 ;
  1811. tab1.evolution_debit = evdebi1 ;
  1812. tab1.evolution_deplacement = evdep1 ;
  1813. si iqtot1 ;
  1814. tab1.evolution_orientation = cgdir1 ;
  1815. fins ;
  1816.  
  1817. quit soudage ;
  1818. * Fin option PASSE MAIL :
  1819. fins ;
  1820.  
  1821. * Si mot2 ne correspond a aucune option connue, icas2 = 0 : erreur
  1822. si (icas2 ega 0) ;
  1823. erre '***** ERREUR : MOT option non reconnu.' ;
  1824. quit soudage ;
  1825. fins ;
  1826.  
  1827. * Fin option PASSE :
  1828. fins ;
  1829.  
  1830. *----------------------------------------------------------------------*
  1831. * Option DEPLA *
  1832. *----------------------------------------------------------------------*
  1833.  
  1834. si (ega mot1 'DEPLA') ;
  1835. icas1 = 3 ;
  1836. *
  1837. * Lecture des arguments de l'option :
  1838. argu MOT2*'MOT' ;
  1839.  
  1840. * Ajout ou pas du temps de coupure option PASSE :
  1841. idtcp1 = faux ;
  1842. qtot1 = 0. ;
  1843. debi1 = 0. ;
  1844. si ((non idebut1)) ;
  1845. evqtot0 = tab1.evolution_puissance ;
  1846. lqtot0 = extr evqtot0 ordo ;
  1847. evdebi0 = tab1.evolution_debit ;
  1848. ldebi0 = extr evdebi0 ordo ;
  1849. qtot0 = extr lqtot0 (dime lqtot0) ;
  1850. idtcp1 = (abs(qtot0-qtot1)) > (abs(1.e-4*qtot1)) ;
  1851. debi0 = extr ldebi0 (dime ldebi0) ;
  1852. idtcp1 = idtcp1 ou ((abs(debi0-debi1)) > (abs(1.e-4*debi1))) ;
  1853. fins ;
  1854. *list idtcp1 ;
  1855. si idtcp1 ;
  1856. dtcp1 = tab1.temps_de_coupure ;
  1857. fins ;
  1858.  
  1859. * icas2 = indicateur sous-option realisee :
  1860. icas2 = 0 ;
  1861.  
  1862. *----------------------------- DEPLA DROI -----------------------------*
  1863. si (ega mot2 'DROI') ;
  1864. icas2 = 1 ;
  1865.  
  1866. argu P1*'POINT' ;
  1867. P1 = P1 plus Pnul1 ;
  1868.  
  1869. * Deplacement relatif / absolu :
  1870. imot3 = faux ; imot4 = faux ; imot5 = faux ;
  1871. irela1 = vrai ;
  1872. ieve1 = faux ;
  1873. repe b1 3 ;
  1874. argu mot3/'MOT' ;
  1875. si (non (exis mot3)) ; quit b1 ; fins ;
  1876. si (ega mot3 'ABSO') ;
  1877. imot3 = vrai ;
  1878. irela1 = faux ;
  1879. fins ;
  1880. si (ega mot3 'VITE') ;
  1881. imot4 = vrai ;
  1882. argu vdep1*'FLOTTANT' ;
  1883. fins ;
  1884. si (ega mot3 'EVEN') ;
  1885. imot5 = vrai ;
  1886. argu even1*'MOT' ;
  1887. argu teve1/'FLOTTANT' ;
  1888. ieve1 = exis teve1 ;
  1889. fins ;
  1890. fin b1 ;
  1891.  
  1892. * Coupure et temps de coupure selon existence EVEN :
  1893. * idtcp1 = idtcp1 ou ieve1 ;
  1894. * si ieve1 ;
  1895. * dtcp1 = teve1 ;
  1896. * fins ;
  1897.  
  1898. * Trajectoire DEPLA DROI :
  1899. *list idebut1 ;
  1900. si idebut1 ;
  1901. P0 = tab1.point_de_depart plus Pnul1 ;
  1902. * Deplacements relatifs :
  1903. si irela1 ;
  1904. P1 = P0 plus P1 ;
  1905. fins ;
  1906. mail1 = P0 droi 1 P1 ;
  1907. mail1 = mail1 coul vert ;
  1908. ll1 = mesu mail1 ;
  1909. sino ;
  1910. mail0 = tab1.trajectoire ;
  1911. nbpts0 = nbno mail0 ;
  1912. P0 = mail0 poin nbpts0 ;
  1913. *list P0 ;
  1914. * Deplacements relatifs :
  1915. si irela1 ;
  1916. P1 = P0 plus P1 ;
  1917. fins ;
  1918. mail1 = P0 droi 1 P1 ;
  1919. mail1 = mail1 coul vert ;
  1920. ll1 = mesu mail1 ;
  1921. si (nbpts0 > 1) ;
  1922. mail1 = mail0 et mail1 ;
  1923. fins ;
  1924. fins ;
  1925.  
  1926. * Increment de temps DEPLA DROI :
  1927. si (non imot4) ;
  1928. vdep1 = tab1.vitesse_de_deplacement ;
  1929. fins ;
  1930. wtab1 . vdep = vdep1 ;
  1931. dt1 = ll1 / vdep1 ;
  1932. si idtcp1 ;
  1933. dt1 = dt1 + dtcp1 ;
  1934. fins ;
  1935.  
  1936. * Evolution puissance DEPLA DROI :
  1937. si idebut1 ;
  1938. ltps1 = prog 0. dt1 ;
  1939. lqtot1 = prog qtot1 qtot1 ;
  1940. lqi1 = prog 1. 1. ;
  1941. sino ;
  1942. ltps0 = extr evqtot0 absc ;
  1943. tps0 = extr ltps0 (dime ltps0) ;
  1944. * Si la puissance indiquee est differente de celle existante :
  1945. si idtcp1 ;
  1946. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1947. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1948. lqtot1 = prog qtot1 qtot1 ;
  1949. sino ;
  1950. lti1 = prog tps0 (tps0 + dt1) ;
  1951. ltps1 = prog (tps0 + dt1) ;
  1952. lqtot1 = prog qtot1 ;
  1953. fins ;
  1954. ltps1 = ltps0 et ltps1 ;
  1955. lqtot1 = lqtot0 et lqtot1 ;
  1956. fins ;
  1957. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  1958.  
  1959. * Evolution debit DEPLA DROI :
  1960. si idebut1 ;
  1961. ltps1 = prog 0. dt1 ;
  1962. ldebi1 = prog debi1 debi1 ;
  1963. sino ;
  1964. ltps0 = extr evdebi0 absc ;
  1965. tps0 = extr ltps0 (dime ltps0) ;
  1966. * Si la puissance indiquee est differente de celle existante :
  1967. si idtcp1 ;
  1968. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1969. ldebi1 = prog debi1 debi1 ;
  1970. sino ;
  1971. ltps1 = prog (tps0 + dt1) ;
  1972. ldebi1 = prog debi1 ;
  1973. fins ;
  1974. ltps1 = ltps0 et ltps1 ;
  1975. ldebi1 = ldebi0 et ldebi1 ;
  1976. fins ;
  1977. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  1978.  
  1979. * Evolution deplacement DEPLA DROI :
  1980. si idebut1 ;
  1981. ltps1 = prog 0. dt1 ;
  1982. ldep1 = prog 0. ll1 ;
  1983. tps0 = 0. ;
  1984. sino ;
  1985. evdep0 = tab1.evolution_deplacement ;
  1986. ltps0 = extr evdep0 absc ;
  1987. ldep0 = extr evdep0 ordo ;
  1988. tps0 = extr ltps0 (dime ltps0) ;
  1989. dep0 = extr ldep0 (dime ldep0) ;
  1990. si idtcp1 ;
  1991. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  1992. ldep1 = prog dep0 (dep0 + ll1) ;
  1993. sino ;
  1994. ltps1 = prog (tps0 + dt1) ;
  1995. ldep1 = prog (dep0 + ll1) ;
  1996. fins ;
  1997. ltps1 = ltps0 et ltps1 ;
  1998. ldep1 = ldep0 et ldep1 ;
  1999. fins ;
  2000. ldep1 = ldep1 / (maxi ldep1) * (mesu mail1) ;
  2001. evdep1 = evol vert manu temp ltps1 ldep1 ;
  2002.  
  2003. * Evenement :
  2004. si imot5 ;
  2005. ttev1 = table ;
  2006. ttev1 . nom = even1 ;
  2007. si ieve1 ;
  2008. ttev1 . temps = prog tps0 (tps0 + teve1) ;
  2009. sino ;
  2010. ttev1 . temps = prog tps0 ;
  2011. fins ;
  2012. si (exis tab1 'EVENEMENTS') ;
  2013. nbev1 = (dime tab1.evenements) + 1 ;
  2014. sino ;
  2015. tab1.evenements = table ;
  2016. nbev1 = 1 ;
  2017. fins ;
  2018. tab1.evenements.nbev1 = ttev1 ;
  2019. fins ;
  2020.  
  2021. * Enregistrements en fin de traitement option pour eviter
  2022. * modifier table avant fin realisation option
  2023. tab1.trajectoire = mail1 ;
  2024. tab1.evolution_puissance = evqtot1 ;
  2025. tab1.evolution_debit = evdebi1 ;
  2026. tab1.evolution_deplacement = evdep1 ;
  2027.  
  2028. quit soudage ;
  2029. * Fin option DEPLA DROI :
  2030. fins ;
  2031.  
  2032. *----------------------------- DEPLA CERC -----------------------------*
  2033. si (ega mot2 'CERC') ;
  2034. icas2 = 2 ;
  2035.  
  2036. * P1 est le centre du cercle, P2, l'extremite de la trajectoire
  2037. argu P2*'POINT' P1*'POINT' N1/'ENTIER';
  2038. P1 = P1 plus Pnul1 ;
  2039. P2 = P2 plus Pnul1 ;
  2040.  
  2041. * Deplacement relatif / absolu :
  2042. imot3 = faux ; imot4 = faux ; imot5 = faux ;
  2043. irela1 = vrai ;
  2044. ieve1 = faux ;
  2045. repe b1 3 ;
  2046. argu mot3/'MOT' ;
  2047. si (non (exis mot3)) ; quit b1 ; fins ;
  2048. si (ega mot3 'ABSO') ;
  2049. imot3 = vrai ;
  2050. irela1 = faux ;
  2051. fins ;
  2052. si (ega mot3 'VITE') ;
  2053. imot4 = vrai ;
  2054. argu vdep1*'FLOTTANT' ;
  2055. fins ;
  2056. si (ega mot3 'EVEN') ;
  2057. imot5 = vrai ;
  2058. argu even1*'MOT' ;
  2059. argu teve1/'FLOTTANT' ;
  2060. ieve1 = exis teve1 ;
  2061. fins ;
  2062. fin b1 ;
  2063.  
  2064. * Coupure et temps de coupure selon existence EVEN :
  2065. * idtcp1 = idtcp1 ou ieve1 ;
  2066. * si ieve1 ;
  2067. * dtcp1 = teve1 ;
  2068. * fins ;
  2069.  
  2070. * Trajectoire DEPLA CERC :
  2071. si idebut1 ;
  2072. P0 = tab1.point_de_depart plus Pnul1 ;
  2073. * Deplacements relatifs :
  2074. si irela1 ;
  2075. P1 = P0 plus P1 ;
  2076. P2 = P0 plus P2 ;
  2077. fins ;
  2078. * Par defaut, N1 calcule pour avoir angle de 5 deg.
  2079. si (non (exis N1)) ;
  2080. V1 = P0 moin P1 ;
  2081. V2 = P2 moin P1 ;
  2082. V1 = V1 / (norm V1) ;
  2083. V2 = V2 / (norm V2) ;
  2084. N1 = (acos (psca V1 V2)) / 5. ;
  2085. N1 = maxi (lect (enti N1) 1) ;
  2086. fins ;
  2087. mail1 = CERC N1 P0 P1 P2 ;
  2088. mail1 = mail1 coul vert ;
  2089. ll1 = mesu mail1 ;
  2090. sino ;
  2091. mail0 = tab1.trajectoire ;
  2092. nbpts0 = nbno mail0 ;
  2093. P0 = mail0 poin nbpts0 ;
  2094. * Deplacements relatifs :
  2095. si irela1 ;
  2096. P1 = P0 plus P1 ;
  2097. P2 = P0 plus P2 ;
  2098. fins ;
  2099. si (non (exis N1)) ;
  2100. V1 = P0 moin P1 ;
  2101. V2 = P2 moin P1 ;
  2102. V1 = V1 / (norm V1) ;
  2103. V2 = V2 / (norm V2) ;
  2104. N1 = (acos (psca V1 V2)) / 5. ;
  2105. N1 = maxi (lect (enti N1) 1) ;
  2106. fins ;
  2107. mail1 = CERC N1 P0 P1 P2 ;
  2108. mail1 = mail1 coul vert ;
  2109. ll1 = mesu mail1 ;
  2110. si (nbpts0 > 1) ;
  2111. mail1 = mail0 et mail1 ;
  2112. fins ;
  2113. fins ;
  2114.  
  2115. * Increment de temps DEPLA CERC :
  2116. si (non imot4) ;
  2117. vdep1 = tab1.vitesse_de_deplacement ;
  2118. fins ;
  2119. wtab1 . vdep = vdep1 ;
  2120. dt1 = ll1 / vdep1 ;
  2121. si idtcp1 ;
  2122. dt1 = dt1 + dtcp1 ;
  2123. fins ;
  2124.  
  2125. * Evolution puissance DEPLA CERC :
  2126. icoup1 = faux ;
  2127. si idebut1 ;
  2128. ltps1 = prog 0. dt1 ;
  2129. lqtot1 = prog qtot1 qtot1 ;
  2130. lqi1 = prog 1. 1. ;
  2131. sino ;
  2132. ltps0 = extr evqtot0 absc ;
  2133. tps0 = extr ltps0 (dime ltps0) ;
  2134. * Si la puissance indiquee est differente de celle existante :
  2135. si idtcp1 ;
  2136. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  2137. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  2138. lqtot1 = prog qtot1 qtot1 ;
  2139. sino ;
  2140. lti1 = prog tps0 (tps0 + dt1) ;
  2141. ltps1 = prog (tps0 + dt1) ;
  2142. lqtot1 = prog qtot1 ;
  2143. fins ;
  2144. ltps1 = ltps0 et ltps1 ;
  2145. lqtot1 = lqtot0 et lqtot1 ;
  2146. fins ;
  2147. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  2148.  
  2149. * Evolution debit DEPLA CERC :
  2150. si idebut1 ;
  2151. ltps1 = prog 0. dt1 ;
  2152. ldebi1 = prog debi1 debi1 ;
  2153. sino ;
  2154. ltps0 = extr evdebi0 absc ;
  2155. tps0 = extr ltps0 (dime ltps0) ;
  2156. * Si la puissance indiquee est differente de celle existante :
  2157. si idtcp1 ;
  2158. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  2159. ldebi1 = prog debi1 debi1 ;
  2160. sino ;
  2161. ltps1 = prog (tps0 + dt1) ;
  2162. ldebi1 = prog debi1 ;
  2163. fins ;
  2164. ltps1 = ltps0 et ltps1 ;
  2165. ldebi1 = ldebi0 et ldebi1 ;
  2166. fins ;
  2167. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  2168.  
  2169. * Evolution deplacement DEPLA CERC :
  2170. si idebut1 ;
  2171. ltps1 = prog 0. dt1 ;
  2172. ldep1 = prog 0. ll1 ;
  2173. tps0 = 0. ;
  2174. sino ;
  2175. evdep0 = tab1.evolution_deplacement ;
  2176. ltps0 = extr evdep0 absc ;
  2177. ldep0 = extr evdep0 ordo ;
  2178. tps0 = extr ltps0 (dime ltps0) ;
  2179. dep0 = extr ldep0 (dime ldep0) ;
  2180. si idtcp1 ;
  2181. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  2182. ldep1 = prog dep0 (dep0 + ll1) ;
  2183. sino ;
  2184. ltps1 = prog (tps0 + dt1) ;
  2185. ldep1 = prog (dep0 + ll1) ;
  2186. fins ;
  2187. ltps1 = ltps0 et ltps1 ;
  2188. ldep1 = ldep0 et ldep1 ;
  2189. fins ;
  2190. ldep1 = ldep1 / (maxi ldep1) * (mesu mail1) ;
  2191. evdep1 = evol vert manu temp ltps1 ldep1 ;
  2192.  
  2193. * Evenement :
  2194. si imot5 ;
  2195. ttev1 = table ;
  2196. ttev1 . nom = even1 ;
  2197. si ieve1 ;
  2198. ttev1 . temps = prog tps0 (tps0 + teve1) ;
  2199. sino ;
  2200. ttev1 . temps = prog tps0 ;
  2201. fins ;
  2202. si (exis tab1 'EVENEMENTS') ;
  2203. nbev1 = (dime tab1.evenements) + 1 ;
  2204. sino ;
  2205. tab1.evenements = table ;
  2206. nbev1 = 1 ;
  2207. fins ;
  2208. tab1.evenements.nbev1 = ttev1 ;
  2209. fins ;
  2210.  
  2211. * Enregistrements en fin de traitement option pour eviter
  2212. * modifier table avant fin realisation option
  2213. tab1.trajectoire = mail1 ;
  2214. tab1.evolution_puissance = evqtot1 ;
  2215. tab1.evolution_debit = evdebi1 ;
  2216. tab1.evolution_deplacement = evdep1 ;
  2217.  
  2218. quit soudage ;
  2219. * Fin option DEPLA CERC :
  2220. fins ;
  2221.  
  2222. *----------------------------- DEPLA MAIL -----------------------------*
  2223. * Sous-option MAIL :
  2224. si (ega mot2 'MAIL') ;
  2225. icas2 = 3 ;
  2226.  
  2227. argu mail1*'MAILLAGE' ;
  2228. eltyp1 = mail1 elem type ;
  2229. imax1 = 0 ;
  2230. si (exis eltyp1 'SEG2') ; imax1 = imax1 + 1 ; fins ;
  2231. si (exis eltyp1 'SEG3') ; imax1 = imax1 + 1 ; fins ;
  2232. si ((dime eltyp1) > imax1) ;
  2233. erre '***** ERREUR : le maillage doit etre compose de SEG2 ou de SEG3.' ;
  2234. fins ;
  2235. ll1 = mesu mail1 ;
  2236.  
  2237. * Trajectoire DEPLA MAIL :
  2238. si idebut1 ;
  2239. P1 = mail1 poin 1 ;
  2240. tab1.point_de_depart = P1 ;
  2241. sino ;
  2242. mail0 = tab1.trajectoire ;
  2243. nbpts0 = nbno mail0 ;
  2244. P0 = mail0 poin nbpts0 ;
  2245. P1 = mail1 poin 1 ;
  2246. si (P1 neg P0) ;
  2247. tol1 = 1.e-10 * (mesu mail1) ;
  2248. si ((norm (P1 moin P0)) > tol1) ;
  2249. erre '***** ERREUR : MAILLAGE incompatible.' ;
  2250. quit soudage ;
  2251. sino ;
  2252. elim (P0 et P1) tol1 ;
  2253. fins ;
  2254. fins ;
  2255. si (nbpts0 > 1) ;
  2256. mail1 = mail1 coul vert ;
  2257. mail1 = mail0 et mail1 ;
  2258. fins ;
  2259. fins ;
  2260.  
  2261. * Increment de temps DEPLA MAIL :
  2262. imot4 = faux ; imot5 = faux ;
  2263. ieve1 = faux ;
  2264. repe b1 2 ;
  2265. argu mot4/'MOT' ;
  2266. si (non (exis mot4)) ; quit b1 ; fins ;
  2267. si (ega mot4 'VITE') ;
  2268. imot4 = vrai ;
  2269. argu vdep1*'FLOTTANT' ;
  2270. fins ;
  2271. si (ega mot4 'EVEN') ;
  2272. imot5 = vrai ;
  2273. argu even1*'MOT' ;
  2274. argu teve1/'FLOTTANT' ;
  2275. ieve1 = exis teve1 ;
  2276. fins ;
  2277. fin b1 ;
  2278.  
  2279. * Coupure et temps de coupure selon existence EVEN :
  2280. * idtcp1 = idtcp1 ou ieve1 ;
  2281. * si ieve1 ;
  2282. * dtcp1 = teve1 ;
  2283. * fins ;
  2284.  
  2285. * Vitesse de deplacement :
  2286. si (non imot4) ;
  2287. vdep1 = tab1.vitesse_de_deplacement ;
  2288. fins ;
  2289. wtab1 . vdep = vdep1 ;
  2290. dt1 = ll1 / vdep1 ;
  2291. si idtcp1 ;
  2292. dt1 = dt1 + dtcp1 ;
  2293. fins ;
  2294.  
  2295. * Evolution puissance DEPLA MAIL :
  2296. si idebut1 ;
  2297. ltps1 = prog 0. dt1 ;
  2298. lqtot1 = prog qtot1 qtot1 ;
  2299. lqi1 = prog 1. 1. ;
  2300. sino ;
  2301. ltps0 = extr evqtot0 absc ;
  2302. tps0 = extr ltps0 (dime ltps0) ;
  2303. * Si la puissance indiquee est differente de celle existante :
  2304. si idtcp1 ;
  2305. lti1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  2306. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  2307. lqtot1 = prog qtot1 qtot1 ;
  2308. sino ;
  2309. lti1 = prog tps0 (tps0 + dt1) ;
  2310. ltps1 = prog (tps0 + dt1) ;
  2311. lqtot1 = prog qtot1 ;
  2312. fins ;
  2313. ltps1 = ltps0 et ltps1 ;
  2314. lqtot1 = lqtot0 et lqtot1 ;
  2315. fins ;
  2316. evqtot1 = evol roug manu temp ltps1 qtot lqtot1 ;
  2317.  
  2318. * Evolution debit DEPLA MAIL :
  2319. si idebut1 ;
  2320. ltps1 = prog 0. dt1 ;
  2321. ldebi1 = prog debi1 debi1 ;
  2322. sino ;
  2323. ltps0 = extr evdebi0 absc ;
  2324. tps0 = extr ltps0 (dime ltps0) ;
  2325. * Si la puissance indiquee est differente de celle existante :
  2326. si idtcp1 ;
  2327. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  2328. ldebi1 = prog debi1 debi1 ;
  2329. sino ;
  2330. ltps1 = prog (tps0 + dt1) ;
  2331. ldebi1 = prog debi1 ;
  2332. fins ;
  2333. ltps1 = ltps0 et ltps1 ;
  2334. ldebi1 = ldebi0 et ldebi1 ;
  2335. fins ;
  2336. evdebi1 = evol roug manu temp ltps1 debi ldebi1 ;
  2337.  
  2338. * Evolution deplacement DEPLA MAIL :
  2339. si idebut1 ;
  2340. ltps1 = prog 0. dt1 ;
  2341. ldep1 = prog 0. ll1 ;
  2342. tps0 = 0. ;
  2343. sino ;
  2344. evdep0 = tab1.evolution_deplacement ;
  2345. ltps0 = extr evdep0 absc ;
  2346. ldep0 = extr evdep0 ordo ;
  2347. tps0 = extr ltps0 (dime ltps0) ;
  2348. dep0 = extr ldep0 (dime ldep0) ;
  2349. si idtcp1 ;
  2350. ltps1 = prog (tps0 + dtcp1) (tps0 + dt1) ;
  2351. ldep1 = prog dep0 (dep0 + ll1) ;
  2352. sino ;
  2353. ltps1 = prog (tps0 + dt1) ;
  2354. ldep1 = prog (dep0 + ll1) ;
  2355. fins ;
  2356. ltps1 = ltps0 et ltps1 ;
  2357. ldep1 = ldep0 et ldep1 ;
  2358. fins ;
  2359. ldep1 = ldep1 / (maxi ldep1) * (mesu mail1) ;
  2360. evdep1 = evol vert manu temp ltps1 ldep1 ;
  2361.  
  2362. * Evenement :
  2363. si imot5 ;
  2364. ttev1 = table ;
  2365. ttev1 . nom = even1 ;
  2366. si ieve1 ;
  2367. ttev1 . temps = prog tps0 (tps0 + teve1) ;
  2368. sino ;
  2369. ttev1 . temps = prog tps0 ;
  2370. fins ;
  2371. si (exis tab1 'EVENEMENTS') ;
  2372. nbev1 = (dime tab1.evenements) + 1 ;
  2373. sino ;
  2374. tab1.evenements = table ;
  2375. nbev1 = 1 ;
  2376. fins ;
  2377. tab1.evenements.nbev1 = ttev1 ;
  2378. fins ;
  2379.  
  2380. * Enregistrements en fin de traitement option pour eviter
  2381. * modifier table avant fin realisation option
  2382. tab1.trajectoire = mail1 ;
  2383. tab1.evolution_puissance = evqtot1 ;
  2384. tab1.evolution_debit = evdebi1 ;
  2385. tab1.evolution_deplacement = evdep1 ;
  2386.  
  2387. quit soudage ;
  2388. * Fin option DEPLA MAIL :
  2389. fins ;
  2390.  
  2391. *---------------------------- DEPLA COUCHE ----------------------------*
  2392. * Sous-option COUCHE :
  2393. si (ega mot2 'COUCHE') ;
  2394. icas2 = 4 ;
  2395.  
  2396. * Option PAUSE :
  2397. imot3 = faux ; imot4 = faux ; imot5 = faux ; imot6 = faux ;
  2398. ieve1 = faux ;
  2399. repe b1 4 ;
  2400. argu mot3/'MOT' ;
  2401. si (non (exis mot3)) ; quit b1; fins ;
  2402. si (ega mot3 'VITE') ;
  2403. imot3 = vrai ;
  2404. argu flot2*'FLOTTANT' ;
  2405. fins ;
  2406. si (ega mot3 'DEBI') ;
  2407. imot4 = vrai ;
  2408. argu flot3*'FLOTTANT' ;
  2409. fins ;
  2410. si (ega mot3 'PAUSE') ;
  2411. imot5 = vrai ;
  2412. argu flot4*'FLOTTANT' ;
  2413. fins ;
  2414. si (ega mot3 'EVEN') ;
  2415. imot6 = vrai ;
  2416. argu even1*'MOT' ;
  2417. argu teve1/'FLOTTANT' ;
  2418. ieve1 = exis teve1 ;
  2419. fins ;
  2420. fin b1 ;
  2421.  
  2422. * Epaisseur de la couche :
  2423. si imot3 ;
  2424. Vpf1 = flot2 ;
  2425. sino ;
  2426. Vpf1 = tab1.vitesse_de_soudage ;
  2427. fins ;
  2428. si imot4 ;
  2429. Dpf1 = flot3 ;
  2430. sino ;
  2431. Dpf1 = tab1.debit_de_fil ;
  2432. fins ;
  2433. *List Dpf1 ;
  2434. si (exis tab1 'LARGEUR_DE_PASSE') ;
  2435. Lpf1 = tab1.largeur_de_passe ;
  2436. sinon ;
  2437. erre '***** ERREUR : il manque la donnee de la largeur de passe.' ;
  2438. quit soudage ;
  2439. finsi ;
  2440. epf1 = Dpf1 / Vpf1 / Lpf1 ;
  2441. *List epf1 ;
  2442.  
  2443. * Pause :
  2444. si imot5 ;
  2445. vdep2 = epf1 / flot4 ;
  2446. sino ;
  2447. vdep2 = tab1.vitesse_de_deplacement ;
  2448. fins ;
  2449. si imot6 ;
  2450. si ieve1 ;
  2451. soudage tab1 depla droi (0 0 epf1) vite vdep2 even even1 teve1 ;
  2452. sino ;
  2453. soudage tab1 depla droi (0 0 epf1) vite vdep2 even even1 ;
  2454. fins ;
  2455. sino ;
  2456. soudage tab1 depla droi (0 0 epf1) vite vdep2 ;
  2457. fins ;
  2458.  
  2459. * Fin option DEPLA COUCHE :
  2460. fins ;
  2461.  
  2462. si (icas2 ega 0) ;
  2463. erre '***** ERREUR : MOT option non reconnu.' ;
  2464. quit soudage ;
  2465. fins ;
  2466.  
  2467. * Fin option DEPLA :
  2468. fins ;
  2469.  
  2470. *----------------------------------------------------------------------*
  2471. * Option MAIL *
  2472. *----------------------------------------------------------------------*
  2473.  
  2474. si (ega mot1 'MAIL') ;
  2475. icas1 = 4 ;
  2476.  
  2477. *----------------------- Lecture des arguments ------------------------*
  2478.  
  2479. * Lecture maillage cordons :
  2480. argu mail1*'MAILLAGE' ;
  2481.  
  2482. * Lecture facultative liste ordonnancement couleurs ;
  2483. argu list1/'LISTENTI' ;
  2484. ilist1 = exis list1 ;
  2485. si (non ilist1) ;
  2486. argu list1/'LISTMOTS' ;
  2487. ilist1 = exis list1 ;
  2488. fins ;
  2489.  
  2490. * Lecture du mot 'PAS' ;
  2491. argu mot1*'MOT' ;
  2492. si (neg mot1 'PAS') ;
  2493. erre '***** ERREUR : on attend le mot-cle PAS' ;
  2494. quit soudage ;
  2495. sino ;
  2496. argu flot1*'FLOTTANT' ;
  2497. fins ;
  2498.  
  2499. * Lecture options 'TEMP' et 'MESU' ;
  2500. imot2 = faux ;
  2501. imot3 = faux ;
  2502. repe bmot2 2 ;
  2503. argu mot2/'MOT' ;
  2504. si (exis mot2) ;
  2505. si (ega mot2 'TEMP') ;
  2506. imot2 = vrai ;
  2507. argu flot2/'FLOTTANT' ;
  2508. si (non (exis flot2)) ;
  2509. flot2 = 3. * pi ;
  2510. fins ;
  2511. iter bmot2 ;
  2512. fins ;
  2513. si (ega mot2 'MESU') ;
  2514. imot3 = vrai ;
  2515. argu ps1*point ;
  2516. iter bmot2 ;
  2517. fins ;
  2518. si ((non imot2) et (non imot3)) ;
  2519. erre '***** ERREUR : on attend les mots-cle TEMP ou MESU' ;
  2520. * quit soudage ;
  2521. fins ;
  2522. fins ;
  2523. fin bmot2 ;
  2524. *list imot2 ; list imot3 ;
  2525.  
  2526. *----------------------- Indexation du maillage -----------------------*
  2527.  
  2528. * Informations trajectoire :
  2529. ltraj1 = tab1.trajectoire ;
  2530. chxs1 = ltraj1 coor curv ;
  2531. x1 y1 z1 = mail1 coor ;
  2532.  
  2533. * Informations evolution deplacements :
  2534. evxs1 = tab1.evolution_deplacement ;
  2535. ltxs1 = extr evxs1 absc ;
  2536. lxxs1 = extr evxs1 ordo ;
  2537. nbxs1 = dime lxxs1 ;
  2538. *list ltxs1 ;
  2539. *list lxxs1 ;
  2540.  
  2541. * Information apport de matiere :
  2542. evdf1 = tab1.evolution_debit ;
  2543. ldeb1 = extr evdf1 ordo ;
  2544.  
  2545. * tolerance dimensionnelle :
  2546. tol1 = 1.e-10 * (maxi ltxs1) ;
  2547. tol2 = 1.e-6 * (maxi ldeb1) ;
  2548.  
  2549. * Table resultat :
  2550. tab2 = table ;
  2551. tab2 . maillage = mail1 ;
  2552. tab2 . evolution_maillage = table ;
  2553. tab2 . evolution_maillage . temps = table ;
  2554. tab2 . evolution_maillage . maillage = table ;
  2555. ttps1 = table ;
  2556. tmai1 = table ;
  2557.  
  2558. * Listreels de l'option MESU :
  2559. si imot3 ;
  2560. llarg1 = prog ;
  2561. lhaut1 = prog ;
  2562. fins ;
  2563.  
  2564. * Boucle sur les segents rouges de la trajectoire :
  2565. nb1 = nbel ltraj1 ;
  2566. geoi1 = vide maillage ;
  2567. indi1 = 0 ;
  2568. ic1 = 1 ;
  2569. inewcor1 = vrai ;
  2570. isuidep1 = vrai ;
  2571. ifermee1 = faux ;
  2572. icourbe1 = faux ;
  2573. ipredep1 = vrai ;
  2574.  
  2575. repe b1 nb1 ;
  2576. pasi1 = flot1 ;
  2577.  
  2578. eli1 = ltraj1 elem &b1 ;
  2579. pi1 = eli1 poin 1 ;
  2580. pi2 = eli1 poin 2 ;
  2581. leli1 = mesu eli1 ;
  2582.  
  2583. * Si pas trajectoire d'une passe, on saute en changeant de couleur :
  2584. si (neg ((eli1 elem coul) extr 1) 'ROUG') ;
  2585. inewcor1 = vrai ;
  2586. ifermee1 = faux ;
  2587. icourbe1 = faux ;
  2588. si (non ipredep1) ; ic1 = ic1 + 1 ; fins ;
  2589. ipredep1 = vrai ;
  2590. iter b1 ;
  2591. sino ;
  2592. ipredep1 = faux ;
  2593. si (&b1 neg nb1) ;
  2594. eli2 = ltraj1 elem (&b1 + 1) ;
  2595. isuidep1 = ega ((eli2 elem coul) extr 1) 'VERT' ;
  2596. si ((non isuidep1) et (non (ifermee1 ou icourbe1))) ;
  2597. ifin1 = &b1 + 1 ;
  2598. elfin1 = eli2 ;
  2599. repe bfermee1 (nb1 - &b1 - 1) ;
  2600. eli2 = ltraj1 elem (&b1 + 1 + &bfermee1) ;
  2601. si (ega ((eli2 elem coul) extr 1) 'VERT') ; quit bfermee1 ; fins ;
  2602. ifin1 = &b1 + 1 + &bfermee1 ;
  2603. elfin1 = eli2 ;
  2604. fin bfermee1 ;
  2605. ideb1 = &b1 ;
  2606. ifermee1 = (norm ((elfin1 poin 2) moin pi1)) < tol1 ;
  2607. icourbe1 = non ifermee1 ;
  2608. si icourbe1 ; mess '***** Passes successives : n° elem. debut =' ideb1 ', fin = ' ifin1 ; fins ;
  2609. si ifermee1 ; mess '***** Passe fermee : n° elem. debut =' ideb1 ', fin = ' ifin1 ; fins ;
  2610. fins ;
  2611. fins ;
  2612. fins ;
  2613. *list isuidep1 ;
  2614.  
  2615. * Maillage cordon passe ic1 :
  2616. si inewcor1 ;
  2617. inewcor1 = faux ;
  2618. si ilist1 ;
  2619. couli1 = extr list1 ic1 ;
  2620. si (ega (type couli1) 'MOT') ;
  2621. maili1 = mail1 elem couli1 ;
  2622. sino ;
  2623. maili1 = mail1 elem coul couli1 ;
  2624. fins ;
  2625. sino ;
  2626. maili1 = mail1 elem coul ic1 ;
  2627. fins ;
  2628. pci1 = maili1 poin proc pi1 ;
  2629. si ((norm (pci1 moin pi1)) > pasi1 ) ;
  2630. erre '***** ERREUR : distance trajectoire cordon superieure au PAS' ;
  2631. erre ' Element de la trajectoire :' &b1 ;
  2632. quit soudage ;
  2633. fins ;
  2634. tpi1 = maili1 part nesc conn ;
  2635. repe bp1 (dime tpi1) ;
  2636. maili1 = tpi1.&bp1 ;
  2637. si (pci1 dans maili1) ; quit bp1 ; fins ;
  2638. fin bp1 ;
  2639. fins ;
  2640.  
  2641. * Vecteur(s) unitaire(s) de la trajectoire :
  2642. si (icourbe1 ou ifermee1) ;
  2643. si (&b1 ega ideb1) ;
  2644. ni1 = (pi2 moin pi1) / leli1 ;
  2645. eli2 = ltraj1 elem (&b1 + 1) ;
  2646. pi21 = eli2 poin 1 ;
  2647. pi22 = eli2 poin 2 ;
  2648. ni2 = (pi22 moin pi21) / (mesu eli2) ;
  2649. ni2 = 0.5 * (ni1 plus ni2) ;
  2650. si ifermee1 ;
  2651. pfin1 = elfin1 poin 1 ;
  2652. pfin2 = elfin1 poin 2 ;
  2653. nfin1 = (pfin2 moin pfin1) / (mesu elfin1) ;
  2654. ndeb1 = ni1 ;
  2655. ni1 = 0.5 * (ni1 plus nfin1) ;
  2656. fins ;
  2657. fins ;
  2658. si (&b1 ega ifin1) ;
  2659. ni1 = (pi2 moin pi1) / leli1 ;
  2660. nix = ni1 ;
  2661. ni1 = ni2 ;
  2662. ni2 = nix ;
  2663. si ifermee1 ;
  2664. ni2 = 0.5 * (ndeb1 plus ni2) ;
  2665. fins ;
  2666. fins ;
  2667. si ((ideb1 < &b1) et (&b1 < ifin1)) ;
  2668. ni1 = (pi2 moin pi1) / leli1 ;
  2669. nix = ni2 ;
  2670. eli2 = ltraj1 elem (&b1 + 1) ;
  2671. pi21 = eli2 poin 1 ;
  2672. pi22 = eli2 poin 2 ;
  2673. ni2 = (pi22 moin pi21) / (mesu eli2) ;
  2674. ni2 = 0.5 * (ni1 plus ni2) ;
  2675. ni1 = nix ;
  2676. fins ;
  2677. sino ;
  2678. ni1 = (pi2 moin pi1) / leli1 ;
  2679. fins ;
  2680. *list ni1 ; list ni2 ;
  2681.  
  2682. * Champ(s) de distance au(x) point(s) pi1 (Pi2) sur le maillage du cordon dans la direction ni1 (ni2)
  2683. x1 y1 z1 = maili1 coor ;
  2684. xp1 yp1 zp1 = pi1 coor ;
  2685. xni1 yni1 zni1 = ni1 coor ;
  2686. chpdi1 = ((x1 - xp1) * xni1) + ((y1 - yp1) * yni1) + ((z1 - zp1) * zni1) ;
  2687. modi1 = mode maili1 mecanique ;
  2688. chedi1 = chan cham chpdi1 modi1 gravite ;
  2689. *list ni1 ; list pi1 ;
  2690. *trac chedi1 modi1 ;
  2691.  
  2692. * Option MESU : champs de distance dans les directions transverses (v et w) :
  2693. si imot3 ;
  2694. vi1 = ps1 / (norm ps1) ;
  2695. wi1 = pvec ni1 vi1 ;
  2696. *list vi1 ; list wi1 ;
  2697. xvi1 yvi1 zvi1 = vi1 coor ;
  2698. xwi1 ywi1 zwi1 = wi1 coor ;
  2699. chli1 = ((x1 - xp1) * xwi1) + ((y1 - yp1) * ywi1) + ((z1 - zp1) * zwi1) ;
  2700. chhi1 = ((x1 - xp1) * xvi1) + ((y1 - yp1) * yvi1) + ((z1 - zp1) * zvi1) ;
  2701. *trac chhi1 ;
  2702. fins ;
  2703.  
  2704.  
  2705. * Extraction evolution deplacement sur ce segment :
  2706. xspi1 = chxs1 extr pi1 scal ;
  2707. xspi2 = chxs1 extr pi2 scal ;
  2708. repe bxs1 nbxs1 ;
  2709. xxsi1 = extr lxxs1 (nbxs1 + 1 - &bxs1) ;
  2710. si (non (xxsi1 < (xspi2 - tol1))) ;
  2711. xxxi2 = xxsi1 ;
  2712. txxi2 = extr ltxs1 (nbxs1 + 1 - &bxs1) ;
  2713. fins ;
  2714. xxsi1 = extr lxxs1 &bxs1 ;
  2715. si (non (xxsi1 > (xspi1 + tol1))) ;
  2716. xxxi1 = xxsi1 ;
  2717. txxi1 = extr ltxs1 &bxs1 ;
  2718. fins ;
  2719. fin bxs1 ;
  2720. lxxsi1 = prog xxxi1 xxxi2 ;
  2721. ltxsi1 = prog txxi1 txxi2 ;
  2722. *list lxxsi1 ;
  2723. *list ltxsi1 ;
  2724.  
  2725. * Sequencage maillage cordon selon pas fourni :
  2726. si (leli1 >EG pasi1) ;
  2727. nb2 = (leli1 / pasi1) enti ;
  2728. nb2 = maxi (lect 1 nb2) ;
  2729. sino ;
  2730. nb2 = 1 ;
  2731. pasi1 = leli1 ;
  2732. fins ;
  2733. *list nb2 ;
  2734.  
  2735. xsi1 = 0. ;
  2736. pmaili1 = maili1 poin proc pi1 ;
  2737. si ifermee1 ;
  2738. si (&b1 ega ideb1) ;
  2739. xdeb1 = 0. ;
  2740. sino ;
  2741. Sdeb1 = (enve tmai1 . (indi1 - 1)) inte (enve maili1) ;
  2742. pdeb1 = Sdeb1 poin proc pi1 ;
  2743. tconn1 = Sdeb1 part nesc conn ;
  2744. si (pdeb1 dans tconn1 . 1) ;
  2745. Sdeb1 = tconn1 . 1 ;
  2746. sino ;
  2747. Sdeb1 = tconn1 . 2 ;
  2748. fins ;
  2749. *trac cach Sdeb1 ;
  2750. xdeb1 = (redu chpdi1 Sdeb1) mini ;
  2751. fins ;
  2752. geoi2 = chedi1 elem supe (xsi1 - tol1 + xdeb1) stri ;
  2753. chedi1 = redu chedi1 geoi2 ;
  2754. fins ;
  2755. repe b2 nb2 ;
  2756. xsi2 = xsi1 + pasi1 ;
  2757. si (xsi2 > leli1) ;
  2758. xsi2 = leli1 ;
  2759. fins ;
  2760. si ((&b2 ega nb2) et (isuidep1 ou (&b1 ega nb1))) ;
  2761. xsi2 = maxi chedi1 ;
  2762. *mess '*** Maxi !' ;
  2763. fins ;
  2764. geoi2 = chedi1 elem infe (xsi2 + tol1) stri ;
  2765. si (non (vide geoi2)) ;
  2766. tgeoi2 = geoi2 part nesc conn ;
  2767. geoix = vide maillage ;
  2768. repe bgeoi2 (dime tgeoi2) ;
  2769. si (pmaili1 dans tgeoi2.&bgeoi2) ;
  2770. geoix = tgeoi2.&bgeoi2 ;
  2771. quit bgeoi2 ;
  2772. fins ;
  2773. fin bgeoi2 ;
  2774. geoi2 = geoix ;
  2775. tmai1 . indi1 = geoi1 et geoi2 ;
  2776. ti2 = ipol (xspi1 + xsi1) lxxsi1 ltxsi1 ;
  2777. ttps1 . indi1 = ti2 ;
  2778. indi1 = indi1 + 1 ;
  2779. xsi1 = xsi2 ;
  2780.  
  2781. * Option MESU :
  2782. si imot3 ;
  2783. chli1 = redu chli1 geoi2 ;
  2784. chhi1 = redu chhi1 geoi2 ;
  2785. lai1 = (maxi chli1) - (mini chli1) ;
  2786. lhi1 = (maxi chhi1) - (mini chhi1) ;
  2787. *list lai1 ; list lhi1 ;
  2788. llarg1 = llarg1 et lai1 ;
  2789. lhaut1 = lhaut1 et lhi1 ;
  2790. fins ;
  2791.  
  2792. * sino ;
  2793. *mess ' ***** Geoi2 vide : indi1 = ' indi1 ;
  2794. fins ;
  2795. fin b2 ;
  2796. geoi1 = geoi1 et geoi2 ;
  2797.  
  2798. * Retrait du maillage deja indexe au maillage total -> reste a faire
  2799. mail1 = mail1 diff geoi1 ;
  2800. si (icourbe1 ou ifermee1) ;
  2801. maili1 = maili1 diff (geoi1 inte maili1) ;
  2802. fins ;
  2803. fin b1 ;
  2804. tab2 . evolution_maillage . temps = ttps1 ;
  2805. tab2 . evolution_maillage . maillage = tmai1 ;
  2806.  
  2807. * Option MESU :
  2808. si imot3 ;
  2809. lltps1 = prog table ttps1 ;
  2810. evlarg1 = evol vert manu 'TEMP' lltps1 llarg1 ;
  2811. evhaut1 = evol vert manu 'TEMP' lltps1 lhaut1 ;
  2812. tab2 . largeur_cordons = evlarg1 ;
  2813. tab2 . hauteur_cordons = evhaut1 ;
  2814. fins ;
  2815.  
  2816. *-------------------------- Sous-option TEMP --------------------------*
  2817.  
  2818. si imot2 ;
  2819.  
  2820. * Valeurs pas de temps de calcul :
  2821. nbp1 = dime tab1.passes ;
  2822. ldtca1 = prog ;
  2823. si (nbp1 > 1) ;
  2824. ltdpass1 = prog ;
  2825. repe bp1 nbp1 ;
  2826. vpi1 = tab1.passes.&bp1.vitesse ;
  2827. dtcai1 = flot1 / vpi1 / flot2 ;
  2828. ldtca1 = ldtca1 et dtcai1 ;
  2829. tdpassi1 = tab1.passes.&bp1.instants extr 1 ;
  2830. ltdpass1 = ltdpass1 et tdpassi1 ;
  2831. fin bp1 ;
  2832. dtca1 = ldtca1 extr 1 ;
  2833. passp1 = 2 ;
  2834. tdpassp1 = ltdpass1 extr passp1 ;
  2835. sino ;
  2836. dtca1 = flot1 / (tab1.vitesse_de_soudage) / flot2 ;
  2837. fins ;
  2838. nbdtca1 = dime ldtca1 ;
  2839. *list ldtca1 ;
  2840. *list ltdpass1 ;
  2841.  
  2842. * Redecoupage de la liste des temps de l'evolution de la puissance thermique :
  2843. evqt1 = tab1.evolution_puissance ;
  2844. ltqt1 = extr evqt1 absc ;
  2845. lqqt1 = extr evqt1 ordo ;
  2846. tol2 = 1.e-6 * (maxi lqqt1) ;
  2847. tol3 = 0.001 * tab1.temps_de_coupure ;
  2848.  
  2849. * Gestion des evenements :
  2850. ieve1 = exis tab1 evenements ;
  2851. Si ieve1 ;
  2852. lteve1 = prog ;
  2853. lieve1 = lect ;
  2854. repe beve1 (dime tab1.evenements) ;
  2855. ie1 = &beve1 ;
  2856. lteve1 = lteve1 et tab1.evenements.ie1.temps ;
  2857. lieve1 = lieve1 et (lect (dime (tab1.evenements.ie1.temps)) * ie1) ;
  2858. fin beve1 ;
  2859. lpeve1 = posi ltqt1 dans lteve1 tol3 ;
  2860. *list lteve1 ;
  2861. *list lieve1 ;
  2862. *list lpeve1 ;
  2863. sino ;
  2864. lpeve1 = lect (dime ltqt1) * 0 ;
  2865. fins ;
  2866.  
  2867. * Sous-decoupage de l'historique de puissance :
  2868. nb1 = dime ltqt1 ;
  2869. t0 = extr ltqt1 1 ;
  2870. q0 = extr lqqt1 1 ;
  2871.  
  2872. * Gestion evenements :
  2873. peve0 = extr lpeve1 1 ;
  2874. si (peve0 neg 0) ;
  2875. neve0 = extr lieve1 peve0 ;
  2876. si ((peve0 + 1) &lt;EG (dime lieve1)) ;
  2877. neve1 = extr lieve1 (peve0 + 1) ;
  2878. sino ;
  2879. neve1 = -1 ;
  2880. fins ;
  2881. idtev1 = neve0 ega neve1 ;
  2882. si idtev1 ;
  2883. tev1 = lteve1 extr (peve0 + 1) ;
  2884. dtev1 = tev1 - t0 ;
  2885. *mess (chai 'Even. = ' neve0 ', dtev1 =' dtev1) ;
  2886. fins ;
  2887. sino ;
  2888. idtev1 = faux ;
  2889. fins ;
  2890.  
  2891. * Boucle sur les piquets de temps :
  2892. ltca1 = prog t0 ;
  2893. repe b1 (nb1 - 1) ;
  2894. ip1 = &b1 + 1 ;
  2895. t1 = extr ltqt1 ip1 ;
  2896. q1 = extr lqqt1 ip1 ;
  2897. peve1 = extr lpeve1 ip1 ;
  2898. dt1 = t1 - t0 ;
  2899. si (&b1 ega 1) ; dt0 = dt1 ; fins ;
  2900. * Gestion pas de temps (dtca1) en multipasses :
  2901. si (nbdtca1 > 0) ;
  2902. si ((t0 >EG tdpassp1) et (passp1 &lt;EG nbdtca1)) ;
  2903. dtca1 = ldtca1 extr passp1 ;
  2904. passp1 = passp1 + 1 ;
  2905. si (passp1 > nbdtca1) ;
  2906. tdpassp1 = (maxi ltqt1) + 1. ;
  2907. sino ;
  2908. tdpassp1 = ltdpass1 extr passp1 ;
  2909. fins ;
  2910. *mess '***** t0, dtca1 =' t0 ',' dtca1 ;
  2911. fins ;
  2912. fins ;
  2913. * Avec evements :
  2914. si idtev1 ;
  2915. si (dt1 &lt;EG dtca1) ;
  2916. si (dtev1 &lt;EG dtca1) ;
  2917. si (dt1 ega dtev1 tol3) ;
  2918. ltca1 = ltca1 et (prog t1) ;
  2919. sino ;
  2920. si (dt1 < dtev1) ;
  2921. ltca1 = ltca1 et (prog t1) et (prog tev1) ;
  2922. t1 = tev1 ;
  2923. sino ;
  2924. ltca1 = ltca1 et (prog tev1) et (prog t1) ;
  2925. fins ;
  2926. fins ;
  2927. sino ;
  2928. ltca1 = ltca1 et (prog t1) ;
  2929. si ((q0 > tol2) ou (q1 > tol2)) ;
  2930. ltca1 = ltca1 et ((prog t1 pas dtca1 tev1) enle 1) ;
  2931. sino ;
  2932. ltca1 = ltca1 et ((prog t1 pas dt1 geom 2. tev1) enle 1) ;
  2933. fins ;
  2934. t1 = tev1 ;
  2935. fins ;
  2936. sino ;
  2937. si (dt1 ega dtev1 tol3) ;
  2938. si ((q0 > tol2) ou (q1 > tol2)) ;
  2939. ltca1 = ltca1 et ((prog t0 pas dtca1 t1) enle 1) ;
  2940. sino ;
  2941. ltca1 = ltca1 et ((prog t0 pas dtev1 geom 2. t1) enle 1) ;
  2942. fins ;
  2943. sino ;
  2944. si (dtev1 < dt1) ;
  2945. si (dtev1 < dtca1) ;
  2946. ltca1 = ltca1 et (prog tev1) ;
  2947. sino ;
  2948. si ((q0 > tol2) ou (q1 > tol2)) ;
  2949. *mess '############ Ici 1' ;
  2950. ltca1 = ltca1 et ((prog t0 pas dtca1 tev1) enle 1) ;
  2951. ltca1 = ltca1 et ((prog tev1 pas dtca1 t1) enle 1) ;
  2952. sino ;
  2953. ltca1 = ltca1 et (prog tev1 pas dtev1 geom 2. t1) ;
  2954. fins ;
  2955. fins ;
  2956. sino ;
  2957. si ((q0 > tol2) ou (q1 > tol2)) ;
  2958. *mess '############ Ici 2' ;
  2959. ltca1 = ltca1 et ((prog t0 pas dtca1 tev1) enle 1) ;
  2960. sino ;
  2961. ltca1 = ltca1 et ((prog t0 pas dt0 geom 2. tev1) enle 1) ;
  2962. fins ;
  2963. t1 = tev1 ;
  2964. fins ;
  2965. fins ;
  2966. fins ;
  2967. * Pas d'evenement :
  2968. sino ;
  2969. si (dt1 &lt;EG dtca1) ;
  2970. ltca1 = ltca1 et (prog t1) ;
  2971. sino ;
  2972. si ((q0 > tol2) ou (q1 > tol2)) ;
  2973. ltca1 = ltca1 et ((prog t0 pas dtca1 t1) enle 1) ;
  2974. sino ;
  2975. ltca1 = ltca1 et ((prog t0 pas dt0 geom 2. t1) enle 1) ;
  2976. fins ;
  2977. fins ;
  2978. fins ;
  2979. t0 = t1 ;
  2980. q0 = q1 ;
  2981. ntca1 = dime ltca1 ;
  2982. dt0 = (ltca1 extr ntca1) - (ltca1 extr (ntca1-1)) ;
  2983. * Gestion evenement suivant :
  2984. peve0 = peve1 ;
  2985. si (peve0 neg 0) ;
  2986. neve0 = extr lieve1 peve0 ;
  2987. si ((peve0 + 1) &lt;EG (dime lieve1)) ;
  2988. neve1 = extr lieve1 (peve0 + 1) ;
  2989. sino ;
  2990. neve1 = -1 ;
  2991. fins ;
  2992. idtev1 = neve0 ega neve1 ;
  2993. si idtev1 ;
  2994. tev1 = lteve1 extr (peve0 + 1) ;
  2995. dtev1 = tev1 - t0 ;
  2996. *mess (chai 'Even. = ' neve0 ', dtev1 =' dtev1) ;
  2997. fins ;
  2998. sino ;
  2999. idtev1 = faux ;
  3000. fins ;
  3001. fin b1 ;
  3002.  
  3003. * Verification si liste temps calcules bien ordonnee :
  3004. ltca2 = ordo ltca1 ;
  3005. si (((ltca2 - ltca1) maxi abs) > (1.e-3*flot2)) ;
  3006. erre '***** ERREUR WAAM dans construction liste TEMPS_CALCULES' ;
  3007. quit waam ;
  3008. fins ;
  3009.  
  3010. tab2.temps_calcules = ltca1 ;
  3011.  
  3012. * Sorties si evenements :
  3013. si ieve1 ;
  3014. tab2.temps_evenements = lteve1 ;
  3015. tab2.index_evenements = lieve1 ;
  3016. fins ;
  3017.  
  3018. * Fin sous-option TEMP :
  3019. fins ;
  3020.  
  3021. * Sortie de la table resultat :
  3022. resp tab2 ;
  3023. quit soudage ;
  3024.  
  3025. * Fin option MAIL :
  3026. fins ;
  3027.  
  3028. *----------------------------------------------------------------------*
  3029. * FIN *
  3030. *----------------------------------------------------------------------*
  3031.  
  3032. * MOT1 n'est pas un des mots-cles des options de la procedure :
  3033. si (icas1 ega 0) ;
  3034. erre '***** ERREUR : MOT-cle option SOUDAGE non reconnu.' ;
  3035. quit soudage ;
  3036. fins ;
  3037.  
  3038. FINP ;
  3039.  
  3040.  
  3041.  
  3042.  
  3043.  
  3044.  

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