Hallo Leute,
ich würde gerne wissen wie ich Daten über RS232-Verbindung reinschreiben kann.
Ich lese die daten folgendermaßen aus:
Das schreiben der Daten sollte auch fast gleich sein, aber ich kriege es net hin.
Vlt könnt ihr mir ja helfen ^^
Achja! Bevor ich es vergesse, die Datensätze sind in einen TXT Datei gespeichert.
Die Werte sind HEX Zahlen und sollten auch so wieder reingeschrieben werden.
Es wäre super nett wenn ihr mir weiterhelfen könntet.
gruß
guenter67
ich würde gerne wissen wie ich Daten über RS232-Verbindung reinschreiben kann.
Ich lese die daten folgendermaßen aus:
Code:
void __fastcall TForm1::BitBtn5Click(TObject *Sender) { int retval = 0; unsigned char ucData0,ucData1,ucData2,ucData3,ucData4; TCursor Save_Cursor = Screen->Cursor; Screen->Cursor = crHourGlass; // Cursor als Sanduhr try { Application->ProcessMessages(); if(Reader->Get_COM_Open_Status() == false) { Reader->CMD_Open_RS232(); } if(Reader->Get_COM_Open_Status() == false) { retval = ERR_COMPORT_NOT_OPEN; } else { retval = ERR_NO_ERROR; } if(retval == ERR_NO_ERROR) { retval = Reader->SetTransparentMode(1500,1); if(retval != ERR_NO_ERROR) { retval = ERR_SET_TRANSPARENT_MODE; // Falls wir schon im Transparent Mode sind "Info Reader Extern" senden um // dies zu überprüfen retval = Reader->InfoReaderExtern(1500,1); if(retval != ERR_NO_ERROR) { // Falls "Info Reader Extern" Kommando nicht funktioniert hat // Kommando Direct Transparent Mode probieren retval = Reader->SetDirectTransparentMode(1500,1); if(retval != ERR_NO_ERROR) { // Falls das auch nichts bringt @@EXIT@@ probieren Reader->ExitTransparentMode(); Sleep(2500); retval = Reader->SetTransparentMode(1500,1); if(retval != ERR_NO_ERROR) { retval = ERR_SET_TRANSPARENT_MODE; } } } } } Application->ProcessMessages(); if(retval == ERR_NO_ERROR) { retval = Reader->InfoReaderExtern(1500,1); if(retval != ERR_NO_ERROR) { retval = ERR_READER_INFO_EXTERN; } } if(retval == ERR_NO_ERROR) { ShowMessage("Mastercard"); } // ToDo: if(retval == ERR_NO_ERROR) { int iStartAdr; int iTagAdr; int TagAnzahl; unsigned char ucLSB0; unsigned char ucMSB0; unsigned char ucLSB1; unsigned char ucMSB1; unsigned char ucLSB2; unsigned char ucMSB2; unsigned char ucLSB3; unsigned char ucMSB3; unsigned char ucLSB4; unsigned char ucMSB4; unsigned char ucLSB5; unsigned char ucMSB5; /*********************Anzeige von TagAnzahl Anfang*********************/ iTagAdr = EditTagAnzahlAdresse->Text.ToInt(); ucLSB5 = ( iTagAdr & 0x00FF); ucMSB5 = ((iTagAdr >> 8) & 0x00FF); retval = Reader->ReadWriteEEPROMExtern(0x52,ucLSB5,ucMSB5,0x00,1500,1); if(retval != ERR_NO_ERROR) { retval = ERR_EEPROM_EXTERN; } Reader->GetEEPromDataExtern(iTagAdr,&ucData0); EditTagAnzahl->Text = EditTagAnzahl->Text.sprintf("%02X", ucData0); TagAnzahl = EditTagAnzahl->Text.ToInt(); /*********************Anzeige von TagAnzahl Ende*********************/ /*********************Anzeige von TxP_ID Anfang*******************/ int i=0; iStartAdr = 6; TagAnzahl-= 1; AnsiString ansiMerker; int j, x; Form1->ProgressBar1->Max = TagAnzahl; Form1->ProgressBar1->Visible = true; while(i != TagAnzahl) { ucLSB0 = (iStartAdr & 0x00FF); ucMSB0 = ((iStartAdr >> 8) & 0x00FF); ucLSB1 = ((iStartAdr+1) & 0x00FF); ucMSB1 = (((iStartAdr+1) >> 8) & 0x00FF); ucLSB2 = ((iStartAdr+2) & 0x00FF); ucMSB2 = (((iStartAdr+2) >> 8) & 0x00FF); ucLSB3 = ((iStartAdr+3) & 0x00FF); ucMSB3 = (((iStartAdr+3) >> 8) & 0x00FF); ucLSB4 = ((iStartAdr+4) & 0x00FF); ucMSB4 = (((iStartAdr+4) >> 8) & 0x00FF); // 0x57 = Write / 0x52 = Read // LSB // MSB // Wert // Timeout // Wiederholung Kommando retval = Reader->ReadWriteEEPROMExtern(0x52,ucLSB0,ucMSB0,0x00,1500,1); if(retval != ERR_NO_ERROR) { retval = ERR_EEPROM_EXTERN; } retval = Reader->ReadWriteEEPROMExtern(0x52,ucLSB1,ucMSB1,0x00,1500,1); if(retval != ERR_NO_ERROR) { retval = ERR_EEPROM_EXTERN; } retval = Reader->ReadWriteEEPROMExtern(0x52,ucLSB2,ucMSB2,0x00,1500,1); if(retval != ERR_NO_ERROR) { retval = ERR_EEPROM_EXTERN; } retval = Reader->ReadWriteEEPROMExtern(0x52,ucLSB3,ucMSB3,0x00,1500,1); if(retval != ERR_NO_ERROR) { retval = ERR_EEPROM_EXTERN; } retval = Reader->ReadWriteEEPROMExtern(0x52,ucLSB4,ucMSB4,0x00,1500,1); if(retval != ERR_NO_ERROR) { retval = ERR_EEPROM_EXTERN; } if(retval == ERR_NO_ERROR) { Reader->GetEEPromDataExtern(iStartAdr,&ucData0); Reader->GetEEPromDataExtern(iStartAdr+1,&ucData1); Reader->GetEEPromDataExtern(iStartAdr+2,&ucData2); Reader->GetEEPromDataExtern(iStartAdr+3,&ucData3); Reader->GetEEPromDataExtern(iStartAdr+4,&ucData4); EditUnbekannt->Text = "UNBEKANNT"; EditTxpID->Text = EditTxpID->Text.sprintf("%02X%02X%02X%02X", ucData3,ucData2,ucData1,ucData0); EditTyp->Text = EditTyp->Text.sprintf("%02X", ucData4); EditSO->Text = "Ja"; // Datensatz aus SmartOpen gelesen // Jetzt diesen Datensatz in der Struktur suchen j = -1; for (x = 0; x < Informationen.Anzahl; x++) { ansiMerker = Informationen.alleUser[x].TxP_ID; if (ansiMerker == EditTxpID->Text) { j = x; } } // Wenn Datensatz (d.h. Transponder ID und Typ) nicht vorhanden // den Datensatz hinzufügen if (j == -1) { //Überprüfen ob MAX_USER erreicht if(Informationen.Anzahl < 100) { strcpy (Informationen.alleUser[Informationen.Anzahl].Vorname, EditUnbekannt->Text.c_str()); strcpy (Informationen.alleUser[Informationen.Anzahl].Name, EditUnbekannt->Text.c_str()); strcpy (Informationen.alleUser[Informationen.Anzahl].TxP_ID, EditTxpID->Text.c_str()); strcpy (Informationen.alleUser[Informationen.Anzahl].Typ, EditTyp->Text.c_str()); strcpy (Informationen.alleUser[Informationen.Anzahl].SO, EditSO->Text.c_str()); Informationen.Anzahl++; } else { MessageDlg("Maximale Benutzeranzahl erreicht!\nLöschen Sie einige Users um\nWeiter arbeiten zu können!", mtError, TMsgDlgButtons()<< mbOK, 0); } } else { // Wenn Datensatz vorhanden an der Stelle ein JA setzen strcpy (Informationen.alleUser[j].SO, EditSO->Text.c_str()); } } iStartAdr+=5; i++; Form1->ProgressBar1->Position = i; Application->ProcessMessages(); } fktSchreiben (&Informationen); fktAnzeigen(&Informationen); Form1->ProgressBar1->Visible = false; } Reader->ExitTransparentMode(); Reader->CMD_Close_RS232(); // Auf @@exit@@ warten Sleep(550); Application->ProcessMessages(); } __finally { Screen->Cursor = Save_Cursor; // Cursor immer wiederherstellen } }
Vlt könnt ihr mir ja helfen ^^
Achja! Bevor ich es vergesse, die Datensätze sind in einen TXT Datei gespeichert.
Die Werte sind HEX Zahlen und sollten auch so wieder reingeschrieben werden.
Es wäre super nett wenn ihr mir weiterhelfen könntet.
gruß
guenter67
Comment