* USURE PROCEDUR MB234859 24/11/20 21:15:25 12059 *********************************************************************** * PROCEDURE USURE * * Procedure principale pour les calculs d'usure qui determine : * - les grandeurs necessaires au calcul de la profondeur usee * - le profil d'usure a appliquer et deplace les maillages des * surface susees (AppUsure = VRAI). * * Entrees : * T1 : Table de PASAPAS * * Sortie : * T1 : Table de PASAPAS avec les resultats propres a l'usure * * A Appeler dans PERSO1 * ************************************************************************ 'DEBP' USURE T1*'TABLE' ; * BOITE_US = T1.'BOITES_USURE' ; *----------------------------------------------------------------------- * - PREMIER APPEL - INITIALISATIONS TABLE ET PAS DE TEMPS *----------------------------------------------------------------------- 'SI' ('EGA' T1.'PERSO1_APPEL' 1) ; * Cas d'une reprise/poursuite de calcul BOITE_US.'INFOS'.'iMENAGE' = VRAI ; 'SINON' ; USINIB T1 ; 'SI' BOITE_US.'INFOS'.'CALCUL_PAS' ; USTMPS T1 ; 'FINSI' ; BOITE_US.'INFOS'.'iMENAGE' = FAUX ; 'FINSI' ; 'QUIT' USURE ; 'FINSI' ; *----------------------------------------------------------------------- * - DOIT-ON CALCULER OU APPLIQUER L'USURE *----------------------------------------------------------------------- T_inc = T1.'ESTIMATION'.'TEMPS' ; 'SI' ('<EG' (T_inc '-' BOITE_US.'DONNEES'.'T_DEBUT_USURE') 1.E-15) ; 'QUIT' USURE ; 'FINSI' ; * CycActu = BOITE_US.'INFOS'.'INDICE_CYCLE_ACTUEL' ; NbIncCy = BOITE_US.'INFOS'.'NB_INCREMENTS_PAR_CYCLE' ; * * Indice du pas de temps courant BOITE_US.'INFOS'.'INDICE_DEBUT_USURE' = T1.'WTABLE'.'ICHG' ; 'FINSI' ; Nbindic = T1.'WTABLE'.'ICHG' - BOITE_US.'INFOS'.'INDICE_DEBUT_USURE' ; BOITE_US.'INFOS'.'INDICE_INCREMENT_ACTUEL' = IncActu ; * * --------------------------------------------------------------------- * Reprise : verification et menage * --------------------------------------------------------------------- 'SI' BOITE_US.'INFOS'.'iMENAGE' ; BOITE_US.'INFOS'.'iMENAGE' = FAUX ; * * Reprise de calcul autorisee si : * - pour le cycle courant, on redemarre d'un instant anterieur * - pour un cycle anterieur, on redemarre du debut de cycle * IndCyc = BOITE_US.'POST'.'INDICES_CYCLE'; IncRepr = IncActu '-' 1 ; CycRepr = 1 ; Ncycalc = 0 ; 'SI' ('<' 0 Dimeic) ; 'REPE' BI Dimeic ; IndCycz = IndCyc. &BI ; CycRepr = &BI ; 'QUIT' BI ; 'FINSI' ; CycRepr = &BI ; 'QUIT' BI ; 'FINSI' ; 'FIN' BI ; 'SI' ('NEG' CycRepr 1) ; 'FINSI' ; 'FINSI' ; * 'SI' ('NEG' CycRepr CycActu) ; 'SI' ('NEG' IncRepr 0) ; 'MESS' 'Erreur : reprise impossible'; 'ERRE' ; 'FINSI' ; 'FINSI' ; * * Actualiser le nombre de cycles restants BOITE_US.'INFOS'.'NB_CYCLES_RESTANTS' = BOITE_US.'DONNEES'.'NB_CYCLES' - Ncycalc ; BOITE_US.'INFOS'.'INDICE_CYCLE_ACTUEL' = CycRepr ; * * Supprimer les resultats posterieurs a l'instant de reprise * - Oter 2 car indices indiquant que c'est une table esclave Nbindi = Nbrinc '-' IncRepr ; 'SI' ('NEG' IncRepr 0) ; 'FINSI' ; * * - Nombre de cycles sauvegardes Nbcycl = Nbrcyc '+' 1 '-' CycRepr ; * 'REPE' BU BOITE_US.'INFOS'.'N_BOITES' ; BUZ = BOITE_US. &BU ; * Informations stockees a chaque increment de cycle 'REPE' BV Nbindi ; indz = IncRepr '+' &BV ; 'FIN' BV; * * Informations stockees a chaque cycle 'REPE' BW Nbcycl ; indz = CycRepr '+' &BW ; 'SI' ('EGA' &BU 1) ; 'FINSI' ; 'FIN' BW; * 'FIN' BU; 'FINSI' ; * --------------------------------------------------------------------- * IndPas = T1.'WTABLE'.'NSOR' ; 'SI' (('EGA' CycActu 1) 'ET' ('EGA' IncActu 1)) ; 'FINSI' ; * AppUsure = 'EGA' IncActu NbIncCy ; * * Affichage (sous forme d'entier) NCycle = BOITE_US.'DONNEES'.'NB_CYCLES' ; NCycRe = BOITE_US.'INFOS'.'NB_CYCLES_RESTANTS' ; 'MESS' ' ' ; *----------------------------------------------------------------------- * - GLISSEMENT, CISAILLEMENT, PRESSION DE CONTACT ET ENERGIE DISSIPEE *----------------------------------------------------------------------- USCALC T1 ; *----------------------------------------------------------------------- * - APPLICATION DU PROFIL D'USURE *----------------------------------------------------------------------- 'SI' AppUsure ; * -------------------------------------------------------------------- * Schema (explicite/implicite) pour appliquer le profil d'usure 'SI' BOITE_US.'INFOS'.'SCH_EXPL'; USEXPL T1 ; 'SINON' ; USIMPL T1 ; 'FINSI' ; * -------------------------------------------------------------------- * Reste-t-il des cycles a calculer (Booleen pour quitter PASAPAS) T1.'ARRET' = 'EGA' BOITE_US.'INFOS'.'NB_CYCLES_RESTANTS' 0 ; * -------------------------------------------------------------------- * Construire et actualiser (eventuellement) les pas de temps 'SI' BOITE_US.'INFOS'.'CALCUL_PAS' ; USTMPS T1 ; ISAUV = VRAI ; 'SINON' ; 'FINSI' ; * -------------------------------------------------------------------- 'SI' ISAUV ; * NSOR+1 car la sauvegarde s'effectue apres (on anticipe le numero) IProc = IndPas + 1 ; BOITE_US.'POST'.'INDICES_CYCLE'. CycActu = BOITE_US.'POST'.'INDICES_CYCLE'. CycActu 'ET' IProc ; 'FINSI' ; * -------------------------------------------------------------------- 'SI' T1.'ARRET' ; 'SINON' ; * Actualiser le compteur de cycle 'SI' (BOITE_US.'INFOS'.'SCH_EXPL' 'OU' BOITE_US.'INFOS'.'SCH_CONV') ; CycSuiv = CycActu '+' 1 ; BOITE_US.'INFOS'.'INDICE_CYCLE_ACTUEL' = CycSuiv ; * Le dernier instant de CycActu est le premier instant de CycSuiv 'SI' ISAUV ; 'FINSI' ; 'FINSI' ; 'FINSI' ; * -------------------------------------------------------------------- * Affichage du temps de calcul CyclTime = 'FLOT' RunTimeE '/' 1000. ; RunTimeF = RunTimeP '+' CyclTime ; T1.'RUN_TIME' = T1.'RUN_TIME' 'ET' RunTimeF ; T1.'CYCLE_TIME' = T1.'CYCLE_TIME' 'ET' CyclTime; 'SINON' ; RunTimeF = CyclTime ; 'FINSI' ; HH = 'ENTI' 'INFE' (CyclTime '/' 3600.) ; HC = HH '*' 3600. ; MM = 'ENTI' 'INFE' ((CyclTime '-' HC) '/' 60) ; MC = MM '*' 60. ; SS = 'ENTI' 'PROC' (CyclTime '-' HC '-' MC) ; HH = 'ENTI' 'INFE' (RunTimeF '/' 3600.) ; HC = HH '*' 3600. ; MM = 'ENTI' 'INFE' ((RunTimeF '-' HC) '/' 60) ; MC = MM '*' 60. ; SS = 'ENTI' 'PROC' (RunTimeF '-' HC '-' MC) ; 'FINSI' ; *----------------------------------------------------------------------- 'FINP' T1;
© Cast3M 2003 - Tous droits réservés.
Mentions légales