-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Relaisplatine mit c++ ansteuern

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2005
    Beiträge
    9

    Relaisplatine mit c++ ansteuern

    Anzeige

    moin!

    Ich hab mir für die Schule ein Projekt rausgesucht, bei dem ich mit C++ eine Relaisplatine ansteuern möchte.

    Dafür habe ich mir die RELAISPLATINE 8-fach seriell von Conrad gekauft, und einen USB-Serial-Cable gekauft.

    Da ich dieses Projekt mit meinem Laptop vorführen möchte, und ich daran keinen COM-Anschluss (RS232) habe, brauchte ich das Kabel, welches von USB auf COM geht.

    Mit einem, der Relaiskarte beigefügten Programm, habe ich schon erfolgreich getestet, ob das mit dem USB überhaupt geht.


    Jetzt muss ich nur noch in C++ ein Programm coden, welches die einzelnen Relais ansteuern soll.
    Aber in dem Handbuch der Karte ist leider nur ein Beispiel für BASIC. Doch damit kann ich recht wenig anfangen.



    Könnte mir bitte jemand sagen, wo ich die nötigen Funktionen und Header-Dateien und sonstiges finden kann, um mein Projekt zu realisieren?


    vielen Dank schon mal im vorraus!

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    18.01.2004
    Beiträge
    13
    Hi,

    unter http://www.relaiskarte.thomas-dohl.de/
    gibt nen C/C++ Programm.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2005
    Beiträge
    9
    vielen dank

    werde gleich mal nachsehen

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2005
    Beiträge
    9
    erm.. gibt es die programme auch für windows?
    oder laufen die nur unter Linux?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    18.01.2004
    Beiträge
    13
    Also das o.g. Programm gibts nur für Linux.
    Aber vielleicht läufts auch unter cygwin und dann damit
    unter win.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2005
    Beiträge
    9
    okay muss ich mal testen..
    aber kann ich gerade nicht machen, da ich letzte und diese Woche immer auf die Examen lernen muss.. (ProgTech[C++], InfoTech[Assambler], KommTech[DOS und Linux und NetWare] und ElektroTechnik[das wohl für mich schwierigste; elektronische Schaltungen... hatte heute im Examen bestimmt ne 5 geschrieben darin..] )

    und bis nach den Ferien sollte ich mein Projekt (diese Relais ansteuerung) fertig haben.. mal sehen, wie es klappt...

    ich such immernoch in jeder freien Minute im Netz nach so nem Programm, oder bessergesagt dem Code.. aber finde es einfach nicht.
    Wo könnte ich denn noch danach suchen, als bei Google?

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2005
    Beiträge
    9
    Also, ich habe jetzt diesen Code... aber irgendwie sendet er immernoch nicht..
    Das Programm sagt mir zwar "Done..." aber meine RelaisPlatine macht nicht "Klick"....

    Woran kann das liegen?



    //#include <cstdlib>
    #include <windows.h>
    //#include <string.h>
    //#include <stdio.h>
    #include <iostream.h>
    #include <conio.h>
    #include <dos.h>
    //#include <stdlib.h>
    #include <time.h>
    #include <unistd.h>
    //#include <string>




    int main()
    {

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

    hComm = CreateFile( pcCommPort,
    GENERIC_READ | GENERIC_WRITE,
    0, // must be opened with exclusive-access
    NULL, // no security attributes
    OPEN_EXISTING, // must use OPEN_EXISTING
    0, // not overlapped I/O
    NULL // hTemplate must be NULL for comm devices
    );

    if (hComm == INVALID_HANDLE_VALUE)
    {
    // Handle the error.
    printf ("CreateFile failed with error %d.\n",
    GetLastError());

    }

    // Build on the current configuration, and skip setting the size
    // of the input and output buffers with SetupComm.

    fSuccess = GetCommState(hComm, &dcb);

    if (!fSuccess)
    {
    // Handle the error.
    printf ("GetCommState failed with error %d.\n",
    GetLastError());

    }

    // Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.

    dcb.BaudRate = CBR_9600; // set the baud rate
    dcb.ByteSize = 8; // data size, xmit, and rcv
    dcb.Parity = NOPARITY; // no parity bit
    dcb.StopBits = ONESTOPBIT; // one stop bit

    fSuccess = SetCommState(hComm, &dcb);

    if (!fSuccess)
    {
    // Handle the error.
    printf ("SetCommState failed with error %d.\n",
    GetLastError());

    }
    else
    {
    char frame[4];
    frame[0] = 1;
    frame[1] = 1;
    frame[2] = 0;
    frame[3] = static_cast<BYTE>(frame[0] ^ frame[1] ^ frame[2]);
    DWORD dwBytesWritten = 0;
    WriteFile(hComm, &frame, sizeof
    (frame), &dwBytesWritten, NULL);
    //TransmitCommChar(hComm,frame);
    frame[0] = 3;
    frame[1] = 1;
    frame[2] = 5;
    frame[3] = static_cast<BYTE>(frame[0] ^ frame[1] ^ frame[2]);

    WriteFile(hComm, &frame, sizeof
    (frame), &dwBytesWritten, NULL);
    BOOL bResult;


    DCB dcb_alt;
    SetCommState(hComm, &dcb_alt);

    bResult = CloseHandle(hComm);
    hComm = INVALID_HANDLE_VALUE;
    }

    cout << "Done...";
    cout << endl ;
    getch();
    return 0;
    }

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Kollege, sizeof(frame) ist nur 1 , das reicht vielleicht nicht.
    Wenn du alle 4 schicken willst, schreib "4" hin
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2005
    Beiträge
    9
    Ich hab jetzt den Fehler rausgefunden...

    Wie ich ja schon am Anfang gesagt habe, habe ich mir so ein Kabel von USB auf RS232 gekauft..

    Jetzt habe ich das mal an dem PC meiner Mum ausprobiert, und dann da direkt an den RS232-Port gegangen. Da geht es.
    Aber ich wollte es ja eigentlihc über den USB port machen, aber das kann ich mir dann wohl stecken..

    Denn ich hab wie gesagt nur noch kurz Zeit (bis Mittwoch)..
    Darum werde ich das jetzt einfach mal so lassen...

    Denn ich konzentrier mich jetzt auf andere Sachen (Ob es geht, aus ner Tabelle oder Datenbank Informationen zu ziehen), und ein kleines GaragenTor mit Motor bauen.

    Mein Dad programmiert FeuerWehrSoftware, und da sollte ich dann mein Programm mit einbinden..
    Mein Programm wird dann von dem HauptProgramm aufgerufen, und als Übergabeparameter bekommt es dann eine FahrZeugNummer...
    Mit Hilfe dieser Nummer wird mein Programm dann (wenn es funktioniert) aus der Tabelle raussuchen, in welchem Tor das jeweilige Fahrzeug steht, und dann das jeweilige Tor öfnen (dafür die RelaisKarten ansteuerung)

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2005
    Beiträge
    9
    hmm.. also neues problem..
    Wie oben funktioniert das Programm..
    Aber wenn ich jetzt da ne AuswahlMöglichkeit reinbau, funktionierts nichtmehr..
    (die fett gedruckten Teile sind neu. mit denen funktioniert es nichtmehr)


    #include <windows.h>
    #include <iostream.h>
    #include <conio.h>
    #include <dos.h>
    #include <time.h>
    #include <unistd.h>




    int main()
    {

    int relais;
    cout<<"\nBitte wählen sie das Relais aus: "
    cin>>relais;




    DCB dcb;
    HANDLE hComm;
    BOOL fSuccess;
    char *pcCommPort = "COM3";

    hComm = CreateFile( pcCommPort,
    GENERIC_READ | GENERIC_WRITE,
    0, // must be opened with exclusive-access
    NULL, // no security attributes
    OPEN_EXISTING, // must use OPEN_EXISTING
    0, // not overlapped I/O
    NULL // hTemplate must be NULL for comm devices
    );

    if (hComm == INVALID_HANDLE_VALUE)
    {
    // Handle the error.
    printf ("CreateFile failed with error %d.\n",
    GetLastError());

    }

    // Build on the current configuration, and skip setting the size
    // of the input and output buffers with SetupComm.

    fSuccess = GetCommState(hComm, &dcb);

    if (!fSuccess)
    {
    // Handle the error.
    printf ("GetCommState failed with error %d.\n",
    GetLastError());

    }

    // Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.

    dcb.BaudRate = CBR_19200; // set the baud rate
    dcb.ByteSize = 8; // data size, xmit, and rcv
    dcb.Parity = NOPARITY; // no parity bit
    dcb.StopBits = ONESTOPBIT; // one stop bit

    fSuccess = SetCommState(hComm, &dcb);

    if (!fSuccess)
    {
    // Handle the error.
    printf ("SetCommState failed with error %d.\n",
    GetLastError());

    }
    else
    {
    char frame[4];
    frame[0] = 1;
    frame[1] = 1;
    frame[2] = 0;
    frame[3] = static_cast<BYTE>(frame[0] ^ frame[1] ^ frame[2]);
    DWORD dwBytesWritten = 0;
    WriteFile(hComm, &frame, (BYTE)frame, &dwBytesWritten, NULL);
    //TransmitCommChar(hComm,frame);
    frame[0] = 3;
    frame[1] = 1;
    frame[2] = relais;
    frame[3] = static_cast<BYTE>(frame[0] ^ frame[1] ^ frame[2]);

    WriteFile(hComm, &frame, (BYTE)frame, &dwBytesWritten, NULL);
    BOOL bResult;


    DCB dcb_alt;
    SetCommState(hComm, &dcb_alt);

    bResult = CloseHandle(hComm);
    hComm = INVALID_HANDLE_VALUE;
    };

    cout << "Done...";
    cout << endl ;
    getch();
    return 0;
    }

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •