MS Windows Borland C++ builder V5 serielee Schnittstelle



  • [Edit] Falscher Code
    corvin



  • Hex Wert:
    empfangen=true
    test= 00425D5F

    Zu deinem anderen Prog: Ich wüßte nicht wie ich cout und cin ein einem BCB-Projekt benutzen kann. Ich bekomme zwar keine Fehler, aber es öffnet sich auch net das Standard Ein-Ausgabe-Fenster. Ich hab jetzt mal des ganze Prog von dir im Visual C++ (Version 6) gestartet. Ich hab auch keine Fehler, nur dass ich mit Esc net abrechen kann. Denke aber, dass da nur die Falsche Hexangabe das Prob ist.
    Vielmehr stört mich, dass wenn ich mit dem Prog Buchstaben sende, auch nichts empfange. Für das Empfangen habe ich weiterhin meine BDB Programm genommen.



  • ... noch ne andere Frage:
    ist des normal, dass du iBytesWritten nichts zuweist?

    int send(unsigned char input) 
    { 
       DWORD iBytesWritten; /*<-------------HIER*/
       // Variable für Sendezeichen------------------------------------- 
       unsigned char ucMsg;                     
       ucMsg = input; 
       WriteFile (hCom, &ucMsg, 1, &iBytesWritten, NULL); 
       return (0); 
    }
    


  • Schau mal in der Hilfe nach; ist ein Return-Wert

    sry für den falschen code(da fehlt die empfangsroutine)
    liefere ich aber nach;

    corvin

    PS: der Code ist nicht von mir, nur bearbeitet

    nicht zu viel von mir verlangen, bin erst u-16



  • ach so, das ist kein Hex-Wert der müsste etwa so aussehen:
    0x3D



  • bist du sicher? Ich hatte auch was mit 0x erwartet. Aber des sind ja 4 Bytes (sind ja 4 char Elemente) die ich empfangen müste, von demher dachte ich dann schon, dass des mit 8Ziffern ok ist.



  • ...so ich hab jetzt extra nochmal ein kleines Prog geschreiben, mit dem ich nur die Serielle Kommunikation testen kann. (davor war es einfach zu unübersichtlich) Und ich glaube jetzt funktioniert sogar die Übertragung. Leider nur noch nicht richtig. mit folgendem Programm:

    #include <vcl.h>
    #pragma hdrstop
    #include "COM_PORT.h"
    #include <cstdlib>
    #include <windows.h>            //fuer serielle Kommunikation
    #include <iostream>           //fuer cout, cin
    #include <conio.h>              //fuer Fkt. getch(), clrscr();
    #include <ctype.h>              //fuer toupper()
    #define COM_BUFFER_SIZE 16        // Read- und Write-Buffer-Size
    HANDLE hCom;
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    int TForm1::open_com()
    {
       DCB           dcb;
       hCom = CreateFile ("COM1", GENERIC_WRITE | GENERIC_READ, 0, NULL,
       OPEN_EXISTING, 0, NULL);
       // setzen der Blocklaenge, muss erfolgen--------------------------
       dcb.DCBlength = sizeof(DCB);
       // COM-Einstellungen laden----------------------------------------
       GetCommState (hCom, &dcb);
       // Baudrate einstellen, hier 9600---------------------------------
       dcb.BaudRate  = 9600;
       // Datenbits einstellen, hier 8-----------------------------------
       dcb.ByteSize  = 8;
       // Paritaet einstellen, hier keine Paritaet-------------------------
       dcb.Parity    = NOPARITY;
       // Stopbits einstellen, hierv1------------------------------------
       dcb.StopBits  = ONESTOPBIT;
       // COM-Einstellungen speichern------------------------------------
       SetCommState (hCom, &dcb);
       return 0;;
    }
    //---------------------------------------------------------------------------
    int TForm1::close_com()
    {
       CloseHandle (hCom);
       return (0);
    }
    //---------------------------------------------------------------------------
    int TForm1::send(char input)
    {
       DWORD iBytesWritten;
       // Variable für Sendezeichen-------------------------------------
       char ucMsg;
       ucMsg = input;
       WriteFile (hCom, &ucMsg, 1, &iBytesWritten, NULL);
       return (0);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      //Sende-Modus
     char taste;
      // Aufruf Funktion open_com()----------------------------------------
      open_com();
    //  strcpy(taste,Edit1->Text.c_str());
    //taste=Edit1->Text.c_str();
    
    char a[20]="";
    const char *p;
    
    p=Edit1->Text.c_str();
    strcpy(a,p);
    Memo1->Lines->Add(a);
    
      send(taste);
      close_com();
    }
    
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      //Empfangs-Modus
      Memo1->Lines->Add("Empfangsmodus");
      Memo1->Lines->Add(TimeToStr(Time()));
        // Aufruf Funktion open_com()----------------------------------------
      static int i=0;
      if(i==0)
      {
      open_com();
      i++;
      }
      bool empfangen=true;
      char InString[22] = "";
      InString[1]='a';
      AnsiString zeit=TimeToStr(Time());
      zeit=zeit.SubString(7,2);
      int zeit2=StrToInt(zeit);
      int zeit3=0;
      while(empfangen)
      {
        DWORD dwRead = 0;
        ReadFile (hCom, &InString, sizeof (InString), &dwRead, NULL);
        if (dwRead == 0)
        {
         InString[dwRead] = '\0';
         //Memo1->Lines->Add(InString);
        }
        else
        {
         Memo1->Lines->Add(InString);
         empfangen=false;
        }
        AnsiString temp=TimeToStr(Time());
        temp=temp.SubString(7,2);
        zeit3=StrToInt(temp);
        if(zeit2==zeit3-10)
          empfangen=false;
        //Memo1->Lines->Append(InString);
      }
      //Memo1->Lines->Append(InString);
      Memo1->Lines->Add(TimeToStr(Time()));
      Memo1->Lines->Add("Empfangsmodus beendet");
    }
    //---------------------------------------------------------------------------
    

    stopt der Empfangsmodus wie gewollt und ich bekomme auch ein Zeichen auf dem Bildschirm ausgegeben. Leider ist es immer in "." egal ob ich ein "h" oder ein "a" sende.



  • oder 0x12345678
    aber das 0x muss mit

    corvin



  • Hmm, also da wo ich schaue steht leider kein 0x, dann bin ich vielleicht doch falsch. Muss gleich nochmal schauen.
    ...jo hab da glaub was falsch gemacht.
    Also bei meinem neuen Prog. wo immer der Punkt ausgegeben wird steht in allen Array-elementen ne 0x0 bis auf das erste, da steht 0x2E.(=dec 46) und das entspricht laut ASCII-Code-Tabelle dem Punkt. Also von demher ist das in Ordnung, ich glaube also, dass der Fehler beim Senden liegt.



  • ...ich bins nochmal. hab meinen Fehler gefunden, hab an einer Stelle eine Falsche Variable übergeben. (hab was wo rauskopiert und nicht geändert! 😉 )
    Hoffe dass ich jetzt auch alles in mein eigentliches Programm übertrgen bekommen.

    Danke für deine Hilfe!

    Kiki



  • Gern geschehen

    der Rabe


Anmelden zum Antworten