Forum: PC-Programmierung Daten einlesen! Hilfe benötigt!


von C++ HeroNoob (Gast)


Lesenswert?

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


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

von C++ HeroNoob (Gast)


Lesenswert?

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

von Matthias L. (matze88)


Lesenswert?

Hi!

Vorweg: Grausame Durchmischung  von C und C++! Das ist absoluter Murks 
und deine Probleme scheinen nicht bei dem Serial-Handling zu liegen 
sondern meilen weit weiter vorne! Arbeite einmal ein ordentliches C++ 
oder C Tutorial durch (entscheide dich bitte für EINE der beiden 
Sprachen).

Dein Problem hier wird sein, dass du beim Empfangen nicht darauf 
wartest, ob überhaupt Daten da sind. Essentielle Einstellungen bezüglich 
Blocking und Timeouts seh ich in dem Code nicht, keine Ahnung was da 
"Standardwerte" sind. Normalerweise stellt man die serielle 
Schnittstelle ersteinmal so ein wie man sie haben will, bevor man Daten 
überträgt.

Matthias

von C++ HeroNoob (Gast)


Lesenswert?

Die Probleme mit dem durchmischen, hab ich mittlerweile gelöst!
hab anfangs C programmiert, und dann aus einigen gründen bin ich 
umgestiegen!
hab ich dann nicht bedacht!
danke dafür erstmal!
und noch eine frage!
hab ein C++ Buch Grundlagen und fortgeschrittene Programmierung, aber da 
steht sowas nicht drin!
könntest du mir nicht vielleicht etwas helfen und mir zeigen wie du das 
machen würdest! bzw. wie ich auf daten warte?

von Matthias L. (matze88)


Lesenswert?

Hi!

Ich hab grad nicht so viel Zeit, möchte dir aber dennoch kurz Hilfe zur 
Selbsthilfe geben:

Schau mal in der Codesammlung nach dem Bootloader von Peter Danneger. Da 
ist eine Linuxversion eines Codes gepostet, der die serielle 
Schnittstelle (allerdings unter C) hinreichend initialisiert und mit dem 
man gut arbeiten kann. Ansonsten gibts da auch diverse Windows 
Versionen, die zumindest funktionieren. Die com.c dabei solltest du dir 
mal anschauen, das kannst du testweise 1 zu 1 übernehmen und dann deinen 
Wünschen anpassen. Dein Code oben sieht auch so schon so aus, als 
würdest du eine spezielle Klasse zum Com-Zugriff benutzen? Lies 
vielleicht mal die Dokumentation dazu.

Für weitere Hilfe bin ich leider jetzt nicht da, fahre morgen früh ne 
Woche weg... Aber das klappt sicher alles irgendwie noch :-)

Matthias

Edit: Du kannst deine Receive-Funktion auch in ner Schleife aufrufen, 
bis sie Daten empfangen hat. Wenn du dann noch eine Zeit-Funktion mit 
einbeziehst, kannst du dir eine Funktion bauen, die z.B. 100 ms auf 
Daten wartet, werden keine weiteren Daten mehr empfangen, so gibst du 
den Datenblock zurück.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.