begin process at 2012 05 28 21:34:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Driver

 > 

Envoyer un caractère de controle en C vers un port série


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Envoyer un caractère de controle en C vers un port série

mercredi 25 octobre 2006 à 18:45:29 | Envoyer un caractère de controle en C vers un port série

Kurpeus1

Membre Club
Bonjour,

Voila je ne suis pas un expert en C, mais j'y travaille ^^

Je suis en train de programmer un programme qui communique avec un terminal portable via le port RS232. Pour communiquer avec lui j'utilise un code trouvé sur ce forum qui me permet d'envoyer des trucs vers le port série. Mon problème est le suivant. Mon terminal ne me répond que si je lui dit bonjour, il est très poli mais c'est un peu agaçant ^^ Donc il faut que je lui envoie le caractère 0f en hexa soit 015 en decimal ou encore SI pour  Shift In. Seul problème je sais pas comment lui envoyer ca.

la fonction pour envoyer des datas attend :

 //----------------------------------------------------------------------------
 // FONCTION    : EmissionCom
 //----------------------------------------------------------------------------
 // DESCRIPTION    :
 // Emission d'octets sur la liaison série
 //
 //----------------------------------------------------------------------------
 // PARAMETRES    :
 //        -lpBuf Pointeur sur les octets a emettre
 //        -nCount Nombre d'octet a emettre
 //
 //----------------------------------------------------------------------------
 // RETOUR    :Code d'erreur
 //----------------------------------------------------------------------------

merci d'avance
mercredi 25 octobre 2006 à 23:18:59 | Re : Envoyer un caractère de controle en C vers un port série

yann_lo_san

J'ai utilisé une fois la communication serie, en gros les étapes sont celles-ci :
(Je précise pour les "je-sais-tout" de ce site que ce n'est pas LA façon de faire...)

Voir ReadComm and WriteComm en Win16
et CreateEvent(), ReadFile() et WriteFile() en Win32

Voir l'exemple MTTTY dans MSDN
Il faut absolument utiliser les threads

DCB dcb;
HANDLE hComm;
char *pcCommPort = "COM2";

CreateFile(hComm, /*ect...*/);

// Ex : pour parametrer le port
BuildCommDCB("9600,n,8,1", &dcb))
 
// crée l'event d'écriture
OVERLAPPED osWrite = {0};
osWrite.hEvent = CreateEvent(/*voir params*/);
// Ecrit
WriteFile(hComm, /*voir params*/)
// Attend
dwRes = WaitForSingleObject(osWrite.hEvent, INFINITE);
if( dwRes == WAIT_OBJECT_0 )
 // succes
// Libere event
CloseHandle(osWrite.hEvent);

jeudi 26 octobre 2006 à 10:09:56 | Re : Envoyer un caractère de controle en C vers un port série

Kurpeus1

Membre Club
merci d'avoir répondu yann.

Je ne connais pas spécialement le principe d'une communication série sur l'aspect programmation. J'utilise un code source que j'ai trouvé sur ce site. Il s'agit de  celui de gplog  http://www.cppfrance.com/codes/FONCTION-GESTION-PORT-SERIE-OUVERTURE-EMISSION-RECEPTION_11115.aspx

J'arrive bien a envoyer des données via le port RS232 mais mon problème est le suivant. Le terminal attend des caractères de controle avant d'envoyer un ACK. Le caractère qu'il attend est SI :  Shift In (dec) 015     (hex)   0F   (bin) 00001111. Je ne sais pas trop comment envoyer ce caaractère. Si je fais

 char msgRead = 15;
 msgCom = EmissionCom(msgRead, sizeof(msgRead));

