Hat jemand zufällig ein Beispielprogramm oder Link wie man unter
Windows und Qt (4.5 oder auch älter) auf die serielle Schnittstelle
zugreifen kann?
Qextserialport kenn ich inzwischen; ich meine ein konkretes,
funktionsfähiges kleines Programm.
Würde mir sehr helfen.
Thanks...
HitMe
Hi,
Bin noch neu in Qt und C++.
Und wollte das Beispielporgramm Übersetzen, bekomme allerdings eine
Fehlermeldung:
/src/SerialWidget.cpp:54: error: no matching function for call to
`QextSerialPort::open()'
Die QectSerial Dateien habe ich soweit schon eingefügt.
Wo könnte mein Fehler liegen?
Thx,
Gruß nex
Hi,
kenn mich wie gesagt nicht sonderlich mit c++ und Qt aus, habe aber
trotzdem versucht ein bischen was zu fixen.
1. habe ich in der SerialWidget.cpp in zeile 166 den Außdruck
if ( file.open() )
zu
if ( file.open(QIODevice::ReadOnly) )
geändert.
2. meckert der Compiler dass die beiden Variablen
virtual qint64 bytesToWrite() const;
virtual qint64 writeData(const char *data, qint64 maxSize);
protected sind, habe sie daher kurzerhand auf public gesetzt.
Jetzt kommt der schöne Fehler :-1: error: collect2: ld returned 1 exit
status
Solangsam glaube ich das mit der Qextserialport ist alles nur eine
rießen Lüge ähnlich wie die Mondlandung nur halt wirklich.
> 2. meckert der Compiler dass die beiden Variablen> virtual qint64 bytesToWrite() const;> virtual qint64 writeData(const char *data, qint64 maxSize);> protected sind, habe sie daher kurzerhand auf public gesetzt.
Das sind keine Variablen.
> Solangsam glaube ich das mit der Qextserialport ist alles nur eine> rießen Lüge ähnlich wie die Mondlandung nur halt wirklich.
So langsam sollte Dir klar werden, daß C++-Programmierung nur
funktioniert, wenn man auch C++-Programmierung versteht.
Einfach irgendwo "was fixen" setzt Wissen und Verständnis voraus, sonst
geht das wie bei Dir in die Hose.
Im übrigen lässt Deine Rechtschreibung stark zu wünschen übrig; wenn Du
C- oder C++-Syntax mit ähnlicher "Lockerheit" schreibst, sind
Fehlermeldungen des Compilers überhaupt kein Wunder.
Hi,
muss mich für meine Rechtschreibung entschuldigen, ;-) und versuche
nochmal das Ganze sachlicher auszudrücken. Ich hoffe es passt dann noch
vom Thema zum Beitrag.
Ich versuche gerade ein Programm zu entwickeln, welches Informationen
über die Serielle Schnittstelle bekommt. In vielen Foren wird hier auf
QextSerialPort verwiesen, da ich sowieso mit Qt arbeite, klingt das auch
logisch.
Da ich aber wie Jeder unerfahren anfange, wollte ich anhand eines
kleinen Beispiels die Grundfunktionen der QextSerialPort kennenlernen.
Das Programm bringt allerdings die bereits genannten Fehlermeldungen.
Nun würde ich gerne wissen, ob das Programm allgemein korrekt
funktioniert. (wovon ich eigentlich ausgehe).?
Dann würde dies bedeuten, dass meine Implementierung der QextSerialPort
fehlerhaft ist.
Es war wohl naiv zu glauben ich könnte einfach die Source und
Headerdateien einfügen. Daher stellt sich nun die Frage wie ich die
QextSerialPort richtig unter Windows installiere. Gibt es dazu eine
Anleitung? (google gab bisher nichts aussagekräftiges)
Und zu meinem letzten Problem, die Zielapplikation soll auf Embedded
Linux laufen. Bisher war dies durch die plattformübergreifende
Programmierung von Qt kein Problem, nun habe ich bei meiner Recherche
festgestellt, dass QextSerialPort in Windows und Linux völlig
verschieden implementiert wird. Lohnt sich dann der Aufwand das ganze
erst unter Windows zu entwickeln?
Über eine Antwort würde ich mich sehr freuen,
Gruß nex
PS:
Sorry für die Länge des Beitrags, aber ich hoffe ich kann damit meine
vorherige chaotische Aussagen wieder gut machen.
nex schrieb:
> 2. meckert der Compiler dass die beiden Variablen> virtual qint64 bytesToWrite() const;> virtual qint64 writeData(const char *data, qint64 maxSize);>> protected sind, habe sie daher kurzerhand auf public gesetzt.
Hab ich auch gemacht, dann kompiliert der Code zumindest mal.
> Jetzt kommt der schöne Fehler :-1: error: collect2: ld returned 1 exit> status
Der Linker findet die Library qextserialport nicht (bei mir unter Win
XP):
C:\Programme\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\
ld.exe: cannot find -lqextserialport
Die muss man erstmal erstellen (mit qmake und mingw32-make), das hat bei
mir auch geklappt. libqextserialport.a heißt dann die erzeugte Datei.
Nun kommt's: Egal wie ich versuche sie einzubinden und den Pfad zu
setzen und was weiß ich, der Linker findet sie immer noch nicht. Zu
Hülf! Es ist spät und ich bin müde :-(
>verschieden implementiert wird. Lohnt sich dann der Aufwand das ganze>erst unter Windows zu entwickeln?
Es lohnt um Erfahrung zu sammeln.
Es lohnt nicht um das Problem zu loesen.
Gast4
> Und zu meinem letzten Problem, die Zielapplikation soll auf> Embedded Linux laufen. Bisher war dies durch die> plattformübergreifende Programmierung von Qt kein Problem, nun> habe ich bei meiner Recherche festgestellt, dass QextSerialPort in> Windows und Linux völlig verschieden implementiert wird.Implementiert natürlich, genauso eben wie Qt selbst. Verwendet wird
sie aber gleich. (bis auf die Namen der Ports) Das ist ja gerade der
Witz dran.
> libqextserialport.a heißt dann die erzeugte Datei.> Nun kommt's: Egal wie ich versuche sie einzubinden und den Pfad zu> setzen und was weiß ich, der Linker findet sie immer noch nicht. Zu> Hülf! Es ist spät und ich bin müde :-(
Der Linker-Kommandozeile ein -L<pfad> hinzufügen, wobei <pfad> für das
Verzeichnis steht, in dem die libqextserialport.a liegt.
Hallo zusammen,
Ich habe die QextSerialPort Lib auch mal ausprobiert und bin nicht
besonders begeistert.
Lesen vom Com Port funzt gut. Nur beim Schreiben auf den Com Port gibt
es Probleme. Ich verwende den FT232RL zur Kommunikation mit einem
ATmega64. Der ATmega reagiert nur sporadisch auf die übermittelten
Befehle. Ein Test mit Putty als auch mit einem eigenen Programm zur
COM-Kommunikation, welches ich in C# geschrieben habe zeigt allerdings
die volle Funktion.
Hat jemand ein ähnliches Verhalten festgestellt?
Beste Grüße, Christoph
@ Christoph
>Ein Test mit Putty als auch mit einem eigenen Programm zur>COM-Kommunikation, welches ich in C# geschrieben habe zeigt allerdings>die volle Funktion.
was hast du den getestet das QtProgramm oder (die Kommunikation mit)
ATmega64?
Das Portsniffer Program "Portmon" von Microsoft kennst du schon?
Hat es jemand auch mal unter Linux getestet? Abgesehen davon, dass die
POSIX-Implementierung der für Windows hinterherhinkt, gibt writeData()
an einen per USB angebundenem FT232 nichts aus. Das Einlesen
funktioniert dagegen wunderbar (eventbasiert).
Hallo R.W.
gerade eben habe ich ein kleines Testprogramm für qextserial
ausprobiert.
Das Abfragen der Daten vom seriellen Port ist dort allerdings mit einem
"SIGNAL" von einem 1Sekunden Timer gelöst.
Kannst Du mir sagen, wie der Code für ein "SIGNAL" direkt vom RX
aussehen muss?
Gruß,
stefan
2 stefan ,
Versuchen Sie QSerialDevice!
SVN: http://fireforge.net/snapshots.php?group_id=199
Es befindet sich im Verzeichnis /examples Beispiel /sreader, die das
Datensignal lautet readyRead
PS: Wenn ich Sie richtig verstehe
// config ist eine von PortSettings abgeleitete Klasse
12
device.setBaudRate(config->BaudRate);
13
device.setDataBits(config->DataBits);
14
device.setParity(config->Parity);
15
device.setStopBits(config->StopBits);
16
device.setFlowControl(config->FlowControl);
17
device.setTimeout(config->Timeout_Millisec);
18
19
20
device.setQueryMode(QextSerialPort::EventDriven);
21
device.setPortName(port);
22
23
device.open(QIODevice::ReadWrite);
Wenn du große Nachrichten verschickst, kommen sie in Stückchen mit
mehreren Signalen hintereinander. Du musst die empfangenen Daten also
zwischenspeichern und nach und nach zusammenbauen.
Was bei mir dazu geführt hat, dass nichts ausgegeben wurde, war, dass
strandardmäßig FlowControl eingeschalten ist. Ich habs in meinen
Standardeinstellungen dann ausgeschalten.
Richard
Vielen Dank für eure schnellen Antworten.
>Was bei mir dazu geführt hat, dass nichts ausgegeben wurde, war, dass>strandardmäßig FlowControl eingeschalten ist.
So was in der Art ist mir gestern Abend auch noch zu dem Problem
eingefallen: Ich hatte ein Programm in Java mit der Library für die
serielle Schnittstelle "rxtx"
http://rxtx.qbang.org/wiki/index.php/Main_Page
geschrieben. Zwischen Linux und Windows war das Verhalten auch
unterschiedlich. Ich habe ewig gebraucht um den Fehler zu finden.
Letzendlich war es dann auch die FlowControl. Das Problem der
unterschiedlichen Initialisierung scheint also eine Schicht tiefer zu
liegen.
Gruß,
Stefan