Welcome! Log In Create A New Profile

Advanced

Envoie de commande sur port RS232

Posted by Nico84 
Envoie de commande sur port RS232
November 10, 2017 01:07AM
Bonjour à tous,

Je cherche à envoyer des codes (GCode / MCode) à mon imprimante 3D (carte ARduino + Repetier).
Le but est de détourner complètement l'utilisation de l'imprimante 3D en supprimant la tête d'extrusion et en utilisant l'ensemble comme un robot de dépose. C'est donc pour cela que dois créer mon programme de toute pièce.

Je travaille en CSharp (Visual Studio 2017). Ma liaison est configuré correctement (115200,n,8,1) puisqu'en utilisant le logiciel du fabricant, je peux piloter les axes.

Maintenant, au travers d'un simple programme qui utilise le port RS232, je capte bien les envoie cyclique d'informations de la part de mon imprimante (en l’occurrence les infos de température) mais je n'arriva pas à envoyer la moindre commande.

Je ne trouve pas non plus de documentation sur le protocole d'envoie de ces commandes. J'ai lu le document " NIST RS274NGC norme G-code" mais qui reste assez flouesur l'envoie des commandes elles-mêmes. Il est vrai que cela dépend plus (sans doute) du hardware de mon imprimante qui décode les commandes envoyées.

En attendant, pour envoyer une commande, je me contente de : serial.WriteLine("M105" + "\r\n"); 105 = lecture de température
En réponse à cela, j'obtiens toujours un "Resend ....". Suite à cela, je vois que dans la partie de mon programme qui affiche les infos qui arrivent sur le port RS232, je récupère toujours les infos cycliques avec en plus le "Resend" qui revient en permanence.

Qu'est ce qui ne pas dans mon envoie de commande ? la syntaxe ou la philosophie même de l'envoie ?

A l'aide, je suis complètement bloqué.

Merci d'avance.
Re: Envoie de commande sur port RS232
November 10, 2017 01:18AM
Hello,

Dans Repetier, Tu as un checksum (CRC) pour vérifier que les données ne sont pas corrompue (normalement pas obligatoire), donc ça ne doit pas venir de là.
Ensuite je ne connais pas C#, mais tu fais un sendligne + ajout de \r\n => c'est pas un peu redondant ?
Soit tu fais un 'raw' send + \r\n soit tu fais un send ligne sans rajouter de retour chariot.
Re: Envoie de commande sur port RS232
November 10, 2017 01:27AM
Tu devrais peut-être jeter un œil au code de Repetier Firmware. Ça se passe là : [github.com]


Most of my technical comments should be correct, but is THIS one ?
Anyway, as a rule of thumb, always double check what people write.
Re: Envoie de commande sur port RS232
November 10, 2017 01:42AM
Pourquoi essayer de le lire ? personne n'y comprends rien de toutes façons ... :-)
Re: Envoie de commande sur port RS232
November 10, 2017 01:48AM
Quote
raoullevert
Pourquoi essayer de le lire ? personne n'y comprends rien de toutes façons ... :-)

Tu veux dire "Personne excepté les programmeurs" ; or c'est un codeur, il devrait pouvoir comprendre. smiling smiley


Most of my technical comments should be correct, but is THIS one ?
Anyway, as a rule of thumb, always double check what people write.
Re: Envoie de commande sur port RS232
November 10, 2017 07:38AM
C'est Trolldi aujourdh'ui, mon pti deuxvis ....

Edited 1 time(s). Last edit at 11/10/2017 07:38AM by raoullevert.
Re: Envoie de commande sur port RS232
November 18, 2017 09:19AM
Merci à tous de vos réponses.

J'ai enfin réussi à résoudre mon problème. Je communique la solution pour de futurs utilisateurs :

Mon imprimante est une SpiderBot et la carte de pilotage est une UltraTronics PRO V1.0. Elle utilise un firmware Repetier (donc à adapter en fonction de votre cas personnel)

Je limite le code à l'essentiel

Ouverture du port COM :
 private void zzOpenPort()
{

               //COM port settings
                _PortCom = new SerialPort();
                _PortCom.BaudRate = 115200;
                _PortCom.Parity = Parity.None;
                _PortCom.DataBits = 8;
                _PortCom.StopBits = StopBits.One;
                _PortCom.PortName = "COM7";                                    <--- Valable que dans mon cas
                _PortCom.DataReceived += OnDataReceived;
                _PortCom.DtrEnable = false;
                _PortCom.RtsEnable = false;

                //Open COM Port
                _PortCom.Open();

                //Repetier ResetOnConnect
                Thread.Sleep(200);
                _PortCom.DtrEnable = true;
                _PortCom.RtsEnable = true;
                Thread.Sleep(1000);
                _PortCom.DtrEnable = false;
                _PortCom.RtsEnable = false;
}

Le "truc" dont je ne disposais pas est le micmac avec le RTS et DTR :

_PortCom.DtrEnable = false;
_PortCom.RtsEnable = false;


//Open COM Port
_PortCom.Open();

//Repetier ResetOnConnect
Thread.Sleep(200);
_PortCom.DtrEnable = true;
_PortCom.RtsEnable = true;
Thread.Sleep(1000);
_PortCom.DtrEnable = false;
_PortCom.RtsEnable = false;


Cela permet le "ResetOnConnect" du firmware.

Après cela pour envoyer des commandes :
_PortCom.WriteLine("M114\r\n" );
pour la position courante des axes par exemple.

Pour ce qui est de la lecture, on récupère les infos dans le CallBack ...
private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
{
            //Read input 
            _InputBuffer = _PortCom.ReadExisting();          
           .....
}

En espérant que cela pourra en aider d'autres...

Edited 1 time(s). Last edit at 11/18/2017 09:20AM by Nico84.
Sorry, only registered users may post in this forum.

Click here to login