Transmettre un tableau de string à un port COM

Résolu
cs_miguil Messages postés 4 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 19 février 2009 - 18 févr. 2009 à 03:42
cs_miguil Messages postés 4 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 19 février 2009 - 19 févr. 2009 à 02:08
Bonjour,

Je ne sais pas si je poste dans le bon thème mais j'espère que quelqu'un pourra m'aider.
J'ai cherché partout comment traduire une commande C++ en C# qui permet d'envoyer (écriture) dans un port COM un tableau de string.

C++ : WriteFile(h,Command,write,&write,NULL);

J'ai essayé avec la commande C# : serialPort1.Write(Command, 0, 1);
Mais ça ne fonctionne pas...

Quelqu'un pourrait m'aider ?

Merci d'avance.

4 réponses

cs_miguil Messages postés 4 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 19 février 2009
19 févr. 2009 à 02:08
Bon ! Finalement j'ai trouvé la réponse tout seul... Un peu de persévérance et hop !
Voici le code pour ceux que ça pourrait intéresser...

            private System.IO.Ports.SerialPort serialPort1;
            serialPort1.PortName = "COM7";
            serialPort1.BaudRate = 115200;

            serialPort1.Open();

            int ServoPosition = 1790;
            char numServo = '4';

            char[] Command = new char[8];

            Command[0] = '@';
            Command[1] = 'S';
            Command[2] = numServo;
            Command[3] = System.Convert.ToChar((ServoPosition >> 8));
            Command[4] = System.Convert.ToChar(ServoPosition);
            Command[5] = '0';
            Command[6] = '0';
            Command[7] = '#';

            serialPort1.Write(Command, 0, Command.Length);
            serialPort1.Close();

En faite, il suffisait d'utiliser System.Convert.ToChar() pour convertir correctement en char ma variable ServoPosition.
3
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
18 févr. 2009 à 07:17
Hello,

Ca ne marche pas, c'est un peu vague.
Reçois-tu une exception, as-tu bien ouvert le port COM avant de tenter d'écrire ?

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
cs_miguil Messages postés 4 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 19 février 2009
18 févr. 2009 à 16:21
En faite,
J'essaye d'envoyer une commande à une carte muIn via le port COM pour commander un servo-moteur.
Pour faire le faire bouger, je dois lui envoyer une commande sous forme d'un tableau.

Voila en C++ le code que je souhaiterai transposer en C#.

--------------  Code C++ ----------------
HANDLE h = CreateFile(

"COM7",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

DWORD write=8;

unsigned
short
ServoPostion = 1690;
unsignedchar Low;
unsignedchar High;
unsignedchar
*Command = newunsignedchar [8];

Low=ServoPosition;

High=ServoPosition>>8;
Command[0]='@'
;
Command[1]='S';
Command[2]='1';
Command[3]=High;
Command[4]=Low;
Command[5]=0;
Command[6]=0;
Command[7]='#';

WriteFile(h,Command,write,&write,NULL);

delete
[] Command;
CloseHandle(h);

--------------------- Le code transcrit en C# ----------------------

SerialPort serialPort1 = new SerialPort("COM7", 115200, Parity.None, 8, StopBits.One);

serialPort1.Open();

uint
ServoPosition = 1690;
char Low;
char High;

char[] Command = newchar [8];

Low=(char)ServoPosition;  // j'imagine qu'ici je dois avoir un pb de conversion de type
High = (char)(ServoPosition >> 8); // idem ici

Command[0]='@'
;
Command[1]='S';
Command[2]='1';
Command[3]=High;
Command[4]=Low;
Command[5]='0';
Command[6]='0';
Command[7]='#';

serialPort1.Write(Command, 0, Command.Length);

serialPort1.Close();

---------------------------------------------------

En C#, Je veux faire pareil en utilisant la classe serialPort. Mais je ne sais pas comment envoyer mon tableau avec la méthode
serialPort.Write(Command, 0, 1).
Apparemment je peux passer à la méthode un tableau de char mais rien ne se passe. Pas de message d'erreurs, rien...
quand j'affiche la commande envoyé j'ai : [@ | S | 1 | 6 | - | 0 | 0 | # ]. 1690 n'est pas converti en char. Je suppose que c'est une question de taille du type char.
J'ai essayé de passer le tableau, préalablement typé byte, à la méthode Write() mais sans plus résultat et toujours pas de message d'erreur.

Je ne sais pas si je suis plus clair !

En tout cas, merci pour le coup de main.
0
cs_miguil Messages postés 4 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 19 février 2009
18 févr. 2009 à 16:23
Sorry ! Me suis trompé dans le titre du sujet.
Je veux transmettre un tableau de char (et non de string) à un port COM.
0
Rejoignez-nous