Télécharger usure.procedur

Retour à la liste

Numérotation des lignes :

  1. * USURE PROCEDUR MB234859 24/11/20 21:15:25 12059
  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. 'SI' ('EXIS' BOITE_US 'INFOS') ;
  27. * Cas d'une reprise/poursuite de calcul
  28. BOITE_US.'INFOS'.'iMENAGE' = VRAI ;
  29. 'SINON' ;
  30. USINIB T1 ;
  31. 'SI' BOITE_US.'INFOS'.'CALCUL_PAS' ;
  32. USTMPS T1 ;
  33. 'FINSI' ;
  34. BOITE_US.'INFOS'.'iMENAGE' = FAUX ;
  35. 'FINSI' ;
  36. 'QUIT' USURE ;
  37. 'FINSI' ;
  38. *-----------------------------------------------------------------------
  39. * - DOIT-ON CALCULER OU APPLIQUER L'USURE
  40. *-----------------------------------------------------------------------
  41. T_inc = T1.'ESTIMATION'.'TEMPS' ;
  42. 'SI' ('<EG' (T_inc '-' BOITE_US.'DONNEES'.'T_DEBUT_USURE') 1.E-15) ;
  43. 'QUIT' USURE ;
  44. 'FINSI' ;
  45. *
  46. CycActu = BOITE_US.'INFOS'.'INDICE_CYCLE_ACTUEL' ;
  47. NbIncCy = BOITE_US.'INFOS'.'NB_INCREMENTS_PAR_CYCLE' ;
  48. *
  49. * Indice du pas de temps courant
  50. 'SI' ('NON' ('EXIS' BOITE_US.'INFOS' 'INDICE_DEBUT_USURE')) ;
  51. BOITE_US.'INFOS'.'INDICE_DEBUT_USURE' = T1.'WTABLE'.'ICHG' ;
  52. 'FINSI' ;
  53. Nbindic = T1.'WTABLE'.'ICHG' - BOITE_US.'INFOS'.'INDICE_DEBUT_USURE' ;
  54. IncActu = (@MOD Nbindic NbIncCy) '+' 1 ;
  55. BOITE_US.'INFOS'.'INDICE_INCREMENT_ACTUEL' = IncActu ;
  56. *
  57. * ---------------------------------------------------------------------
  58. * Reprise : verification et menage
  59. * ---------------------------------------------------------------------
  60. 'SI' BOITE_US.'INFOS'.'iMENAGE' ;
  61. BOITE_US.'INFOS'.'iMENAGE' = FAUX ;
  62. *
  63. * Reprise de calcul autorisee si :
  64. * - pour le cycle courant, on redemarre d'un instant anterieur
  65. * - pour un cycle anterieur, on redemarre du debut de cycle
  66. *
  67. IndCyc = BOITE_US.'POST'.'INDICES_CYCLE';
  68. Dimeic = 'DIME' IndCyc ;
  69. IncRepr = IncActu '-' 1 ; CycRepr = 1 ; Ncycalc = 0 ;
  70. 'SI' ('<' 0 Dimeic) ;
  71. 'REPE' BI Dimeic ;
  72. IndCycz = IndCyc. &BI ;
  73. 'SI' ('NEG' ('DIME' IndCycz) 2) ;
  74. CycRepr = &BI ;
  75. 'QUIT' BI ;
  76. 'FINSI' ;
  77. 'SI' ('&lt;EG' T1.'WTABLE'.'ICHG' ('EXTR' IndCycz 2)) ;
  78. CycRepr = &BI ;
  79. 'QUIT' BI ;
  80. 'FINSI' ;
  81. 'FIN' BI ;
  82. 'SI' ('NEG' CycRepr 1) ;
  83. Ncycalc = 'ENTI' ('EXTR' BOITE_US.'POST'.'CYCLES_REELS' (CycRepr '-' 1)) ;
  84. 'FINSI' ;
  85. 'FINSI' ;
  86. *
  87. 'SI' ('NEG' CycRepr CycActu) ;
  88. 'SI' ('NEG' IncRepr 0) ;
  89. 'MESS' 'Erreur : reprise impossible';
  90. 'ERRE' ;
  91. 'FINSI' ;
  92. 'FINSI' ;
  93. *
  94. * Actualiser le nombre de cycles restants
  95. BOITE_US.'INFOS'.'NB_CYCLES_RESTANTS' = BOITE_US.'DONNEES'.'NB_CYCLES' - Ncycalc ;
  96. BOITE_US.'INFOS'.'INDICE_CYCLE_ACTUEL' = CycRepr ;
  97. *
  98. * Supprimer les resultats posterieurs a l'instant de reprise
  99. * - Oter 2 car indices indiquant que c'est une table esclave
  100. Nbrinc = ('DIME' BOITE_US. 1 .'CISAILLEMENT') '-' 2;
  101. Nbindi = Nbrinc '-' IncRepr ;
  102. Linc = 'LECT' ;
  103. 'SI' ('NEG' IncRepr 0) ;
  104. Linc = 'LECT' 1 'PAS' 1 IncRepr ;
  105. 'FINSI' ;
  106. *
  107. * - Nombre de cycles sauvegardes
  108. Nbrcyc = 'DIME' BOITE_US. 1 .'CYCLE_DE_FRETTING' ;
  109. Nbcycl = Nbrcyc '+' 1 '-' CycRepr ;
  110. *
  111. 'REPE' BU BOITE_US.'INFOS'.'N_BOITES' ;
  112. BUZ = BOITE_US. &BU ;
  113. * Informations stockees a chaque increment de cycle
  114. 'REPE' BV Nbindi ;
  115. indz = IncRepr '+' &BV ;
  116. 'OTER' (BUZ.'GLISSEMENT') indz ;
  117. 'OTER' (BUZ.'CISAILLEMENT') indz ;
  118. 'OTER' (BUZ.'DENS_ENER_DISS') indz ;
  119. 'OTER' (BUZ.'PRESSION_CONTACT') indz ;
  120. 'FIN' BV;
  121. BUZ.'PRESSION_MAX_INC' = 'EXTR' BUZ.'PRESSION_MAX_INC' Linc ;
  122. BUZ.'CISAILLEMENT_MAX_INC' = 'EXTR' BUZ.'CISAILLEMENT_MAX_INC' Linc ;
  123. BUZ.'DELTAS' = 'EXTR' BUZ.'DELTAS' Linc ;
  124. BUZ.'FORCES_TANGENTIELLES' = 'EXTR' BUZ.'FORCES_TANGENTIELLES' Linc ;
  125. *
  126. * Informations stockees a chaque cycle
  127. 'REPE' BW Nbcycl ;
  128. indz = CycRepr '+' &BW ;
  129. 'OTER' (BUZ.'INC_USURE') indz ;
  130. 'OTER' (BUZ.'USURE_TOT') indz ;
  131. 'OTER' (BUZ.'EVO_USURE_TOT') indz ;
  132. 'OTER' (BUZ.'GLISSEMENT_CYCLE') indz ;
  133. 'OTER' (BUZ.'CYCLE_DE_FRETTING') indz ;
  134. 'OTER' (BUZ.'PRESSION_MOYENNE_CYCLE') indz ;
  135. 'OTER' (BUZ.'CISAILLEMENT_MOYEN_CYCLE') indz ;
  136. 'SI' ('EGA' &BU 1) ;
  137. 'OTER' (BOITE_US.'POST'.'INDICES_CYCLE') indz ;
  138. 'OTER' (BOITE_US.'POST'.'FACTEUR_ACCELERATION') indz ;
  139. 'FINSI' ;
  140. 'FIN' BW;
  141. *
  142. 'FIN' BU;
  143. 'FINSI' ;
  144. * ---------------------------------------------------------------------
  145. *
  146. IndPas = T1.'WTABLE'.'NSOR' ;
  147. 'SI' (('EGA' CycActu 1) 'ET' ('EGA' IncActu 1)) ;
  148. BOITE_US.'POST'.'INDICES_CYCLE'. CycActu = 'LECT' IndPas ;
  149. 'FINSI' ;
  150. *
  151. AppUsure = 'EGA' IncActu NbIncCy ;
  152. *
  153. * Affichage (sous forme d'entier)
  154. NCycle = BOITE_US.'DONNEES'.'NB_CYCLES' ;
  155. NCycRe = BOITE_US.'INFOS'.'NB_CYCLES_RESTANTS' ;
  156. 'MESS' ' ' ;
  157. 'MESS' 'Cycles a calculer :' ' 'NCycle' / Cycles restants :' ' 'NCycRe;
  158. 'MESS' ' -> Increment' ' 'IncActu' sur' ' 'NbIncCy ;
  159. *-----------------------------------------------------------------------
  160. * - GLISSEMENT, CISAILLEMENT, PRESSION DE CONTACT ET ENERGIE DISSIPEE
  161. *-----------------------------------------------------------------------
  162. USCALC T1 ;
  163. *-----------------------------------------------------------------------
  164. * - APPLICATION DU PROFIL D'USURE
  165. *-----------------------------------------------------------------------
  166. 'SI' AppUsure ;
  167. * --------------------------------------------------------------------
  168. * Schema (explicite/implicite) pour appliquer le profil d'usure
  169. 'SI' BOITE_US.'INFOS'.'SCH_EXPL';
  170. USEXPL T1 ;
  171. 'SINON' ;
  172. USIMPL T1 ;
  173. 'FINSI' ;
  174. * --------------------------------------------------------------------
  175. * Reste-t-il des cycles a calculer (Booleen pour quitter PASAPAS)
  176. T1.'ARRET' = 'EGA' BOITE_US.'INFOS'.'NB_CYCLES_RESTANTS' 0 ;
  177. * --------------------------------------------------------------------
  178. * Construire et actualiser (eventuellement) les pas de temps
  179. 'SI' BOITE_US.'INFOS'.'CALCUL_PAS' ;
  180. USTMPS T1 ;
  181. ISAUV = VRAI ;
  182. 'SINON' ;
  183. ISAUV = 'DANS' T1.'WTABLE'.'IPRESU' T1.'ESTIMATION'.'TEMPS' ;
  184. 'FINSI' ;
  185. * --------------------------------------------------------------------
  186. 'SI' ISAUV ;
  187. * NSOR+1 car la sauvegarde s'effectue apres (on anticipe le numero)
  188. IProc = IndPas + 1 ;
  189. BOITE_US.'POST'.'INDICES_CYCLE'. CycActu =
  190. BOITE_US.'POST'.'INDICES_CYCLE'. CycActu 'ET' IProc ;
  191. 'FINSI' ;
  192. * --------------------------------------------------------------------
  193. 'SI' T1.'ARRET' ;
  194. 'MESS'; 'MESS' '=====> FIN DE CALCUL DES' ' 'NCycle' CYCLES.';
  195. 'SINON' ;
  196. * Actualiser le compteur de cycle
  197. 'SI' (BOITE_US.'INFOS'.'SCH_EXPL' 'OU' BOITE_US.'INFOS'.'SCH_CONV') ;
  198. CycSuiv = CycActu '+' 1 ;
  199. BOITE_US.'INFOS'.'INDICE_CYCLE_ACTUEL' = CycSuiv ;
  200. * Le dernier instant de CycActu est le premier instant de CycSuiv
  201. 'SI' ISAUV ;
  202. BOITE_US.'POST'.'INDICES_CYCLE'. CycSuiv = 'LECT' IProc;
  203. 'FINSI' ;
  204. 'FINSI' ;
  205. 'FINSI' ;
  206. * --------------------------------------------------------------------
  207. * Affichage du temps de calcul
  208. RunTimeE = 'TEMPS' 'HORL' ; 'TEMP' 'ZERO' ;
  209. CyclTime = 'FLOT' RunTimeE '/' 1000. ;
  210. 'SI' ('EXIS' T1 'RUN_TIME') ;
  211. DILRT = 'DIME' T1.'RUN_TIME' ;
  212. RunTimeP = 'EXTR' T1.'RUN_TIME' DILRT ;
  213. RunTimeF = RunTimeP '+' CyclTime ;
  214. T1.'RUN_TIME' = T1.'RUN_TIME' 'ET' RunTimeF ;
  215. T1.'CYCLE_TIME' = T1.'CYCLE_TIME' 'ET' CyclTime;
  216. 'SINON' ;
  217. RunTimeF = CyclTime ;
  218. T1.'RUN_TIME' = 'PROG' RunTimeF ;
  219. T1.'CYCLE_TIME' = 'PROG' CyclTime ;
  220. 'FINSI' ;
  221. HH = 'ENTI' 'INFE' (CyclTime '/' 3600.) ; HC = HH '*' 3600. ;
  222. MM = 'ENTI' 'INFE' ((CyclTime '-' HC) '/' 60) ; MC = MM '*' 60. ;
  223. SS = 'ENTI' 'PROC' (CyclTime '-' HC '-' MC) ;
  224. CHA1 = 'CHAI' HH' h' ' 'MM' min' ' 'SS's.' ;
  225. HH = 'ENTI' 'INFE' (RunTimeF '/' 3600.) ; HC = HH '*' 3600. ;
  226. MM = 'ENTI' 'INFE' ((RunTimeF '-' HC) '/' 60) ; MC = MM '*' 60. ;
  227. SS = 'ENTI' 'PROC' (RunTimeF '-' HC '-' MC) ;
  228. CHA2 = 'CHAI' HH' h' ' 'MM' min' ' 'SS's.' ;
  229. MESS ' ' ; MESS ' - Cycle Time =' ' 'CHA1;
  230. MESS ' ' ; MESS ' - Total Time =' ' 'CHA2;
  231. 'FINSI' ;
  232. *-----------------------------------------------------------------------
  233. 'FINP' T1;
  234.  
  235.  
  236.  
  237.  

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