besoin d'aide correction macro

  • Auteur de la discussion PL50
  • Date de début
P

PL50

Compagnon
salut,
sur mon Hurco milltronics que j'ai rétrofité avec un controleur CS-Lab CSMIO-IP step -dir, j'ai un changeur d'outils rotatif 20 postes
quand je lance un changement d'outil, j'ai régulièrement un ARU avec ce message:
1701118670589-png.png



ma machine etant en step dir, je ne vois pas comment je peux avoir une erreur de PID...
quand ça fonctionne, je peux faire autant de changements que je veux.
si j'ai cette erreur, je n'ai plus qu'à redémarrer mach3, voir le PC.
et bien souvent ça ne marche toujours pas.

parfois je retrouve ce message caché derrière mach3 après l'avoir arrèté:
1701118821480-png.png


je vous mets ma macro en PJ; en fait, c'est celle de vince007 à laquelle j'ai ajouté les retours capteurs car lui ne faisait que piloter, mais n'attendait pas d'info fin de course.
bref, étant une brèle en programmation j'ai bidouillé en comparant plusieurs marcos et ça a fini par marcher.

j'ai contacté le service d'assistance de CS-Lab a qui j'ai expliqué le topo, et voici sa réponse:

This is an error code whose meaning is known only to Art-Soft and is always related to a malfunction of macros.
This error is often caused by a lack of delay in the While loop.
Look in your macro line 120.
the lack of delay in the While loop causes computer overload.
In turn, overloading the computer means that Mach3 cannot keep up with generating the movement trajectory, which causes jerky movement of the axis.
In turn, jerky movement of the axis causes an E-PID error.
And all this because one line is missing Sleep(15)


voila ce qu'il y a dans la zone de la ligne 120:
1701194820395.png


est ce que cela signifie que je devrais copier ce qui est fait ici?:
1701194917380.png


en faisant ceci?:
1701195004251.png


thanks for your help !
 

Fichiers joints

  • M6Start.txt
    6.2 KB · Affichages: 14
A

asjt

Apprenti
Bon, j'y connais rien en mach3, mais en programmation de manière générale si tu fais un while bloquant qui vérifie l'état d'une variable, tu met un sleep pour pas surcharger le processeur.

Du coup, la solution que tu proposes à l'air correcte. À essayer. Apparemment, d'après la réponse de la ar-soft, tu pourrais mettre sleep(15) au lieu de sleep(50)
 
P

PL50

Compagnon
Bon, j'y connais rien en mach3, mais en programmation de manière générale si tu fais un while bloquant qui vérifie l'état d'une variable, tu met un sleep pour pas surcharger le processeur.

Du coup, la solution que tu proposes à l'air correcte. À essayer. Apparemment, d'après la réponse de la ar-soft, tu pourrais mettre sleep(15) au lieu de sleep(50)
Oui, j'ai mis sleep(15) dans ma suggestion.
 
Dernière édition:
P

PL50

Compagnon
bon j'ai fait l'essai, j'ai ajouté le Sleep(15), ça marche pas
j'ai essayé avec 50 et 500, même résultat.

j'ai l'impression que c'est le tout début de la macro qui provoque le bloquage
est ce que quelqu'un peut la lire et me dire s'il voit quelque chose de critique?
avant même l'indexation de broche.

merci

a+
 
D

dh42

Compagnon
Salut

Je ne vois rien de particulier dans cette macro en dehors des sleep() dont tu parles plus haut.

Sans certitude, mais parfois les activate et deactivate signal prennent un certain temps a s'effectuer, peut être serait t'il bon de mettre un sleep(100) après les lignes 155 et 181 ..

++
David
 
P

PL50

Compagnon
Salut

Je ne vois rien de particulier dans cette macro en dehors des sleep() dont tu parles plus haut.

Sans certitude, mais parfois les activate et deactivate signal prennent un certain temps a s'effectuer, peut être serait t'il bon de mettre un sleep(100) après les lignes 155 et 181 ..

++
David
je vais essayer ça et si ça ne marche pas je vais essayer de refaire la config complète de la machine sur un autre PC
c'est vraiment prise de tête cette histoire.
toute la machine fonctionne nickel, il y a juste ça qui fonctionne quand ça veut...

