Transmettre un tableau de string à un port COM [Résolu]

Messages postés
4
Date d'inscription
mercredi 22 décembre 2004
Dernière intervention
19 février 2009
- - Dernière réponse : cs_miguil
Messages postés
4
Date d'inscription
mercredi 22 décembre 2004
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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
4
Date d'inscription
mercredi 22 décembre 2004
Dernière intervention
19 février 2009
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 91 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_miguil
Messages postés
1025
Date d'inscription
mardi 4 février 2003
Dernière intervention
7 juin 2010
65
0
Merci
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)
Commenter la réponse de SharpMao
Messages postés
4
Date d'inscription
mercredi 22 décembre 2004
Dernière intervention
19 février 2009
0
Merci
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.
Commenter la réponse de cs_miguil
Messages postés
4
Date d'inscription
mercredi 22 décembre 2004
Dernière intervention
19 février 2009
0
Merci
Sorry ! Me suis trompé dans le titre du sujet.
Je veux transmettre un tableau de char (et non de string) à un port COM.
Commenter la réponse de cs_miguil

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.