Daten einlesen! Hilfe benötigt!

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Daten einlesen! Hilfe benötigt!

    Ich habe vor kurzer Zeit schon einmal hier etwas gefragt, aber die Frage hat sich dann von selbst erledigt und ich habe mich mit dem Thema befasst und soweit so gut, es funktioniert teilweise auch mehr oder minder perfekt!
    Mein Ziel vorerst einmal:
    Ich sende über den Com port daten von einem pc und will mir die daten einfach anzeigen lassen auf dem anderen, also so wie : prinft("hallo"), so soll es mir dann in dem Fenster die gesendeten daten ausgeben!

    Mein sende code(funktioniert, mit einigen Terminalprogrammen getestet)_

    Quellcode

    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <mmsystem.h>
    4. #include <cstdlib>
    5. #include <iostream>
    6. #include "Serial.h"
    7. using namespace std;
    8. CSerial COMPort;
    9. int main(int argc, char *argv[])
    10. {
    11. COMPort.Open(5,19200);
    12. std::string str ("Hallo! Hoffe ihr koennt mir helfen!");
    13. COMPort.SendData (str.c_str(), str.length()+1);
    14. printf("%s",str.c_str());
    15. getchar();
    16. COMPort.Close();
    17. return EXIT_SUCCESS;
    18. }
    Alles anzeigen


    Ich würde mich freuen, wenn ihr mir vielleicht senden könntet, wie ich
    die daten auf dem anderen pc einlesen kann! so ein befehl wie COMPort.ReadData, oder so, wäre toll, wenn es den gibt, habe nur nichts genaues gefunden!
    nur vorgefertigte komplizierte programme, die nicht funktionieren bzw., die ich
    nirgends implementieren kann, weil sie einfach zu kompliziert sind!
    ich möchte einfach alle daten, die ich hier sende, auf dem anderen pc anzeigen lassen!

    lg

    The Hero/Noob
  • So, habe mir mit der Hilfe der Befehle auf der Seite(siehe oben), das zusammengestellt, nur es gibt mir immer gesendete Bytes 0 aus!
    Die ansteuerung, also das senden funktioniert allerdings, habe ich mit Terminalprogrammen probiert! nur es empfängt niemals die daten anscheinend mithilfe dieses programms!
    kann mir wer behilflich sein?
    sendeprogramm(funktioniert) : oben
    Empfangsprogramm(funktioniert nicht) : gleich hier drunter!

    danke

    Quellcode

    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <mmsystem.h>
    4. #include <cstdlib>
    5. #include <iostream>
    6. #include "Serial.h"
    7. using namespace std;
    8. CSerial COMPort;
    9. int main(int argc, char *argv[])
    10. {
    11. COMPort.Open(5,19200);
    12. if (COMPort.Open(5, 19200))
    13. {
    14. char* lpBuffer = new char[500];
    15. int nBytesRead = COMPort.ReadData(lpBuffer, 500);
    16. printf("%d",nBytesRead);
    17. getchar();
    18. // delete []lpBuffer;
    19. }
    20. }
    Alles anzeigen
  • Tut mir leid Michael, aber lies BITTE BITTE erstmal ein Buch über C oder C++-Programmierung.
    Und um Himels Willen entscheide dich!
    Dieser Mix ist nicht gesund.
    Erstmal:

    C-Quellcode

    1. #include <stdio.h>
    2. #include <cstdlib>


    Wenn C++, dann so:

    C-Quellcode

    1. #include <cstdio>
    2. #include <cstdlib>


    Wenn C:

    C-Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>


    Quellcode

    1. printf("%s",str.c_str());

    Warum?

    C++:

    Quellcode

    1. std::cout << str << std::endl;


    Quellcode

    1. char* lpBuffer = new char[500];
    2. // delete []lpBuffer;

    Die Allokation kann man lassen, auch wenn man da nicht unbedingt new dazu braucht. ein lpBuffer[500] erzielt den gleichen Effekt.
    Aber warum zur Hölle kommentierst du den delete-Befehl weg? Das erzeugt ein Speicherleck.

    Quellcode

    1. char lpBuffer[500];
    2. int nBytesRead = COMPort.ReadData(lpBuffer, 500);

    Genau das selbe....
    MfG.
    Sometimes it pays to stay in bed in Monday, rather than spending the rest of the week debugging Monday's code. ~Dan Salomon
  • Danke für die Tips!
    aber warum das programm nicht ging, weiß ich immer noch nicht!
    denn das delete hab ich wieder aktiviert und es ging immer noch nicht!
    mir ist das echt wichtig!
    und du siehst, ich geb mir ja auch mühe und will es ja können!
    hab sowieso vor mir ein C++ buch zu kaufen, aber ich habe jetzt schon eines:
    "C++ Grundlagen und fortgeschrittene Programmierung"
    da steht aber nix davon drin!
    Wärs möglich, dass du mir vielleicht schreibst, wie du einlesen würdest von COM?
    lg

    Michael
  • Ich gar nicht, weil es nicht nötig ist. Warum auch?
    Man kann alles über Netzwerk machen und dafür gibts genug Programme als bsp. Putty.


    da steht aber nix davon drin!

    Lern bitte erst die Grundlagen und lerne wie Programme funktionieren und wie man sie richtig aufbaut.

    Aber nur mal so als Frage: WO ist die Schleife des Programms, das lauscht? Eines sendet, eines lauscht.
    So wie ich das sehe, läuft das Programm nur einmal ab. Du musst aber ständig lauschen, sonst sind die Daten futsch afaik.

    edit: Kleiner Pseudo-Code als Hilfe wie ich das meine:

    Quellcode

    1. int main(int argc, char** argv)
    2. {
    3. while ( ProgrammLäuft )
    4. {
    5. ergebnis = ComPort.Listen();
    6. if ( ergebnis )
    7. std::cout << ergebnis;
    8. }
    9. }

    MfG
    Sometimes it pays to stay in bed in Monday, rather than spending the rest of the week debugging Monday's code. ~Dan Salomon
  • Quellcode

    1. #include <windows.h>
    2. #include <cstdio>
    3. #include <mmsystem.h>
    4. #include <cstdlib>
    5. #include <iostream>
    6. #include "Serial.h"
    7. using namespace std;
    8. CSerial COMPort;
    9. int main(int argc, char *argv[])
    10. {
    11. int c=0;
    12. COMPort.Open(5,19200);
    13. if (COMPort.Open(5,19200))
    14. {
    15. while(c<=100)
    16. {
    17. char* lpBuffer = new char[500];
    18. int nBytesRead = COMPort.ReadData(lpBuffer, 500);
    19. if(nBytesRead > 0)
    20. {
    21. printf("%d",nBytesRead);
    22. getchar();
    23. delete []lpBuffer;
    24. }
    25. }
    26. }
    27. }
    Alles anzeigen


    so, jetzt hab ich das eingebaut!
    du hast recht, bin echt ein anfänger!
    aber ich habe kurzfristig diese aufgabe bekommen in der schule bei einem projekt, und unser betreuer ist
    eher hardware mäßig gut drauf, nicht beim programmieren!
    somit ist es halt sehr schwer, was das betrifft!
    ich werde versuchen, dass morgen laufen zu lassen und hoffe es geht!

    vielen dank!
  • Quellcode

    1. COMPort.Open(5,19200);
    2. if (COMPort.Open(5,19200))

    Du öffnest den Port 2x.
    Funktionen könenn Rückgabewerte haben und diese kann man speichern.
    Ich weiss nicht welchen hier Open verwendet aber mal angenommen es ist bool:

    Quellcode

    1. bool bRetValue = COMPort.Open( 5, 19200 );
    2. if ( bRetValue )



    Quellcode

    1. while(c<=100)
    2. {
    3. char* lpBuffer = new char[500];
    4. int nBytesRead = COMPort.ReadData(lpBuffer, 500);
    5. if(nBytesRead > 0)
    6. {
    7. printf("%d",nBytesRead);
    8. getchar();
    9. delete []lpBuffer;
    10. }

    Das ist schon ganz gut. Aber du erzeugst hier ein massives Speicherleck!
    Du erzeugst in jeder Schleife 500 Einheiten von char, gibst diese aber nur frei, wenn du etwas empfängst!
    Besser so, wie ich dir es gezeigt habe:

    Quellcode

    1. while(c<=100)
    2. {
    3. char lpBuffer[500];
    4. int nBytesRead = COMPort.ReadData(lpBuffer, 500);
    5. if(nBytesRead > 0)
    6. {
    7. std::cout << "Anzahl Bytes gelesen: " << nBytesRead << std::endl;
    8. getchar();
    9. }

    Das ist genauso gültig. Und erzeugt vor allem kein Leck .
    Dann könnte man von getchar() noch abfragen, welche Taste gedrückt wurde ( über den Rückgabewert ) und bei Escape oder q das Programm beenden.
    MfG
    ps.:

    Quellcode

    1. #include <mmsystem.h>

    Für was? Du verwendest hier keinen Timer.
    Sometimes it pays to stay in bed in Monday, rather than spending the rest of the week debugging Monday's code. ~Dan Salomon
  • Ich habe mir eure vielen Vorschläge (P.S.:Ihr seid echt spitze!) zu Herzen genommen, mal ein bisschen
    geschaut, damit ich auch alles versteh, will ja nicht nur abschreiben, sondern auch was lernen dabei!
    ich bin heute leider nicht dazu im Stande das ganze zu testen!
    Morgen jedoch, werde ich das ganze wieder testen und schauen ob nun nicht nur senden der daten, sondern auch empfangen geht!
    da ihr anscheinend sehr hilfsbereit seid, denke ich, wird es euch vielleicht interessieren obs nun so geht!
    ich sende euch morgen ob es geht, und wenn nicht, dann was genau nicht geht bzw. was nicht passen könnte!

    Hoffe jedoch, dass nun alles passt!

    lg

    Michael