Pourquoi plusieurs switches?
Il peut y avoir de multiples raisons. La plus évidente est de vouloir utiliser la détection de longueur d'outil sur plusieurs détecteurs, notamment quand le jeu d'écrans le nécessite comme le Screenset 2010 de Jerry qui utilise 2 capteurs de longueurs, d'outil, l'un fixé sur la table pour avoir une référence, et l'autre mobile pour détecter le zéro pièce. On peut aussi vouloir ajouter à ces 2 détecteurs un palpeur 3D par exemple.
Série ou parallèle
Pour des interrupteurs passifs, il n'y a pas de soucis.
- Si ils sont normalement ouverts au repose, il suffit de les câbler en parallèle.
- Si ils sont normalement fermés au repos, il suffit de les câbler en série.
- On ne pourra pas mixer des switches normalement ouverts et normalement fermés.
Actif/Actif ou Actif/Passif
Dans le cas ou l'on a un mixe de switches et de capteurs actifs, il va falloir trouver une solution. Il est tout à fait possible de faire une carte électronique qui conditionne les entrées et fasse un ou logique des différentes entrées sur une unique sortie. Je ne m'étendrai pas sur cette solution, car elle est dépendante du type de détecteurs utilisés (ouvert ou fermé au repos) et des capteurs actifs utilisés (sortie en tension, collecteur ouvert, 5v, 12v, optiques, inductifs, etc..)
Si votre carte dispose de suffisamment d'entrées et que celles si supportent soit des interrupteurs (résistances de tirage au 5V ntégrées) ou des entrées délivrant un niveau logique 5V (les résistances de tirage au 5V sont de suffisamment grande valeur), cela ouvre des possibilités à une solution entièrement logicielle.
Mach3 ne prévoit qu'une entrée par fonction. Ainsi, lorsque l'on raccorde une sonde (probe), on l'associe dan Mach3 à une unique entrée. L'astuce consiste donc à reconfigurer Mach3 à la volée pour lui signifier le changement d'entrée. Une fonction spécifique permet ceci : SetInputData . Appelée dans Mach3, elle va permettre de changer l'entrée associée à une fonction.
Usage : SetInputData ( NuméroEntreeDansMach3, NumeroDeBrocheEntreePhysique, EntréeInverseeOuiNon)
- NuméroEntreeDansMach3 : A relever dans le fichier XML de définition machine. L'entrée Probe est la 22 par exemple.
- NumeroDeBrocheEntreePhysique : Numéro de broche sur le port (ex 10 ou 11 ou 12...)
- EntréeInverseeOuiNon : Mettre 1 si la broche est inversée (active à l'état 0).
A noter que le numéro de port n'est pas programmable. Pour utiliser cette technique il va donc falloir utiliser le même port pour toutes les entrées à permuter. Dans ce cas de certaines cartes (Exemple: Ethernet Smooth Stepper) qui disposent de l’équivalent de plusieurs ports parallèles, c'est à prendre en compte à la conception.
Avec cette fonction, on va donc pouvoir modifier une macro M1s pour ajouter la permutation d'entrée avant d'utiliser un capteur spécifique par exemple), en n'oubliant pas de remettre l'entrée précédente juste avant de quitter la macro.
Conclusion :
Pour conclure, voici les modifications à appliquer sur le screenset 2010 de Gerry, afin d'utiliser une autre entrée pour le capteur fixe sur la table. Le capteur mobile (mesure de la hauteur de la pièce par rapport à la fraise) sera celui qui sera configuré par défaut dans Mach 3. Dans cet exemple, le capteur mobile est sur l'entrée 12 (capteur actif, donne 5v si actif), et le fixe sur la 11 (détecteur normalement ouvert, câblé sur une entrée avec résistances de tirage au 5V). Dans la config par défaut de Mach3, c'est le 12 qui est sélectionné (non inversé)
Pour M6end (changement d'outil) Ligne138
SetInputData(22,11,1) ' Fixed switch
Ligne 162
SetInputData(22,12,0) ' Back to mobile Switch
Pour y m881.m1s ( mesue complete de longeur d'outil avec les 2 switches) Ligne 181
SetInputData(22,11,1) ' Fixed switch
Ligne 201
SetInputData(22,12,0) ' Back to mobile Switch
Et un aperçu de la macro pour voir comment on substitue l'entrée juste avant la détection :
Code "(Probing for Reference Position.....)" ' Puts this message in the status bar '************************************** SetInputData(22,11,1) ' Fixed switch '************************************** ZPlate = (GetOEMDRO(802) - FirstProbeDist) Code "G90 G31 Z" & Zplate ' Probe move to current Z - 6 inches While IsMoving() Wend ZPlate = GetVar(2002) ' Read the touch point Code "G0 Z" & ( ZPlate + FirstRetractDist ) ' Move up .1 inch in case of overshoot While IsMoving() Wend Code "F" & SecondProbeFeed ' Set feedrate to 1 ipm or 25mm/min ZPlate = (GetOEMDRO(802) - SecProbeDist) Code "G90 G31 Z" & Zplate ' Probe move to current Z - .25 inches While IsMoving() Wend '************************************** SetInputData(22,12,0) ' Back to mobile Switch '************************************** ZPlate = GetVar(2002) ' Read the touch point Code "G1 Z" & ZPlate ' Move back to hit point in case of overshoot While IsMoving() Wend