un détail qui me revient à l'esprit.
j'ai configuré un deuxième PC avec la version 066 écrasée par la version 022
sur ce pc, quand ça fonctionne, au premier changement d'outil, la machine commence par laisser tomber le cone qui est dans la broche la première fois, et ensuite tout est ok, ça fonctionne.
sur le PC de la machine qui est en 066 je n'ai jamais eu ça...

étonnant, non?
 
D

dh42

Compagnon
Pour ma part j'ai eu pas mal de problème de fonctionnement des macro avec la 066 ... même des trucs très basiques comme ma macro de palpage ne se terminait pas toujours, et pas de message d'erreur, elle restait simplement plantée en cours de route, même chose avec les référencements ou le démarrage de la broche .... je l'ai rapidement virée ! (actuellement j'utilise l'avant dernière version, 3.043.062)

la 066 n'est même pas listée dans le changelog de Mach3 !!! ça s'arrête à la 062

ce que tu peux essayer de faire, c'est de mettre des lignes Message() pour essayer de voir à partir d’où ça se met à déconner dans le code

et si tu veux un arrêt à chaque message, tu peux utiliser la fonction MsgBox() (c'est une fonction du basic, pas une fonction spécifique mach3) elle mettra une boite de dialogue avec le message, et un bouton OK qui permettra de continuer le code. La fonction Message de Mach3 n'est pas toujours facile à interpréter car les messages ne s'affichent pas forcément au bon moment, voir ils s'affiche trop vite et tu n'as pas le temps de voir ce qui s'est passé.

par exemple:

MsgBox("ligne 100") t'affichera le texte Ligne100 dans une fenêtre popup et ça te permettra de savoir si ton code est arrivé jusqu'à cette instruction.

++
David
 
P

PL50

Compagnon
Pour ma part j'ai eu pas mal de problème de fonctionnement des macro avec la 066 ... même des trucs très basiques comme ma macro de palpage ne se terminait pas toujours, et pas de message d'erreur, elle restait simplement plantée en cours de route, même chose avec les référencements ou le démarrage de la broche .... je l'ai rapidement virée ! (actuellement j'utilise l'avant dernière version, 3.043.062)

la 066 n'est même pas listée dans le changelog de Mach3 !!! ça s'arrête à la 062

ce que tu peux essayer de faire, c'est de mettre des lignes Message() pour essayer de voir à partir d’où ça se met à déconner dans le code

et si tu veux un arrêt à chaque message, tu peux utiliser la fonction MsgBox() (c'est une fonction du basic, pas une fonction spécifique mach3) elle mettra une boite de dialogue avec le message, et un bouton OK qui permettra de continuer le code. La fonction Message de Mach3 n'est pas toujours facile à interpréter car les messages ne s'affichent pas forcément au bon moment, voir ils s'affiche trop vite et tu n'as pas le temps de voir ce qui s'est passé.

par exemple:

MsgBox("ligne 100") t'affichera le texte Ligne100 dans une fenêtre popup et ça te permettra de savoir si ton code est arrivé jusqu'à cette instruction.

++
David
Merci David.
Sur le site de cs lab ils préconisent la 022 qui est selon eux la plus stable et la plus compatible.
Je vais donc refaire une installation complète en 022 sur mon PC bis et re-rentrer tous les paramètres à la mano pour voir si ça change qqchose.
Je fais ça ce soir.

A+

Patrick
 
P

PL50

Compagnon
bon, j'ai fait une réinstal complète de la 62 sur mon PC bis, et je me suis retapé tout le paramétrage à la mano par recopie de sur le PC de la console.
bilan, tout fonctionne; la macro de palpage est OK.... sauf la macro de l'ATC.... résultat idem.
du coup j'essaie de passer le Sleep(15) à (50) et depuis tous les essais que j'ai faits ont été ok.

j'en ai un peu plein le c.. de cette histoire, je me remet sur mon 4ème axe, et ensuite je remet le nez dedans dans la foulée, pour voir si ça fonctionne réellement de manière pérenne et stable.

merci de ton aide @dh42
(David ! ! ! !)

a+

Patrick
 
D

dh42

Compagnon
Salut,

Oui, pour les sleep() ce ne m'étonne pas ; sur des macros que j'ai faite pour d'autres personnes, ça fonctionnait toujours bien en simu mais il fallait souvent ajuster les sleep() pour que ça passe correctement sur la machine suivant la puissance du PC et la réactivité de la carte, voir même ajouter des tests en plus pour être sûr que le soft et la carte avaient bien eu le temps de faire ce qui était demandé. Tout est lié au temps de réponse du PC, de la transmission des données vers la carte, du temps que prend la carte à agir et du temps qu'elle met à répondre à Mach3.

En général, mettre des sleep() un peu long n'est pas préjudiciable, sauf pour la productivité alors que des sleep() trop courts peuvent poser problème. En général je ne met pas de sleep() de moins de 100 ms quand on doit attendre qu'une sortie soit activée/désactivé, voir même je fais une boucle d'attente qui teste si la sortie à bien changé d'état.

Les sleep() courts, on peut les mettre dans les boucles comme le While/Wend des IsMoving car ça ne sert qu'à décharger le CPU, ça n'a pas d'incidence sur le fonctionnement de la macro elle même, sauf s'il n'y en a pas, dans ce cas ça peut bloquer le multithreading et comme les scripts Mach3 utilisent 2 threads en // (un pour les commandes GCode et un pour les commandes Basic) ça peut foutre la pagaille.

Un autre truc que j'avais remarqué, c'est que du pt de vue de la programmation interne de Mach3, les LED sont gérées indépendamment des Entrées/sorties qu'elles représentent ce qui peut créer un petit décalage entre l'allumage d'une LED et l'activation de l'entrée/sortie qu'elle représente, quand c'est possible il vaut mieux baser le tests sur l'E/S elle même que sur l'état de sa LED.

Bon courage pour la suite :wink:

++
David
 
P

PL50

Compagnon
bon finalement j'ai ré installé sur ma machine mach3 version 022 car c'est celle conseillée par Cs Lab comme étant la plus stable.
tout fonctionne.... sauf le changeur d'outils...
j'ai augmenté tous les sleep à 100 au minimum.
rien à faire, j'ai toujours le:
1701118670589-png-png.png


du coup j'essaie de me mettre en changement d'outil manuel:
1703262485614.png


je lance un programme avec des changements d'outils pour voir ce que ça va faire, et là, incroyable :l'ATC fonctionne sauf qu'après chaque changement il me demande d'appuyer sur cycle start pour continuer l'exécution.
je m'attendais à devoir changer les outils à la main????

will turn crazy soon.... very soon....

quelqu'un a une idée?
 
D

dh42

Compagnon
Salut,

Je ne sais pas si ça fonctionnera, mais tu peux tenter de mettre un: DoOemButton(1000) à la fin de ta macro M6start (avant le END), ça simule l'appui sur le bouton "cycle start"

Au fait, tu as quoi dans ton M6end.m1s ...

++
David
 
P

PL50

Compagnon
voila ce qu'il y a dans mon M6 end:

REM The default script here moves the tool back to m6start if any movement has occured during the tool change..

x = GetToolChangeStart( 0 )
y = GetToolChangeStart( 1 )
z = GetToolChangeStart( 2 )
a = GetToolChangeStart( 3 )
b = GetToolChangeStart( 4 )
c = GetToolChangeStart( 5 )
if(IsSafeZ() = 1) Then
SafeZ = GetSafeZ()
if SafeZ > z then StraightTraverse x, y,SafeZ, a, b, c
StraightFeed x, y, z , a, b, c
else
Code"G00 X" & x & "Y" & y
end if

a+
 
P

PL50

Compagnon
@dh42
salut David
bon, ça fonctionne.
par contre je suis confronté à un problème avec les longueurs d'outils.
après chaque changement d'outil, le Z remonte au Z0 en coordonnées machine
si dans la table je mets tous les outils à la même longueur, tout va bien.
si je met des longueurs différentes, le Z remonte bien au Z0 machine, puis part parfois en butée haute.
j'ai l'impression que c'est quand la longueur d'outil est supérieure à celle du précédent, lorsque l'on demande un mouvement en Z immédiatement après le changement d'outil, au lieu d'appliquer la correction de longueur d'outil sur la fin du mouvement, elle l'applique dès le début du mouvement. elle commence donc par vouloir recaler son Z0 en remontant hors course.
dans la macro (en PJ) quand on voit le "desactivate output 7" cela correspond à la refermeture de la trappe du capot de l'ATC et le déverrouillage de l'indexeur de broche. c'est donc juste après que ça se passe.
j'ai l'impression que la longueur de l'outil impacte le Z0 machine???; ou alors ça impacte le Z pièce = au Z0 machine au lieu de s'appliquer à la destination du mouvement....
tu as une idée?

merci

Patrick
 

Fichiers joints

  • M6Start.txt
    6.3 KB · Affichages: 9
P

PL50

Compagnon
je vais faire un essai comme ça
j'ai remis un G91 après pour éviter les malheurs:
1703330846011.png
 
D

dh42

Compagnon
Cool si ça marche.

Des essais que je peut faire en simu, quand je fais un G43H.. seule la valeur de la coordonnée Z courante est modifiée, le 0 machine n'est absolument pas modifiée.

Je ne comprends par contre pas le G43T.... je n'ai vu ça nul part sur la doc de Mach3.

En gros des essais effectués:

T2 > pas d'effet immédiat
M6 > le n° d'outil change (donc passe à 2 dans ce cas)
G43H2 > la valeur du Z courant est diminuée de la valeur de la longueur d'outil, par exemple, mon outil 2 à une longueur de 20 dans la table, ma coord Z courante (qui était à 0) passe à -20 ....

Par contre il y a le G44H, d'après la doc il est utilisé pour les longueurs d'outil négatives.

10.7.14 Tool Length Offsets - G43, G44 and G49

To use a tool length offset, program G43 H~, where the H number is the desired index in the tool table. It is expected that all entries in this table will be positive. The H number should be, but does not have to be, the same as the slot number of the tool currently in the
spindle. It is OK for the H number to be zero; an offset value of zero will be used. Omitting H has the same effect as a zero value.

G44 is provided for compatibility and is used if entries in the table give negative offsets.

It is an error if:
¨ the H number is not an integer, is negative, or is larger than the number of carousel slots.
To use no tool length offset, program G49
It is OK to program using the same offset already in use. It is also OK to program using no tool length offset if none is currently being used.


++
David
 
P

PL50

Compagnon
bon, ma macro fonctionne
par contre il me reste un bug.
quand je démarre la machine, le premier changement d'outil que je demande, ma machine descend au Z safe (la hauteur pour passer au dessus des tirettes dans l'ATC quand il tourne) et laisse tomber le cone.
ensuite elle continue comme si tout était normal, elle fait le changement d'outil....
je peut redemander d'autres changements en MDI ou en programme, aucun problème.
c'est à chaque fois le premier changement suite au démarrage de la machine.
avant, j'étais sur la version 066, je n'ai jamais eu ce problème.
ensuite j'ai fait une instal 062 sur un pc portable, et j'ai découvert ce problème.
maintenant j'ai remplacé 066 sur ma machine par 022 et j'ai le même problème.
en PJ la dernière version de la macro.
la petite rotation que j'ai rajouté après les changements sert à éviter que l'indexeur de broche ne retombe directement dans l'encoche si on enchaine les changements d'outils sans avoir de rotation entre deux. juste une fiabilisation.
pour revenir à cette histoire de chute d'outil, j'ai une suspicion sur cette zone du programme:

' if current tool = 0
If (ToolOld = 0) Then
Code("G90 G0 G53 Z" & Z_SAFE)
WaitForMove
ColletOpen
Sleep(5000)
VerinOn
Sleep(1500)
End If

ça dit que si le numéro de l'outil est égal à zéro, il faut aller au Z safe, et laisser tomber l'outil !
ce qui correspond précisément à ce que j'observe.

si c'est bien ce paragraphe qui pose problème, est ce que ça voudrait dire qu'avant le premier changement d'outil, la machine macro ne saurait plus trop à quel outil elle en est et prendrait la valeur zéro? pourtant la valeur dans la case n° d'outil est bonne dès le démarrage.

j'ai bien envie de supprimer ce paragraphe, je ne comprend pas son intérêt (c'est une macro CS Lab modifiée par Vince007 (qui semble s'être désinscrit du forum))

ou alors rajouter une séquence en début de programme pour que la machine macro se rappelle à quel numéro d'outil elle en est???

comme si ça qui est en tête de macro ne faisait pas son job au démarrage:

' Get the current tool # and new tool #
ToolOld = GetCurrentTool()
ToolNew = GetSelectedTool()

une idée???
je n'ai plus que ça qui merde et ça me prends le chou.
et je n'ai pas trop envie de tout réinstaller en 066 pour voir si ça fonctionne ou pas....

a+
 

Fichiers joints

  • M6Start.txt
    6.5 KB · Affichages: 9
D

dh42

Compagnon
Salut,

Regarde dans la config générale, en bas à droite si "Tool selections persistent" est coché.

si c'est bien ce paragraphe qui pose problème, est ce que ça voudrait dire qu'avant le premier changement d'outil, la machine macro ne saurait plus trop à quel outil elle en est et prendrait la valeur zéro? pourtant la valeur dans la case n° d'outil est bonne dès le démarrage.

C'est ce qu'il semblerait ; pour savoir, tu peux toujours mettre un retour d'info pour savoir ce que vaut ta variable.

juste avant la ligne If (ToolOld = 0) Then

met un: MsgBox(ToolOld)

ça devrait te mettre une boite de message qui affichera la valeur contenue dans ToolOld (et attendra que tu clique sur OK)

++
David
 
P

PL50

Compagnon
C'est ce qu'il semblerait ; pour savoir, tu peux toujours mettre un retour d'info pour savoir ce que vaut ta variable.

juste avant la ligne If (ToolOld = 0) Then

met un: MsgBox(ToolOld)

ça devrait te mettre une boite de message qui affichera la valeur contenue dans ToolOld (et attendra que tu clique sur OK)
Grrr c'est bien ça
la valeur outil qui apparait dans la case est zero
alors que la case tool persistent est bien cochée.... et que ça indiquait tool n°6 au démarrage...
bizarre, comme s'il n'allait pas chercher la valeur au bon endroit???

je vais essayer d'invalider cette partie de la macro pour voir si ça change qqchose.

a+
 
D

dh42

Compagnon
Re

Tu peux tenter de lire directement la valeur dans la visu N° d'outil. Par exemple:

ToolOld = GetOEMDro(824)

edit:

Je viens d'essayer le ToolOld = GetCurrentTool() et chez moi ça fonctionne, il me renvoi bien le bon n° d'outil ; peut être une particularité du plugin du CSMIO ?

++
David
 
Dernière édition:
P

PL50

Compagnon
Je viens d'essayer le ToolOld = GetCurrentTool() et chez moi ça fonctionne, il me renvoi bien le bon n° d'outil ; peut être une particularité du plugin du CSMIO ?
Salut David
chez moi aussi, ça fonctionne, sauf au tout premier changement d'outil !

je vais tester le ToolOld = GetOEMDro(824)

Merci

Patrick
 
P

PL50

Compagnon
yes ! ! ! !
trop fort ce David ! ! !
le ToolOld = GetOEMDro(824) a règlé le problème ! ! !

et le fait d'avoir ajouté les
DoOemButton(1000)
permet au programme de redémarrer tout seul comme je suis en changement d'outils manuels, et j'en ai finalement rajouté un après le tool old = tool new, ça marche bien, ce changement est carrément ignoré dans le cas d'égalité de numéro d'outils.

un grand merci ! ! !

a+

Patrick
 

Sujets similaires

G
Réponses
88
Affichages
12 127
gaston83
G
G
Réponses
1
Affichages
1 365
Greg de Nîmes
G
U
Réponses
85
Affichages
7 277
Hubert86
H
01power
Réponses
3
Affichages
13 865
01power
01power
J
Réponses
1
Affichages
1 485
pro-ms
P
V
Réponses
62
Affichages
5 397
vibram
V
D
Réponses
9
Affichages
3 062
David80
D
taratata
Réponses
1
Affichages
1 455
taratata
taratata
taratata
Réponses
4
Affichages
4 266
taratata
taratata
wizard
Réponses
10
Affichages
1 904
wizard
wizard
F
Réponses
1
Affichages
7 534
Uriel
Uriel
Haut