Ajouter des pauses

Discussions concernant le module FAO de QCAD (Fabrication assistée par Ordinateur)

Moderators: andrew, J-J

Forum rules

Indiquez toujours votre système d'exploitation et votre version de QCAD/CAM.

Indiquez le post processeur utilisé.

Joignez les fichiers de dessin et les captures d'écran.

Postez une question par sujet.

Post Reply
Bran
Newbie Member
Posts: 5
Joined: Mon Jul 07, 2025 8:59 am

Ajouter des pauses

Post by Bran » Mon Jul 07, 2025 9:04 am

Bonjour,

Je souhaite pouvoir ajouter des fonctions personnalisées (type M104 K2) à la fin de certains segments G1 ou arcs G2 / G3 .
Quelqu'un aurait-il une idée de comment faire cela?

Merci pour votre aide.


QCAD/CAM Version : 3.32.3.0 (3.32.3)

User avatar
andrew
Site Admin
Posts: 8766
Joined: Fri Mar 30, 2007 6:07 am

Re: Ajouter des pauses

Post by andrew » Mon Jul 07, 2025 9:50 am

Bonjour,

Veuillez nous indiquer quel post processeur vous utilisez actuellement, afin que nous puissions vous aider efficacement. Veuillez également vous référer aux règles du forum en rouge en haut de cette page, merci.

Bran
Newbie Member
Posts: 5
Joined: Mon Jul 07, 2025 8:59 am

Re: Ajouter des pauses

Post by Bran » Mon Jul 07, 2025 11:11 am

Effectivement, ma demande n'était pas très claire.

Windows 11 pro.
postpro : G-Code (offset)

Ci-joint le fichier dxf qui me sert de teste et le fichier nc que je souhaiterai avoir.

Dans cet exemple, je voudrait pouvoir rajouter deux temporisations (mon fameux code M104) avec leurs valeurs (respectivement 2s et 1s dans mon exemple).

Je vois bien dans le postpro comment supprimer les choses qui ne m'interessent pas (tout ce qui est Z , demarrage broche, etc...), mais c'est pour ajouter un bouton ou quelque chose pour mes M104 que je sêche.

J'ai essayé d'ajouter l'UI qui est donner dans ce post https://qcad.org/rsforum/viewtopic.php? ... ause#p7907, mais ce n'est pas à chaque contour que je veux mettre ma commande, mais c'est vraiment au cas par cas.


Pour donner un peu plus de détails sur mon application, c'est de la découpe de pierre avec un cable diamanté.
Le cable étant un outil souple, il prend de la flêche lors de la coupe et il faut qu'il redeviennent droit avant de partir dans un autre direction.
Les temporisations sont donc à définir par le dessinateur en fonction de la distance que le cable à parcouru, de la dureté de la pierre, etc..
Attachments
test.png
test.png (42.81 KiB) Viewed 21596 times
test.nc
(119 Bytes) Downloaded 186 times
test.dxf
(107 KiB) Downloaded 208 times

CVH
Premier Member
Posts: 4874
Joined: Wed Sep 27, 2017 4:17 pm

Re: Ajouter des pauses

Post by CVH » Mon Jul 07, 2025 11:00 pm

Je ne sais pas si Andrew a répondu par message privé.

Le lien indiqué fait référence à une implémentation FAO dans QCAD 3.4.0 (23/10/2013).
L'implémentation FAO actuelle fonctionne différemment. (CamExporter vs CamExporterV2)

Par exemple, le fraisage initial se fait en descendant directement.
J'ai lu dans le sujet qu'une descente en pente était possible auparavant.
Une fonctionnalité qui me manque dans la version actuelle.
C'est tout simplement plus doux pour votre outil de fraisage


Pouvez-vous confirmer que le fait de ne pas s'arrêter au premier coin extérieur (gauche) ...
... et au coin intérieur les coupe est de manière plutôt arbitraire ?

Ne serait-il pas plus approprié de s’arrêter à chaque coin explicite du chemin de coupe ?
A pris une certaine configurabilité

sallution,
CVH

Bran
Newbie Member
Posts: 5
Joined: Mon Jul 07, 2025 8:59 am

Re: Ajouter des pauses

Post by Bran » Wed Jul 09, 2025 8:24 am

Merci pour ta réponse.

Il faudrait pouvoir vraiment choisir où faire les pauses.
En effet, si les deux segments sont à peu près sur le même angle, il ne faut pas faire de pause. (exemple 1)
En plus, il dois y avoir deux valeurs de pause différentes suivant si c'est un angles "extérieur" ou "interieur".
Quand le câble s'arrête sur le point rouge (exemple 2), il peut rester là sans abimer la pièce. Par contre, sur le point vert, s'il reste trop longtemps et se met à vibrer, il va abimer la pièce.

J'ai penser à ajouter une propriété "Custom" dans les lignes ou arcs où je veux des pauses, mais je ne sais pas si c'est possible de récupérer cette infos dans le postprocesseur...

Je mets une photo d'une machine pour mieux visualiser le type de machine que j'utilise.
Attachments
3146-202208121720575495.png
3146-202208121720575495.png (924.3 KiB) Viewed 21415 times
Capture d'écran 2025-07-09 092056.png
custom property
Capture d'écran 2025-07-09 092056.png (23.79 KiB) Viewed 21415 times
Capture d'écran 2025-07-09 090840.png
exemple 2
Capture d'écran 2025-07-09 090840.png (8.9 KiB) Viewed 21415 times
Capture d'écran 2025-07-09 090753.png
exemple 1
Capture d'écran 2025-07-09 090753.png (8.9 KiB) Viewed 21415 times

CVH
Premier Member
Posts: 4874
Joined: Wed Sep 27, 2017 4:17 pm

Re: Ajouter des pauses

Post by CVH » Thu Jul 10, 2025 5:52 am

Bonjour,

Concernant les pauses nécessaires, nous sommes sur la même niveau.
Votre configuration doit être vue davantage comme un laser, remplaçant la lumière par un fil de diamant.
La traversée est un autre problème, uniquement réalisé en dehors du matériau.
Pour un laser, on peut couper l'alimentation et repositionner.
On ne peut pas couper le fil. :wink:
En général, un mouvement d'entrée n'est pas coupant, mais ici, il coupe toujours.


Le processus CAO/FAO Q est en deux étapes.

Un parcours d'outil est d'abord généré à partir de la source.
Il est stocké sous forme d'entités FAO.

Dans un deuxième temps, ces entités FAO sont exportées sous forme de code G.

Les propriétés personnalisées des entités sources ne sont pas transférées aux entités FAO.
Tout simplement parce que cette instruction est exclue dans la code.

Les propriétés personnalisées ne sont donc pas incluses et l'exportation en code G ne peut pas agir sur ces informations.
Mais il doit y avoir des moyens de surmonter cela.

Je suis en train d'examiner cela.

Salutions,
CVH

Bran
Newbie Member
Posts: 5
Joined: Mon Jul 07, 2025 8:59 am

Re: Ajouter des pauses

Post by Bran » Thu Jul 10, 2025 2:34 pm

En général, un mouvement d'entrée n'est pas coupant, mais ici, il coupe toujours.
Effectivement!
D'ailleurs, je remlpace tous les G0 par des G1 pour éviter les mouvements rapides intempestifs.

Je suis en train d'essayer une solution.
Faire un profil par segment et j'ai ajouté 2 checkbox dans le "CamProfileToolpathDialog" pour sélectionner ou pas une pause dans chaque profil.
Ce n'est pas idéal pour les gros fichiers, ça va être un peu fastidieux, mais ça peut fonctionner quand même.

Par contre, maintenant je suis bloquer avec la fonction "writeContourFooter".
Juste la lancer, même vide, ça fait planter l'écriture.

Ci-joint un petit aperçu de mon postpro.

Code: Select all


include("GCodeBase.js");

function GCodeRBT(documentInterface, camDocumentInterface) {
    GCodeBase.call(this, documentInterface, camDocumentInterface);

	this.debug = true;

	this.decimals = 3;
    this.unit = RS.Millimeter;
	
	// true: always write G1, even if G mode does not change:
	this.alwaysWriteG1 = true;
	
	// Array of file extensions which can be used for the exported file.
    // The user can choose the desired extension when exporting a gile.
    this.fileExtensions = [ "nc"];
	
    this.outputOffsetPath = true;

    // disable all Z moves:
    this.rapidMoveZ = [];
    this.firstLinearMoveZ = [];
    this.linearMoveZ = [];
    this.firstPointMoveZ = [];
    this.pointMoveZ = [];

    
	//Initializes the headers / footers
	this.header = [
		";postprocesseur RBT",
		"[N] G98"
	];
	this.toolHeader = [];
	this.toolFooter = [];
	this.zPassHeader = [];
	this.zPassFooter = [];
	this.footer = [];
		
	// rapid moves:
    this.rapidMove =                 "[N] G1 [X!] [Y!]";
    
	// linear moves:
    this.firstLinearMove =           "[N] G1 [X!] [Y!]";
    this.linearMove =                "[N] G1 [X!] [Y!]";
	
	// circular moves:
    this.firstArcCWMove =            "[N] G2 [X] [Y] [IA] [JA]";
    this.arcCWMove =                 "[N] G2 [X] [Y] [IA] [JA]";

    this.firstArcCCWMove =           "[N] G3 [X] [Y] [IA] [JA]";
    this.arcCCWMove =                "[N] G3 [X] [Y] [IA] [JA]";
	
 }

GCodeRBT.prototype = new GCodeBase();
GCodeRBT.displayName = "G-Code RBT";

GCodeRBT.prototype.writeContourFooter = function(filename) {
	
    this.contourFooter = [];
	
	if (this.getToolpathOption("CamPause1", 0) == 1) {
       this.contourFooter.push("[N] M104 K1");
	}	
	
	if (this.getToolpathOption("CamPause2", 0) == 1) {
       this.contourFooter.push("[N] M104 K2");
	}	
  
    GCodeRBT.prototype.writeContourFooter.call(this,filename);
};

// don't change this.lastMoveGCode for Z moves:
GCodeRBT.prototype.writeFirstLinearMoveZ = function() {};
GCodeRBT.prototype.writeLinearMoveZ = function() {};
GCodeRBT.prototype.writeFirstPointMoveZ = function() {};
GCodeRBT.prototype.writePointMoveZ = function() {};

GCodeRBT.prototype.getToolTypeTitle = function(toolType) {
    if (isString(toolType)) {
        toolType = parseInt(toolType);
    }

    switch (toolType) {
    case Cam.ToolType.Mill:
        return qsTr("Câble");
    default:
        return undefined;
    }
};

//GCodeRBT.prototype.postInitDialog = function(obj, dialog, di, block) {
	GCodeRBT.prototype.initDialog = function(dialog, di, resourceBlock) {
    var w;

    if (dialog.objectName==="CamProfileToolpathDialog") {
		w = dialog.findChild("CamFeedRate_Label");
        w.visible = false;
		w = dialog.findChild("CamFeedRate");
        w.visible = false;
        w = dialog.findChild("CamSpindleSpeed_Label");
        w.visible = false;
        w = dialog.findChild("CamSpindleSpeed");
        w.visible = false;
        w = dialog.findChild("CamSpindleSpeed_Unit");
        w.visible = false;
		w = dialog.findChild("CamPlungeRate_Label");
        w.visible = false;
		w = dialog.findChild("CamPlungeRate");
        w.visible = false;
		w = dialog.findChild("CuttingDepths_Group");
        w.visible = false;
        w = dialog.findChild("Leads_Group");
        w.visible = false;
		
		var layout = dialog.layout();
        var gb = new QGroupBox(qsTr("Pause"));
		layout.addWidget(gb,3,0);
		var layout2 = new QHBoxLayout(gb);
		var pl = new QLabel(qsTr("Pause :"));
		layout2.addWidget(pl,0,0);
        var p = new QCheckBox(qsTr("1"));
		p.objectName = "CamPause1";
		layout2.addWidget(p,0,1);
		var p = new QCheckBox(qsTr("2"));
		p.objectName = "CamPause2";
		layout2.addWidget(p,0,2);			
    }

    if (dialog.objectName==="CamToolDialog") {
        w = dialog.findChild("CamSpindleSpeed");
        w.visible = false;
		w = dialog.findChild("CamSpindleSpeed_Label");
        w.visible = false;
        w = dialog.findChild("CamSpindleSpeed_Unit");
        w.visible = false;
		w = dialog.findChild("CamFeedRate_Label");
        w.visible = false;
		w = dialog.findChild("CamFeedRate");
        w.visible = false;
        w = dialog.findChild("CamPlungeRate_Label");
        w.visible = false;
		w = dialog.findChild("CamPlungeRate");
        w.visible = false;		
    }
};

