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

Discussion :

Rs232 avec QExtSerialPort

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 47
    Par défaut Rs232 avec QExtSerialPort
    Bonsoir je code un programme qui prend en charge un programme de lecture/écriture de carte magnétique, j'ai la documentation technique du programme, mais la machine ne répond pas ou recrache les cartes directement.

    avez vous des conseil a me fournir sur votre faon de procéder si je vous fournis la doc technique =') ?


    merci d'avance
    Images attachées Images attachées

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    Vérifie déjà que tu as configuré ton port correctement (BaudRate, Parity, StopBits, databits...)

    Il suffit souvent d'avoir un de ces paramètre incorrect pour que la communication ne se fasse pas.

    Si tout est ok, poste un peu de code...

  3. #3
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 47
    Par défaut
    la configuration normalement est bonne, le soucis vien des commandes a envoyer a la machine, j'ai trouver un code source sur internet coder par des chinois qui prend en charge ce matériel, mais c'est coder avec MFC, je vous fournis une partie de mon code source si ceci peux vous aider =)

    Code : 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
    void rs232::startConnection()
    {
    	setPortName("COM3");
        setBaudRate(BAUD9600);
        setFlowControl(FLOW_OFF); 
        setParity(PAR_NONE);    
        setDataBits(DATA_8);  
        setStopBits(STOP_1);
    	setTimeout(1);
     
    	//setQueryMode(QextSerialPort::Polling);
     
    	open(QIODevice::ReadWrite);
     
    	//connect(this, SIGNAL(readyRead()), this, SLOT(dataRead()));
    	connect(this, SIGNAL(bytesReaded()), this, SLOT(byteHandler()));
     
    }
     
    void rs232::insertCard(cardInsertMode Mode)
    {
    	static const char mydata[] = { 0x43,0x32,0x30, 0x42};
     
    	QByteArray data = QByteArray::fromRawData(mydata, sizeof(mydata));
     
    	char chSend[256],chSend1[256],chState[20];
        int  bcc, i, j;
     
        memset(chSend, '\0', 256);
        memset(chSend1, '\0',256);
    	memset(chState, '\0', 20);
     //'½ø¿¨ÃüÁî' 'C' 32H pm (0x30'pm´Å¿¨  0x31  'IC¿¨²¢¶ÔIC¿¨Éϵ硡¡¡0x32'IC¿¨²»¶ÔIC¿¨Éϵç)
        sprintf(chSend, "%cC2%d%c", 0x02, (int)Mode, 0x03);
        bcc = KDM4787_BCC(chSend, strlen(chSend));
        sprintf(chSend1, "%s%c%c", chSend, bcc, 0x0D);
     
    	write((const char*)chSend, strlen(chSend));
     
    	//char in = write(mydata,sizeof(mydata));
     
     
     
     
    }
    (pour info j'utilise le COM3 car j'utilise un adaptateur USB to rs232, dès que je coupe la connexion le matériel réagis bien en appelant ça fonction reset)

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    Est-ce normal que tu n'envoies pas tes données (le QByteArray n'est pas utilisé) ?

    Quelques conseils:
    - mixer les char[] et les QByteArray peut vite devenir compliqué. Il est souvent plus simple de ne manipuler, en Qt, que des QByteArray.
    - écris une fonction qui va transformer ton QByteArray en une chaine de caractères "lisible" (affiche la valeur en hexadécimal de chaque octet). Cela te permettra de voir exactement ce qui est envoyé à ton device, et donc de t'assurer que tu respectes bien la doc.

  5. #5
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 47
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //'½ø¿¨ÃüÁî' 'C' 32H pm (0x30'pm´Å¿¨  0x31  'IC¿¨²¢¶ÔIC¿¨Éϵ硡¡¡0x32'IC¿¨²»¶ÔIC¿¨Éϵç)
        sprintf(chSend, "%cC2%d%c", 0x02, (int)Mode, 0x03);
        bcc = KDM4787_BCC(chSend, strlen(chSend));
        sprintf(chSend1, "%s%c%c", chSend, bcc, 0x0D);
    j'ai repris ce bout de code depuis le programme qui utilise MFC, le soucis je vois pas trop ce que celui ci fait, tu aurai une petite idée de ça ^^' ?

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    le premier sprintf va mettre dans ton char[256] chSend les données passées en paramètre, à savoir 0x02, mode, 0x03, en suivant le format défini: "%cC2%d%c".

    tu auras donc dans ton char[256]: 0x02 (en char), "C2" (en char) mode (en signed decimal integer), 0x03 (en char).

    Ensuite, KDM4787_BCC, je ne sais pas ce que ça fait, mais je suppose que ça calcule un code correcteur.

    le deuxième printf va simplement concaténer chSend, le "code correcteur", et 0x0D.

    Rien de Qt là dedans

Discussions similaires

  1. RS232 avec c++builder 5
    Par dussonline dans le forum C++Builder
    Réponses: 6
    Dernier message: 07/02/2007, 16h16
  2. Communication port série (RS232) avec VC++
    Par sanatou dans le forum Visual C++
    Réponses: 2
    Dernier message: 30/10/2006, 13h49
  3. communiquer par rs232 avec access 2000
    Par john.dbc dans le forum Access
    Réponses: 3
    Dernier message: 21/09/2006, 13h06
  4. Communication RS232 avec un PIC via delphi
    Par JeanPh dans le forum API, COM et SDKs
    Réponses: 22
    Dernier message: 09/08/2004, 22h56
  5. Réponses: 8
    Dernier message: 29/09/2003, 15h33

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