MS Windows Borland C++ builder V5 serielee Schnittstelle
-
setze da mal einen breakpoint und schau dir die Variable als Hex-Zahl an
corvin
-
ist die hardware richtig????
corvin
-
Hardware?
Meinst du des Kabel? Wenn ja, des müsste schon des richtige sein. Ich kann über ein Terminal (TeraTerm) eine Verbindung über Com1 herstellen und auch Daten damit übertragen. Also daran dürfte es wohl nicht liegen.
Mir ist aber gerade etwas anderes aufgefallen:Die vorbefinierten Funktionen sind für BCB Version 3 geschreiben. Aber des dürfte ja eigentlich auch keine Probleme machen, da ich ja ne höhere Version habe.
...zu der Sache mit dem Breakpoint:
den kann ich zwar setzen, weiß allerdings nicht wo ich mir dann die Zahl als Hex-Wert anschauen kann. (habe noch nicht so viel Erfahrung mit BCB
)
-
Ok, ich auch noch nicht

Wert markieren -> Str+F5
in dem erscheinenden Fenster -> Doppelklick auf den Wert -> Hexadezimal auswählen -> OK klicken[EDIT] wegen dem Kabel, bei mir konnte nichts gesendet werden, weil der Sendepin auf dem anderen Sendepin sendet (un empfangen tu ich auf den Empfangspin)
corvin
-
[Edit] Falscher Code
corvin
-
Hex Wert:
empfangen=true
test= 00425D5FZu 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 mitcorvin
-
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