//return true si doit continer bool m_usiner(c_InfoCode v_info) { c_usiner.AxeX.Next = v_info.v_nextX; c_usiner.AxeY.Next = v_info.v_nextY; c_usiner.vs_pourCentCodeEnCours = 0; c_usiner.m_appelerDelegate(c_usiner.c_eventArgUsiner.enumEventsUsinage.mettreAJourCoordNext); while (c_usiner.vs_PauseUsinage) { Application.DoEvents(); } if (c_usiner.vs_ArreterUsinage) { return false; } Controlleur.m_initialise_X_Y(); double v_deltaX = v_info.v_nbrPasX * c_usiner.AxeX.AvanceParPas, v_deltaY = v_info.v_nbrPasY * c_usiner.AxeY.AvanceParPas, v_avanceMini = 0; v_paramDecel = (formMain.v_paramPortParallele.v_acceleration * (c_usiner.vs_vitesseAvance - formMain.v_paramPortParallele.v_vitesseMini)) / 5; if (v_info.v_acceleration) //|| (v_info.v_deceleration) || (v_finBlocCirculaire)) { v_accel = c_usiner.vs_vitesseAvance - formMain.v_paramPortParallele.v_vitesseMini; } if (v_info.v_liste == null) #region 1 seul AXE { if (v_info.v_nbrPasX > 0) { for (int i = 0; i < v_info.v_nbrPasX; i++) { while (c_usiner.vs_PauseUsinage) { Application.DoEvents(); } if (c_usiner.vs_ArreterUsinage) { return false; } v_accel = m_accel_decel(ref v_info, v_info.v_nbrPasX, v_accel, i); m_envoieCommande("X", v_accel); c_usiner.AxeX.Actuel += c_usiner.AxeX.AvanceParPas * v_sensX; c_usiner.vs_distanceUsinee += c_usiner.DISTANCE_X; //v_nbrInstructions++; v_deltaX -= c_usiner.AxeX.AvanceParPas; c_usiner.vs_ResteAUsiner = new System.Drawing.Point((c_usiner.AxeX.Next - c_usiner.AxeX.Actuel) / 1000, (c_usiner.AxeY.Next - c_usiner.AxeY.Actuel) / 1000); try { c_usiner.vs_pourCentCodeEnCours = ((int)(c_usiner.vs_distanceUsinee - v_lastDistUsinee) * 100) / v_distBloc; } catch { } //Application.DoEvents(); } } else { for (int i = 0; i < v_info.v_nbrPasY; i++) { while (c_usiner.vs_PauseUsinage) { Application.DoEvents(); } if (c_usiner.vs_ArreterUsinage) { return false; } v_accel = m_accel_decel(ref v_info, v_info.v_nbrPasY, v_accel, i); m_envoieCommande("Y", v_accel); c_usiner.AxeY.Actuel += c_usiner.AxeY.AvanceParPas * v_sensY; c_usiner.vs_distanceUsinee += c_usiner.DISTANCE_X; //v_nbrInstructions++; v_deltaY -= c_usiner.AxeY.AvanceParPas; c_usiner.vs_ResteAUsiner = new System.Drawing.Point((c_usiner.AxeX.Next - c_usiner.AxeX.Actuel) / 1000, (c_usiner.AxeY.Next - c_usiner.AxeY.Actuel) / 1000); try { c_usiner.vs_pourCentCodeEnCours = ((int)(c_usiner.vs_distanceUsinee - v_lastDistUsinee) * 100) / v_distBloc; } catch { } //Application.DoEvents(); } } m_testerPas(v_info.v_nbrPasX, v_info.v_nbrPasY); } #endregion else #region 2 AXES { string v_axe = ""; int v_index = 0; foreach (byte v_byte in v_info.v_liste) { while (v_index < 4) { while (c_usiner.vs_PauseUsinage) { Application.DoEvents(); } if (c_usiner.vs_ArreterUsinage) { return false; } v_axe = v_byte.m_trouverXY(v_index); //usiner v_axe v_accel = m_accel_decel(ref v_info, v_info.v_liste.Count * 4, v_accel, i); m_envoieCommande(v_axe, v_accel); //MAJ coordonnées if (v_axe.Contains('X')) { c_usiner.AxeX.Actuel += (c_usiner.AxeX.AvanceParPas * v_sensX); } if (v_axe.Contains('Y')) { c_usiner.AxeY.Actuel += (c_usiner.AxeY.AvanceParPas * v_sensY); } if (v_axe == "XY") { c_usiner.vs_distanceUsinee += c_usiner.DISTANCE_XY; } else { c_usiner.vs_distanceUsinee += c_usiner.DISTANCE_X; } c_usiner.vs_ResteAUsiner = new System.Drawing.Point((c_usiner.AxeX.Next - c_usiner.AxeX.Actuel) / 1000, (c_usiner.AxeY.Next - c_usiner.AxeY.Actuel) / 1000); c_usiner.vs_pourCentCodeEnCours = ((int)(c_usiner.vs_distanceUsinee - v_lastDistUsinee) * 100) / v_distBloc; Application.DoEvents(); v_index++; i++; } v_index = 0; } /* double v_delta = 0; int i = 0; if (v_info.v_nbrPasX > v_info.v_nbrPasY) { #region deltaX>deltaY v_delta = (double)c_usiner.AxeX.AvanceParPas * v_info.v_rapportXY; while (v_deltaX > 0) { while (c_usiner.vs_PauseUsinage) { Application.DoEvents(); } if (c_usiner.vs_ArreterUsinage) { return false; } v_accel = m_accel_decel(ref v_info, v_info.v_nbrPasX, v_accel, i); if (v_avanceMini < c_usiner.AxeY.AvanceParPas) { //avancer X seul m_envoieCommande("X", v_accel); v_avanceMini += v_delta; c_usiner.vs_distanceUsinee += c_usiner.DISTANCE_X; } else { //avance X et Y m_envoieCommande("XY", v_accel); v_deltaY -= c_usiner.AxeY.AvanceParPas; v_avanceMini += v_delta - (double)c_usiner.AxeX.AvanceParPas; c_usiner.AxeY.Actuel += (c_usiner.AxeY.AvanceParPas * v_sensY); c_usiner.vs_distanceUsinee += c_usiner.DISTANCE_XY; } v_deltaX -= c_usiner.AxeX.AvanceParPas; c_usiner.AxeX.Actuel += (c_usiner.AxeX.AvanceParPas * v_sensX); c_usiner.vs_ResteAUsiner = new System.Drawing.Point((c_usiner.AxeX.Next - c_usiner.AxeX.Actuel) / 1000, (c_usiner.AxeY.Next - c_usiner.AxeY.Actuel) / 1000); c_usiner.vs_pourCentCodeEnCours = ((int)(c_usiner.vs_distanceUsinee - v_lastDistUsinee) * 100) / v_distBloc; Application.DoEvents(); i++; } while (v_deltaY > 0) { m_envoieCommande("Y", v_accel); v_deltaY -= c_usiner.AxeY.AvanceParPas; c_usiner.AxeY.Actuel += (c_usiner.AxeY.AvanceParPas * v_sensY); } c_usiner.vs_ResteAUsiner = new System.Drawing.Point((c_usiner.AxeX.Next - c_usiner.AxeX.Actuel) / 1000, (c_usiner.AxeY.Next - c_usiner.AxeY.Actuel) / 1000); c_usiner.vs_pourCentCodeEnCours = ((int)(c_usiner.vs_distanceUsinee - v_lastDistUsinee) * 100) / v_distBloc; Application.DoEvents(); #endregion } else { #region deltaX<deltaY v_delta = (double)c_usiner.AxeY.AvanceParPas * v_info.v_rapportXY; while (v_deltaY > 0) { while (c_usiner.vs_PauseUsinage) { Application.DoEvents(); } if (c_usiner.vs_ArreterUsinage) { return false; } v_accel = m_accel_decel(ref v_info, v_info.v_nbrPasY, v_accel, i); if (v_avanceMini < c_usiner.AxeY.AvanceParPas) { //avancer X seul m_envoieCommande("Y", v_accel); v_avanceMini += v_delta; c_usiner.vs_distanceUsinee += c_usiner.DISTANCE_X; } else { //avance X et Y m_envoieCommande("XY", v_accel); v_deltaX -= c_usiner.AxeY.AvanceParPas; v_avanceMini += v_delta - (double)c_usiner.AxeY.AvanceParPas; c_usiner.AxeX.Actuel += (c_usiner.AxeX.AvanceParPas * v_sensX); c_usiner.vs_distanceUsinee += c_usiner.DISTANCE_XY; } v_deltaY -= c_usiner.AxeY.AvanceParPas; c_usiner.AxeY.Actuel += (c_usiner.AxeY.AvanceParPas * v_sensY); c_usiner.vs_ResteAUsiner = new System.Drawing.Point((c_usiner.AxeX.Next - c_usiner.AxeX.Actuel) / 1000, (c_usiner.AxeY.Next - c_usiner.AxeY.Actuel) / 1000); //v_nbrInstructions++; c_usiner.vs_pourCentCodeEnCours = ((int)(c_usiner.vs_distanceUsinee - v_lastDistUsinee) * 100) / v_distBloc; //Application.DoEvents(); i++; } while (v_deltaX > 0) { m_envoieCommande("X", v_accel); v_deltaX -= c_usiner.AxeX.AvanceParPas; c_usiner.AxeX.Actuel += (c_usiner.AxeX.AvanceParPas * v_sensX); } c_usiner.vs_ResteAUsiner = new System.Drawing.Point((c_usiner.AxeX.Next - c_usiner.AxeX.Actuel) / 1000, (c_usiner.AxeY.Next - c_usiner.AxeY.Actuel) / 1000); c_usiner.vs_pourCentCodeEnCours = ((int)(c_usiner.vs_distanceUsinee - v_lastDistUsinee) * 100) / v_distBloc; Application.DoEvents(); #endregion } m_testerPas(v_info.v_nbrPasX, v_info.v_nbrPasY); * */ } #endregion if (v_info.v_deceleration) // pour cumul dans usinage circulaire { v_lastDistUsinee = (int)c_usiner.vs_distanceUsinee; v_finBlocCirculaire = false; i = 0; } else { v_finBlocCirculaire = ((v_distBloc - (c_usiner.vs_distanceUsinee - v_lastDistUsinee)) < v_paramDecel * c_usiner.DISTANCE_XY); } return true; }
int m_accel_decel(ref c_InfoCode v_info, int nbrPas, int v_accel, int i) { //gere accel et decel if ((v_info.v_acceleration) | (!v_info.v_acceleration & !v_info.v_deceleration & !v_finBlocCirculaire & v_accel != 0)) { if (i % formMain.v_paramPortParallele.v_acceleration == formMain.v_paramPortParallele.v_acceleration - 1) { v_accel -= 5; } v_info.v_acceleration = (v_accel > 0); } if (((v_info.v_deceleration) && (nbrPas - i < v_paramDecel)) || (v_finBlocCirculaire)) { if (i % formMain.v_paramPortParallele.v_acceleration == formMain.v_paramPortParallele.v_acceleration - 1) { v_accel += 5; if (v_accel > c_usiner.vs_vitesseAvance - formMain.v_paramPortParallele.v_vitesseMini) { v_accel = c_usiner.vs_vitesseAvance - formMain.v_paramPortParallele.v_vitesseMini; } } } return v_accel; }
void m_traiteLigne(c_InfoCode v_Info) { switch (v_Info.v_ident) { case Ident.STOP: m_lArretSurZ("STOP"); c_usiner.vs_indexLigne++; break; case Ident.NOP: c_usiner.vs_indexLigne++; break; case Ident.PasAPas://debut de bloc if (c_usiner.vs_PasAPas) { m_lArretSurZ("Pas à Pas"); }; v_distBloc = v_Info.v_distanceBloc; break; case Ident.arretSurZ: if (c_usiner.vs_ArretSurZ) { m_lArretSurZ("Arret sur Z"); }; c_usiner.AxeZ.Actuel = v_Info.v_posZ; if (v_Info.v_avancerLigneTraduite) { c_usiner.vs_indexLigneCodeTraduit++; } break; case Ident.changeSens: m_setSens(v_Info.v_Axe, v_Info.v_nbrPas, v_Info.v_sensX, v_Info.v_sensY); //pour eviter decalage c_usiner.vs_indexLigneCodeTraduit--; break; case Ident.FinBloc: c_usiner.vs_indexLigne++; break; case Ident.DiamOutil: c_usiner.vs_diametreOutil = v_Info.v_diamOutil; c_usiner.m_appelerDelegate(c_usiner.c_eventArgUsiner.enumEventsUsinage.modifDiamOutil); c_usiner.vs_indexLigne++; break; case Ident.ModifVitesse: formMain.vs_infoUsinage.v_vitesseAvancePercent = v_Info.v_modifVitesse; c_usiner.m_appelerDelegate(c_usiner.c_eventArgUsiner.enumEventsUsinage.vitesseAvanceModifie); c_usiner.vs_indexLigne++; break; case Ident.usiner: m_usiner(v_Info); break; case Ident.SansAvanceLigneTraduite: break; } if (v_Info.v_ident != Ident.arretSurZ) { c_usiner.vs_indexLigneCodeTraduit++; } c_usiner.m_appelerDelegate(c_usiner.c_eventArgUsiner.enumEventsUsinage.gBarBuffer); c_usiner.m_appelerDelegate(c_usiner.c_eventArgUsiner.enumEventsUsinage.incrementerLBoxFichier); //Application.DoEvents(); }