le compilateur (dev-C++) me met un warning :  [Warning] passing arg 1 of `EmissionCom' makes pointer from integer without a cast 

Je remets ici ce qu'attend la fonction.
 //----------------------------------------------------------------------------
 // DESCRIPTION    :
 // Emission d'octets sur la liaison série
 //
 //----------------------------------------------------------------------------
 // PARAMETRES    :
 //        -lpBuf Pointeur sur les octets a emettre
 //        -nCount Nombre d'octet a emettre


pour info
voici une capture d'échange entre le terminal et un autre prog ( celui fournit par le constructeur)

[00:460] - Written data


0f .

[00:981] - Written data

0f .

[01:301] - Written data

0f .

[01:412] - Read data

0f .

[01:632] - Written data

07 36 51 52 45 41 44 0d .6QREAD.

[02:283] - Read data

4e 41 4b 0d NAK.

[02:283] - Written data

52 45 41 44 0d READ.

[02:293] - Read data

41 43 4b 0d 00 38 37 31 35 39 34 36 32 39 36 39 ACK..87159462969
31 33 2c 31 13 03 0d 13,1...

[02:293] - Written data

41 43 4b 0d ACK.

[02:303] - Read data

01 38 37 31 35 39 34 36 32 39 36 39 31 33 2c 32 .8715946296913,2
15 03 0d ...

[02:303] - Written data

41 43 4b 0d ACK.

[02:303] - Read data

4f 56 45 52 0d 4f 56 45 52 0d OVER.OVER.

[02:413] - Close port
jeudi 26 octobre 2006 à 12:26:38 | Re : Envoyer un caractère de controle en C vers un port série

DeAtHCrAsH

Essaye ca :

char msgRead[2]; // déclare ton tableau
msgRead[0] = 15; // affecte la valeur souhaité
msgRead[2] = '\0'; // termine ta chaine pour éviter les plantage

msgCom = EmissionCom(msgRead, 1);

Shell
jeudi 26 octobre 2006 à 12:28:04 | Re : Envoyer un caractère de controle en C vers un port série

DeAtHCrAsH

Oups petite erreur de ma part... comme quoi la relecture ca sert....
Je m'etais trompé dans les indices du tableau.
Voici le bon code a essayer :

char msgRead[2]; // déclare ton tableau
msgRead[0] = 15; // affecte la valeur souhaité
msgRead[1] = '\0'; // termine ta chaine pour éviter les plantage 

msgCom = EmissionCom(msgRead, 1);


Shell
jeudi 26 octobre 2006 à 13:28:36 | Re : Envoyer un caractère de controle en C vers un port série

yann_lo_san

L"erreur que tu as vient du fait que tu passe un char alors que le param attent un pointeur (lpBuf), du coup il essaye de caster la valeur de ton char en un int (adresse).
Par contre tout dépend de comment la fonction que tu utilise gère ce param, peut etre reformate elle le buffer avec les caracteres de controle, donc se fier au code de la fonction EmissionCom().



Cette discussion est classée dans : port, caractère, controle, envoyer, série


Répondre à ce message

Sujets en rapport avec ce message

0x1A - CTRL+Z [ par toma2194 ] Bonjour,j'essaye de faire un prog pour envoyer des SMS via le port série sur lequel est relié un portable.En hyperterminal avec les commandes AT, pas comment envoyer des données sur un port série sous xp [ par tchen01 ] je voudrais envoyer des commandes hexadecimales sur un port série en c++ sous xp et les commandes outp et inp ne sont pas valables.merci d'avance Interruption liaison série [ par ben_chamb ] Salut,Tout est dans le titre.Je cherche a réaliser une lecture du port série du PC mais par interruption.J'ai testé les différents programmes, traitan [débutant]recevoir et envoyer une chaine de caractère sur un port série en C? [ par makan94 ] bonjours à tous,sa fait déjas plusieur semaine que je recherche désespérément une solution a ma question sans avoir trouvé de réponse: Comment recevoi Configuration d'un port série pour communication arduino [ par misselo76 ] Bonjour, J'ai un arduino mega 2560, et je l'ai programmé pour qu'il envoie des données sur un port série spécifique en fonction du premier caractère. selection automatique d'un port série [ par flozzzzz ] bonjour, je suis stagiaire dans un bureau d'étude et je dois faire des modifications / améliorations d'un programme déjà existant. Je n'ai pas vraime Comment envoyer un 0x00 ou caractere NULL sur port com [ par CodeSteph ] Tout d'abord, merci à toi/vous de te pencher sur mon pb ou deja d'en prendre connaissance. Je souhaite piloter un equipement electronique via port com ouvrir port série [ par de6vinci ] Bonjour. je réalise un programme avec visual C++ qui pilote un port série. y a t'il une autre méthode pour ouvrir le port série que CreateFile. merci Rediriger le port COM1 vers le COM2 [ par TitounetteDistrouille ] Bonjour, Je suis à la recherche d'un script ou un petit logiciel qui me permettrait de faire la redirection de mon port COM1 vers mon COM2. J'ai une Communication port série [ par lilight ] Bonjour, Je cherche à réaliser un programme me permettant d'envoyer et de récupérer les données d'un multimètre. J'ai quelques bases en C mais la le


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales