You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Sunday, April 5th 2009, 1:01pm

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)_

C/C++ Quellcode

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


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

2

Sunday, April 5th 2009, 2:30pm

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

C/C++ Quellcode

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

3

Sunday, April 5th 2009, 7:15pm

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:

Source code

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


Wenn C++, dann so:

Source code

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


Wenn C:

Source code

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


Source code

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

Warum?

C++:

Source code

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


Source code

1
2
char* lpBuffer = new char[500];
//      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.

Source code

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

Genau das selbe....
MfG.

4

Sunday, April 5th 2009, 7:35pm

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

5

Sunday, April 5th 2009, 7:39pm

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.

Quoted


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:

Source code

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

MfG

6

Sunday, April 5th 2009, 8:00pm

C/C++ Quellcode

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


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!

7

Sunday, April 5th 2009, 10:30pm

Source code

1
2
     COMPort.Open(5,19200);
     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:

Source code

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



Source code

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

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:

Source code

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

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.:

Source code

1
#include <mmsystem.h>

Für was? Du verwendest hier keinen Timer.

8

Thursday, April 9th 2009, 11:00am

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

9

Friday, April 10th 2009, 9:47am

Ihr seid die BESTEN!
Nein nein nein, nicht die Besten, die ALLERBESTEN, jaaaaaaahaaa!
muahahaha
ihr glaub nicht wie ich mich freu!
es geht!
seit zwei wochen bin ich halb am heulen, weil es nicht geht!
ihr seid die beeeessstttteeeeen!
danke!
ich lieeebe euch!
ich lern jetzt mein C++ Buch auswendig!

gruß

Michael

Similar threads

Social bookmarks