CVH
Premier Member
Posts: 4874
Joined: Wed Sep 27, 2017 4:17 pm

Re: Ajouter des pauses

Post by CVH » Fri Jul 11, 2025 9:42 am

Bonjour,
Une solution ... Je pense qu'on peut faire mieux que de le découper toutes en segments. :wink:

Votre writeContourFooter remplace l'implémentation standard.

Comme GCodeRBT est basé sur GCodeBase lui-même, basé sur CamExporterV2
... Vous remplacez la fonction standard writeContourFooter de CamExporterV2.

Pour continuer à exporter le bloc de texte, vous appelez ensuite l'implémentation standard.
Dans ce cas, il doit s'agir de l'implémentation GCodeBase ...
... GCodeBase transférera cet appel à CamExporterV2 ...
... Appeler votre propre classe (GCodeRBT) ici est une erreur. :oops:

A remplacer dans la dernière ligne :

Code: Select all

GCodeRBT.prototype.writeContourFooter = function(filename) {

    this.contourFooter = [];

    if (this.getToolpathOption("CamPause1", 0) == 1) {
        this.contourFooter.push("[N] M104 K1");
    }

    if (this.getToolpathOption("CamPause2", 0) == 1) {
        this.contourFooter.push("[N] M104 K2");
    }

    GCodeBase.prototype.writeContourFooter.call(this, filename);
};
Salution,
CVH
Last edited by CVH on Mon Jul 14, 2025 3:12 am, edited 1 time in total.

CVH
Premier Member
Posts: 4874
Joined: Wed Sep 27, 2017 4:17 pm

Re: Ajouter des pauses

Post by CVH » Sat Jul 12, 2025 3:21 am

Exporter un segment par chemin n'est pas vraiment une solution.
Nous nous attendons à ce que le chemin contourne le coin en formant un arc (Vert).
Mais il traverse (Bleu) du chemin 1 (segment 1) directement au chemin 2 (segment 2), tandis qu'un G0 est converti en G1.
Avec un fil rond comme outil, il biseautera le coin (rouge).

Trial_GCodeRBT_1.png
Trial_GCodeRBT_1.png (2.84 KiB) Viewed 20299 times

Les 2 pauses sont incluses aux position des cercle Cyan avec le correctif pour writeContourFooter:
Notez qu'il n'y a pas d'instruction F dans l'exportation.

Code: Select all

;postprocesseur RBT
N10 G98
N20 G1 X7.5 Y0;      Entry move (Outside view))
N30 G1 X7.5 Y40;     Vertical cut upwards (Dashed)
N40 M104 K1;         Pause1
N50 G1 X10 Y42.5;    Traversing (Blue)
N60 G1 X30 Y42.5;    Horizontal cut to right (Dashed)
N70 M104 K2;         Pause2


Étant donné que le fil traîne toujours par rapport au chemin prévu, ...
... même le arc vert (180 vers 90°) est problématique car il décélère dans le mouvement vertical et accélère dans le mouvement horizontal.
Le véritable chemin du fil ressemblera davantage à une parabole.
Ou bien la vitesse d'avance F de l'arc doit être vraiment faible.

Salution,
CVH

Bran
Newbie Member
Posts: 5
Joined: Mon Jul 07, 2025 8:59 am

Re: Ajouter des pauses

Post by Bran » Mon Aug 11, 2025 12:46 pm

Bonjour,

De retour de vacances...
Et effectivement, en appelant GCodeBase ça marche !

Je contourne le problème des angles arrondis en utilisant la fonction "offset" de l'outil polyligne pour décaler le dessin de la taille de mon outil et ensuite sur le parcours, j'utilise le côté "sur" au lieu de "externe".

Merci pour ton aide, j'aurais vraiment eu du mal à trouver tout seul.

Post Reply

Return to “QCAD/CAM”