Télécharger usure.procedur

Retour à la liste

Numérotation des lignes :

  1. * USURE PROCEDUR MB234859 25/05/05 21:15:11 12260
  2. ***********************************************************************
  3. * PROCEDURE USURE
  4. *
  5. * Procedure principale pour les calculs d'usure qui determine :
  6. * - les grandeurs necessaires au calcul de la profondeur usee
  7. * - le profil d'usure a appliquer et deplace les maillages des
  8. * surface susees (AppUsure = VRAI).
  9. *
  10. * Entrees :
  11. * T1 : Table de PASAPAS
  12. *
  13. * Sortie :
  14. * T1 : Table de PASAPAS avec les resultats propres a l'usure
  15. *
  16. * A Appeler dans PERSO1
  17. *
  18. ************************************************************************
  19. 'DEBP' USURE T1*'TABLE' ;
  20. *
  21. BOITE_US = T1.'BOITES_USURE' ;
  22. *-----------------------------------------------------------------------
  23. * - PREMIER APPEL - INITIALISATIONS TABLE ET PAS DE TEMPS
  24. *-----------------------------------------------------------------------
  25. 'SI' ('EGA' T1.'PERSO1_APPEL' 1) ;
  26. *
  27. 'SI' ('EXIS' BOITE_US 'INFOS') ;
  28. * Cas d'une reprise/poursuite de calcul
  29. BOITE_US.'INFOS'.'iMENAGE' = VRAI ;
  30. 'SI' BOITE_US.'INFOS'.'CALCUL_PAS' ;
  31. T1.'WTABLE'.'ISAUVEGL' = BOITE_US.'INFOS'.'SAUV_CYCLE' ;
  32. T1.'WTABLE'.'ISAUVEGA' = 'PROG' ;
  33. TREP = T1.'CONTINUATION'.'TEMPS' ;
  34. LTPS = T1.'WTABLE'.'TEMPS_CALCULES' ;
  35. LMAS = 'MASQ' LTPS 'EGINFE' TREP;
  36. LPOS = 'POSI' 1. 'DANS' LMAS 'TOUS' ;
  37. LTPS = 'EXTR' LTPS LPOS ;
  38. LNEW = BOITE_US.'INFOS'.'INSTANTS_CYCLE' '+' Trep ;
  39. LTPS2 = LTPS 'ET' LNEW ;
  40. T1.'WTABLE'.'TEMPS_CALCULES' = LTPS2;
  41. T1.'TEMPS_CALCULES' = LTPS2;
  42. 'FINSI' ;
  43. 'SINON' ;
  44. USINIB T1 ;
  45. 'SI' BOITE_US.'INFOS'.'CALCUL_PAS' ;
  46. USTMPS T1 ;
  47. 'FINSI' ;
  48. BOITE_US.'INFOS'.'iMENAGE' = FAUX ;
  49. 'FINSI' ;
  50. 'QUIT' USURE ;
  51. 'FINSI' ;
  52. *-----------------------------------------------------------------------
  53. * - DOIT-ON CALCULER OU APPLIQUER L'USURE
  54. *-----------------------------------------------------------------------
  55. T_inc = T1.'ESTIMATION'.'TEMPS' ;
  56. 'SI' ('<EG' (T_inc '-' BOITE_US.'DONNEES'.'T_DEBUT_USURE') 1.E-15) ;
  57. 'QUIT' USURE ;
  58. 'FINSI' ;
  59. *
  60. CycActu = BOITE_US.'INFOS'.'INDICE_CYCLE_ACTUEL' ;
  61. NbIncCy = BOITE_US.'INFOS'.'NB_INCREMENTS_PAR_CYCLE' ;
  62. IndActu = T1.'WTABLE'.'ICHG' ;
  63. *
  64. * Indice du pas de temps courant
  65. 'SI' ('NON' ('EXIS' BOITE_US.'INFOS' 'INDICE_DEBUT_USURE')) ;
  66. BOITE_US.'INFOS'.'INDICE_DEBUT_USURE' = IndActu ;
  67. 'FINSI' ;
  68. Nbindic = IndActu - BOITE_US.'INFOS'.'INDICE_DEBUT_USURE' ;
  69. IncActu = (@MOD Nbindic NbIncCy) '+' 1 ;
  70. BOITE_US.'INFOS'.'INDICE_INCREMENT_ACTUEL' = IncActu ;
  71. *
  72. * ---------------------------------------------------------------------
  73. * Reprise : verification et menage
  74. * ---------------------------------------------------------------------
  75. 'SI' BOITE_US.'INFOS'.'iMENAGE' ;
  76. BOITE_US.'INFOS'.'iMENAGE' = FAUX ;
  77. *
  78. * Reprise de calcul autorisee si :
  79. * - pour le cycle courant, on redemarre d'un instant anterieur
  80. * - pour un cycle anterieur, on redemarre du debut de cycle
  81. *
  82. IndCyc = BOITE_US.'POST'.'INDICES_CYCLE';
  83. Dimeic = 'DIME' IndCyc ;
  84. IncRepr = IncActu '-' 1 ; CycRepr = 1 ; Ncycalc = 0 ;
  85. 'SI' ('<' 0 Dimeic) ;
  86. 'REPE' BI Dimeic ;
  87. IndCycz = IndCyc. &BI ;
  88. 'SI' ('NEG' ('DIME' IndCycz) 2) ;
  89. CycRepr = &BI ;
  90. 'QUIT' BI ;
  91. 'FINSI' ;
  92. 'SI' ('&lt;EG' IndActu ('EXTR' IndCycz 2)) ;
  93. CycRepr = &BI ;
  94. 'SI' ('EGA' IncRepr 0) ; CycRepr = CycRepr '+' 1 ; 'FINSI' ;
  95. 'QUIT' BI ;
  96. 'FINSI' ;
  97. 'FIN' BI ;
  98. 'SI' ('NEG' CycRepr 1) ;
  99. Ncycalc = 'ENTI' ('EXTR' BOITE_US.'POST'.'CYCLES_REELS' (CycRepr '-' 1)) ;
  100. 'FINSI' ;
  101. 'FINSI' ;
  102. *
  103. 'SI' ('NEG' CycRepr CycActu) ;
  104. 'SI' ('NEG' IncRepr 0) ;
  105. 'MESS' 'Erreur : reprise impossible';
  106. 'ERRE' ;
  107. 'FINSI' ;
  108. 'FINSI' ;
  109. *
  110. * Actualiser le nombre de cycles restants
  111. BOITE_US.'INFOS'.'NB_CYCLES_RESTANTS' = BOITE_US.'DONNEES'.'NB_CYCLES' - Ncycalc ;
  112. BOITE_US.'INFOS'.'INDICE_CYCLE_ACTUEL' = CycRepr ;
  113. *
  114. * Supprimer les resultats posterieurs a l'instant de reprise
  115. * - Oter 2 car indices indiquant que c'est une table esclave
  116. Nbrinc = ('DIME' BOITE_US. 1 .'CISAILLEMENT') '-' 2;
  117. Nbindi = Nbrinc '-' IncRepr ;
  118. *
  119. * - Nombre de cycles sauvegardes
  120. Nbrcyc = 'DIME' BOITE_US. 1 .'CYCLE_DE_FRETTING' ;
  121. Nbcycl = Nbrcyc '-' CycRepr ;
  122. *
  123. 'REPE' BU BOITE_US.'INFOS'.'N_BOITES' ;
  124. BUZ = BOITE_US. &BU ;
  125. * Informations stockees a chaque increment de cycle
  126. 'REPE' BV Nbindi ;
  127. indz = IncRepr '+' &BV ;
  128. 'OTER' (BUZ.'CISAILLEMENT') indz ;
  129. 'OTER' (BUZ.'DENS_ENER_DISS') indz ;
  130. 'OTER' (BUZ.'PRESSION_CONTACT') indz ;
  131. 'FIN' BV;
  132. *
  133. * Informations stockees a chaque cycle
  134. 'REPE' BW Nbcycl ;
  135. indz = CycRepr '+' &BW ;
  136. 'OTER' (BUZ.'INC_USURE') indz ;
  137. 'OTER' (BUZ.'USURE_TOT') indz ;
  138. 'OTER' (BUZ.'EVO_USURE_TOT') indz ;
  139. 'OTER' (BUZ.'CYCLE_DE_FRETTING') indz ;
  140. 'OTER' (BUZ.'PRESSION_MOYENNE_CYCLE') indz ;
  141. 'OTER' (BUZ.'CISAILLEMENT_MOYEN_CYCLE') indz ;
  142. 'SI' ('EGA' &BU 1) ;
  143. 'OTER' (BOITE_US.'POST'.'INDICES_CYCLE') indz ;
  144. 'OTER' (BOITE_US.'POST'.'FACTEUR_ACCELERATION') indz ;
  145. 'FINSI' ;
  146. 'FIN' BW;
  147. *
  148. 'FIN' BU;
  149. 'FINSI' ;
  150. * ---------------------------------------------------------------------
  151. *
  152. IndPas = T1.'WTABLE'.'NSOR' ;
  153. 'SI' (('EGA' CycActu 1) 'ET' ('EGA' IncActu 1)) ;
  154. BOITE_US.'POST'.'INDICES_CYCLE'. CycActu = 'LECT' IndPas ;
  155. 'FINSI' ;
  156. *
  157. AppUsure = 'EGA' IncActu NbIncCy ;
  158. *
  159. * Affichage (sous forme d'entier)
  160. NCycle = BOITE_US.'DONNEES'.'NB_CYCLES' ;
  161. NCycRe = BOITE_US.'INFOS'.'NB_CYCLES_RESTANTS' ;
  162. 'MESS' ' ' ;
  163. 'MESS' 'Cycles a calculer :' ' 'NCycle' / Cycles restants :' ' 'NCycRe;
  164. 'MESS' ' -> Increment' ' 'IncActu' sur' ' 'NbIncCy ;
  165. *-----------------------------------------------------------------------
  166. * - GLISSEMENT, CISAILLEMENT, PRESSION DE CONTACT ET ENERGIE DISSIPEE
  167. *-----------------------------------------------------------------------
  168. USCALC T1 ;
  169. *-----------------------------------------------------------------------
  170. * - APPLICATION DU PROFIL D'USURE
  171. *-----------------------------------------------------------------------
  172. 'SI' AppUsure ;
  173. * --------------------------------------------------------------------
  174. * Schema (explicite/implicite) pour appliquer le profil d'usure
  175. 'SI' BOITE_US.'INFOS'.'SCH_EXPL';
  176. USEXPL T1 ;
  177. 'SINON' ;
  178. USIMPL T1 ;
  179. 'FINSI' ;
  180. * --------------------------------------------------------------------
  181. * Reste-t-il des cycles a calculer (Booleen pour quitter PASAPAS)
  182. T1.'ARRET' = 'EGA' BOITE_US.'INFOS'.'NB_CYCLES_RESTANTS' 0 ;
  183. * --------------------------------------------------------------------
  184. * Construire et actualiser (eventuellement) les pas de temps
  185. 'SI' BOITE_US.'INFOS'.'CALCUL_PAS' ;
  186. USTMPS T1 ;
  187. ISAUV = VRAI ;
  188. 'SINON' ;
  189. ISAUV = 'DANS' T1.'WTABLE'.'IPRESU' T1.'ESTIMATION'.'TEMPS' ;
  190. 'FINSI' ;
  191. * --------------------------------------------------------------------
  192. 'SI' ISAUV ;
  193. * NSOR+1 car la sauvegarde s'effectue apres (on anticipe le numero)
  194. IProc = IndPas + 1 ;
  195. BOITE_US.'POST'.'INDICES_CYCLE'. CycActu =
  196. BOITE_US.'POST'.'INDICES_CYCLE'. CycActu 'ET' IProc ;
  197. 'FINSI' ;
  198. * --------------------------------------------------------------------
  199. 'SI' T1.'ARRET' ;
  200. 'MESS'; 'MESS' '=====> FIN DE CALCUL DES' ' 'NCycle' CYCLES.';
  201. 'SINON' ;
  202. * Actualiser le compteur de cycle
  203. 'SI' (BOITE_US.'INFOS'.'SCH_EXPL' 'OU' BOITE_US.'INFOS'.'SCH_CONV') ;
  204. CycSuiv = CycActu '+' 1 ;
  205. BOITE_US.'INFOS'.'INDICE_CYCLE_ACTUEL' = CycSuiv ;
  206. * Le dernier instant de CycActu est le premier instant de CycSuiv
  207. 'SI' ISAUV ;
  208. BOITE_US.'POST'.'INDICES_CYCLE'. CycSuiv = 'LECT' IProc;
  209. 'FINSI' ;
  210. 'FINSI' ;
  211. * ------------------------------------------------------------------
  212. * Creation du chargement en deformations imposees si necessaire
  213. 'SI' BOITE_US.'INFOS'.'DEFO_IMP' ;
  214. TDebCyc = 'EXTR' T1.'WTABLE'.'TEMPS_CALCULES' (IndActu+1) ;
  215. TfinCyc = 'EXTR' T1.'WTABLE'.'TEMPS_CALCULES' (IndActu+NbIncCy);
  216. LTPS = 'PROG' TDebCyc TfinCyc ;
  217. LCOE = 'PROG' 1. 1. ;
  218. EVTP = 'EVOL' 'MANU' 'Temps' LTPS 'Fac' LCOE ;
  219. EPST = 'VIDE' 'MCHAML' ;
  220. 'REPE' BU BOITE_US.'INFOS'.'N_BOITES' ;
  221. EPST = EPST 'ET' BOITE_US. &BU .'CHMP_DEF' ;
  222. 'FIN' BU ;
  223. CHDE = 'CHAR' 'DEFI' EPST EVTP ;
  224. T1.'WTABLE'.'CHARGEMENT' = T1.'WTABLE'.'CHARGEMENT' 'ET' CHDE ;
  225. 'FINSI' ;
  226. 'FINSI' ;
  227. * --------------------------------------------------------------------
  228. * Affichage du temps de calcul
  229. RunTimeE = 'TEMPS' 'HORL' ; 'TEMP' 'ZERO' ;
  230. CyclTime = 'FLOT' RunTimeE '/' 1000. ;
  231. 'SI' ('EXIS' T1 'RUN_TIME') ;
  232. DILRT = 'DIME' T1.'RUN_TIME' ;
  233. RunTimeP = 'EXTR' T1.'RUN_TIME' DILRT ;
  234. RunTimeF = RunTimeP '+' CyclTime ;
  235. T1.'RUN_TIME' = T1.'RUN_TIME' 'ET' RunTimeF ;
  236. T1.'CYCLE_TIME' = T1.'CYCLE_TIME' 'ET' CyclTime;
  237. 'SINON' ;
  238. RunTimeF = CyclTime ;
  239. T1.'RUN_TIME' = 'PROG' RunTimeF ;
  240. T1.'CYCLE_TIME' = 'PROG' CyclTime ;
  241. 'FINSI' ;
  242. HH = 'ENTI' 'INFE' (CyclTime '/' 3600.) ; HC = HH '*' 3600. ;
  243. MM = 'ENTI' 'INFE' ((CyclTime '-' HC) '/' 60) ; MC = MM '*' 60. ;
  244. SS = 'ENTI' 'PROC' (CyclTime '-' HC '-' MC) ;
  245. CHA1 = 'CHAI' HH' h' ' 'MM' min' ' 'SS's.' ;
  246. HH = 'ENTI' 'INFE' (RunTimeF '/' 3600.) ; HC = HH '*' 3600. ;
  247. MM = 'ENTI' 'INFE' ((RunTimeF '-' HC) '/' 60) ; MC = MM '*' 60. ;
  248. SS = 'ENTI' 'PROC' (RunTimeF '-' HC '-' MC) ;
  249. CHA2 = 'CHAI' HH' h' ' 'MM' min' ' 'SS's.' ;
  250. MESS ' ' ; MESS ' - Cycle Time =' ' 'CHA1;
  251. MESS ' ' ; MESS ' - Total Time =' ' 'CHA2;
  252. 'FINSI' ;
  253. *-----------------------------------------------------------------------
  254. 'FINP' T1;
  255.  
  256.  

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