IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

RS485 & C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 117
    Par défaut RS485 & C++
    Bonjour,

    je met un nouveau topic concernant la façon ce programmer en C++ une liaison série RS485.

    Je sais envoyer des données via liaison série RS232, caractère par caractère avec la routine que vous avez déjà pu voir sur ce forum :

    -> Ouverture du port COM et initialisation :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    /**************************************************\
    *       PROGRAMME ECRITURE - LECTURE VIA RS485     *
    *                                                  *
    \**************************************************/
     
    #include <windows.h>    // déclaration des librairies
    #include <iostream>
    #include <vector>
     
    using namespace std;
     
    int main(void)      // programme principal
    {
     
        /***************************************************
        *       INITIALISATION & OUVERTURE PORT COM        *
        *                                                  *
        ***************************************************/
     
        // On crée un handle que l'on initialise à NULL.
        HANDLE SPort=NULL;
        //DWORD Event;
        COMMCONFIG tR;
        // Sport est un handle ( identifiant )
    	// Pour mieux comprendre les paramètre passés
    	// consultez la fonction CreateFile();
    	SPort = CreateFile("COM4",
    					   GENERIC_READ | GENERIC_WRITE,
    					   0,
    					   NULL,
    					   OPEN_EXISTING,
    					   0,
    					   NULL);
    	// Le handle sera le lien entre notre apllication
    	// et le port série.
    	// Ici ce sera le port indiquédans le tableau COM déclaré au début qui sera ouvert.
     
    	if ( SPort == INVALID_HANDLE_VALUE )
    	{
    		cout << "Le port selectionne ne peut etre ouvert ou l'est deja"<<endl ;
    		MessageBox(0,"Le port selectionne ne peut etre ouvert ou l'est deja","Erreur",MB_OK);
    		system( "pause" );
    	}
    	// Vérification de parité désactivée
    	tR.dcb.fParity=NOPARITY;
    	// La taille du mot donnée est de
    	tR.dcb.ByteSize=8;
    	// Un bit de stop
    	tR.dcb.StopBits=ONESTOPBIT;
    	// désactive les Xon-Xoff
    	tR.dcb.fInX=FALSE;
    	tR.dcb.fOutX=FALSE;
    	// Configuration du BaudRate
    	tR.dcb.BaudRate= CBR_9600;
     
    	// Enregistrer les modifications apportées
    	// au paramètres Xon-Xoff
    	SetCommConfig(SPort, &tR, sizeof(tR));
    	// On remplit la strucuture COMMTIMEOUTS
    	COMMTIMEOUTS tMyTimeOuts =  {
    	100,
        0,
        0,
        1000,
        1000
        };
     	 //Enregistre les modifications concernant le CommTimeouts
    	if (!SetCommTimeouts(SPort, &tMyTimeOuts) )
    	{
    		MessageBox(0,"Erreur de configuration","Erreur",MB_OK);
    		system( "pause" );
    	}
     
        /************* FIN déclaration port COM et Initialisation *************/

    -> petite application mise derrière le code du dessus (envoi d'un caractère) :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        DWORD nb;  // déclaration des variables
        unsigned char buffer;
     
        buffer='a'; //"a" dans buffer
     
        WriteFile(SPort,&buffer,1,&nb,0); //envoi du buffer
     
    	cout<<endl<<"Trame envoyee..."<<endl;
    	cout<<"Fin de programme"<<endl;
    	return 0;
    	// Fin de programme
    }

    Je fais ce programme sous CodeBlocks et/ou dev-C++.

    Si éventuellement vous avez un exemple de code en C, je veux bien voir aussi, du moment que ça fonctionne avec du code C++.

    C'est très important pour moi d'avoir une syntaxe valide, donc si le code que je vous ai mis au dessus vous semble correct pour le protocole RS485, n'hésitez surtout pas à me le signaler. Dans le cas contraire, je veux bien recevoir une aide ou une correction dans ma syntaxe pour l'adapter à ce protocole en question.

    Merci d'avance pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 117
    Par défaut
    Ça ne vous choque pas cette syntaxe de code que j'utilise pour communiquer avec une telle liaison série ?

    Avez vous déjà dialogué avec une RS485 ?

    J'aimerai avoir une réponse, même si vous n'êtes pas sur de vous par rapport aux codes que j'ai posté.

    Merci d'avance ! C'est important pour moi

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    ben disons que RS485 ou RS232 c'est un peut pareil vu du côté application. C'est vrai qu'il y a des différences au niveau du signal électrique/électronique mais cela n'a pas d'impact pour l'appli.

    Donc pour te répondre, je ne voie rien de choquant dans ce que tu as écrit.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 117
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    ben disons que RS485 ou RS232 c'est un peut pareil vu du côté application. C'est vrai qu'il y a des différences au niveau du signal électrique/électronique mais cela n'a pas d'impact pour l'appli.

    Donc pour te répondre, je ne voie rien de choquant dans ce que tu as écrit.
    Merci pour ta réponse ram-0000

    J'ai déjà vu ça que coté soft, il n'y a pas grand chose à redire. Je voulais juste avoir confirmation Effectivement du coté électronique, il y a un brochage bien différent de celui d'une RS232.

    En fait je teste une carte d'acquisition RS485, et comme elle ne bronche absolument pas, je voulais être sur que ce n'est pas mon programme qui ne dialogue pas avec cette carte. L'installation de la carte semble être bonne. J'ai testé les broches avec un oscilloscope et il ne se passe rien. Derrière se trouvait le programme tournant en boucle et qui envoi un caractère, similaire à celui que j'ai donné au dessus.

    Je vais attendre d'autres réponse pour être vraiment certain, mais merci pour ton opinion ram déjà

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    La carte RS485 a été abordée plusieurs fois dans le forum. As-tu essayé une recherche (C++ et C) pour voir ce que d'autres ont pu dire.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 117
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut,
    La carte RS485 a été abordée plusieurs fois dans le forum. As-tu essayé une recherche (C++ et C) pour voir ce que d'autres ont pu dire.
    J'ai du mal chercher, parce que je ne suis jamais tombé sur ce type de sujet, surtout concernant le protocole RS485.

    Je vais regarder à nouveau dans le forum.

    (A défaut, si tu as des topics à me montrer, n'hésites pas à me mettre les liens)

    Merci pour ta réponse.

Discussions similaires

  1. convertisseur rs232 <-> rs485
    Par shadowmoon dans le forum Périphériques
    Réponses: 11
    Dernier message: 16/06/2005, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo