Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Serielle Schnittstelle

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.02.2006, 20:42 Uhr
Magic



Hallo, hab eine Frage zur Schnittstellenprogrammierung

Ich benutze ein I/O Interface von ELV (Beschreibung hier: www.elv-downloads.de/service/manuals/IO88/472-69.asp?&%1 )
Das Interface arbeitet mit speziellen Steuerbefehlen.
Das Problem ist, dass ich die Antwort vom Interface nicht auslesen kann. Die Steuerbefehle erreichen jedoch das Interface. Denn die einzelen Ausgänge kann ich setzen. Nur wenn ich den Befehl zum abfragen schicke kann ich die Antwort nicht auswerten.

Ich arbeite mit dem Bloodshed dev-C++

Hier meine Serial.h

C++:
/*
*  serial.h -- kleine Bibliothek fuer die Ein-/Ausgabe auf den seriellen Port
*/




#ifndef _SERIAL_H
#define _SERIAL_H

#include <stdio.h>
#include "windows.h"

#define PORTNAME  "COM1"
#define BAUDRATE  9600
#define BYTESIZE  8
#define PARITY    EVENPARITY
#define STOPBITS  ONESTOPBIT

void *port;

/*
* portInitalisieren() -- der Port wird mit den Grundeinstellungen initalisiert
*/



void portInitalisieren()
  {
  DCB dcbConfig;

  // Port oeffnen
  port = CreateFile(
    PORTNAME,
    GENERIC_READ | GENERIC_WRITE,
    0,
    NULL,
    OPEN_EXISTING,
    0,
    NULL);

  if (port == INVALID_HANDLE_VALUE)
    {
    printf("Fehler beim Oeffnen des Ports\n");
    exit(-1);
    }

  // Parameter des Port holen
  if (GetCommState(port, &dcbConfig))
    {
    dcbConfig.BaudRate = BAUDRATE;
    dcbConfig.ByteSize = BYTESIZE;
    dcbConfig.Parity = PARITY;
    dcbConfig.StopBits = STOPBITS;
    dcbConfig.fBinary = TRUE;
    dcbConfig.fParity = TRUE;
    }
  else
    {
    printf("Fehler beim Holen der Konfiguration\n");
    exit(-1);
    }

  // Parameter des Port setzen
  if (!SetCommState(port, &dcbConfig))
    {
    printf("Fehler beim Setzen der Konfiguration\n");
    exit(-1);
    }
  }

/*
* byteVomPortLesen() -- liest ein Character vom Port
*/



byte byteVomPortLesen()
  {
  byte zeichen;
  DWORD eventMask;
  DWORD anzImBuffer;

  // Setzen der CommMask
  if (!SetCommMask(port, EV_RXCHAR))
    {
    printf("Fehler beim Setzen der CommMaske\n");
    exit(-1);
    }

  // Warten auf CommEvent
  if (WaitCommEvent(port, &eventMask, NULL))
    {
    // Lesen bis was kommt
    do
      {
      ReadFile(port, &zeichen, 1, &anzImBuffer, NULL);
      } while (anzImBuffer == 0);
    }
  else
    {
    printf("Fehler beim Warten auf CommEvent\n");
    exit(-1);
    }

  return zeichen;
  }

/*
* byteAufPortSchreiben() -- schreibt ein Character auf den Port
*/



void byteZumPortSchreiben(byte zeichen)
  {
  unsigned long anzGeschrieben;

  if (WriteFile(port, &zeichen, 1, &anzGeschrieben, NULL) == 0)
    {
    printf("Fehler beim Schreiben auf Port\n");
    exit(-1);
    }
  }
#endif



mein Programm:


C++:
#include <stdio.h>
#include "serial.h"
byte b[10];
int i;
main()
{
printf("Port wird initialisiert:\n");
portInitalisieren();


// Protokoll absenden um den Status zu empfangen..
byteZumPortSchreiben(0x02); // STX
byteZumPortSchreiben(0x49); // Kommando "I"
byteZumPortSchreiben(0x05); // ENQ
byteZumPortSchreiben(0x12); // DC2
byteZumPortSchreiben(0x03); // ETX

// Kurz warten..
sleep(50);

// Hier muss das Antwort-Protokoll empfangen werden.

printf("byte wird vom Port gelesen:\n");
for( i = 0; i < 10; i++)
   {
       b[i]=byteVomPortLesen();
       printf("%d Wert\n", b[i]);
   }


getchar();
getchar();
}


Kann mir jemand weiterhelfen?
Gruss Peter
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: