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

cs_miguil 4 Messages postés mercredi 22 décembre 2004Date d'inscription 19 février 2009 Dernière intervention - 18 févr. 2009 à 03:42 - Dernière réponse : cs_miguil 4 Messages postés mercredi 22 décembre 2004Date d'inscription 19 février 2009 Dernière intervention
- 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
cs_miguil 4 Messages postés mercredi 22 décembre 2004Date d'inscription 19 février 2009 Dernière intervention - 19 févr. 2009 à 02:08
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.

Merci cs_miguil 3

codes-sources a aidé 81 internautes ce mois-ci

Commenter la réponse de cs_miguil
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 18 févr. 2009 à 07:17
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
cs_miguil 4 Messages postés mercredi 22 décembre 2004Date d'inscription 19 février 2009 Dernière intervention - 18 févr. 2009 à 16:21
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
cs_miguil 4 Messages postés mercredi 22 décembre 2004Date d'inscription 19 février 2009 Dernière intervention - 18 févr. 2009 à 16:23
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.