Problem mit Serieller (RS232)[gelöst, thx]

Alles rund um die Programmierung mit Qt
Antworten
Lukas
Beiträge: 17
Registriert: 17. Mai 2010 21:05

Problem mit Serieller (RS232)[gelöst, thx]

Beitrag von Lukas »

Hallo

Ich versuche mich nun schon seit ein paar Tagen in QT/c++ einzuarbeiten.
Derzeit sendet mir ein FPGA über die Serielle Daten, das funktioniert auch korrekt.

Nun würde ich gerne diese Daten am PC verarbeiten.

Habe im wesentlichen diese beiden fertigen Programme gefunden:
QextSerialPort und QSerialDevice
Nun habe ich aber mit beiden leider ein Problem:


QSerialDevice: Fehler beim Erstellen:

Code: Alles auswählen

..........g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I'g:/Qt/2010.02.1/qt/include/QtCore' -I'g:/Qt/2010.02.1/qt/include' -I'../../qserialdevice' -I'g:/Qt/2010.02.1/qt/include/ActiveQt' -I'../../build/bin/reader/moc' -I'g:/Qt/2010.02.1/qt/mkspecs/win32-g++' -o ../../build/bin/reader/obj/main.o main.cpp
windres -i version.rc -o ../../build/bin/reader/obj/version_res.o --include-dir=.
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-subsystem,console -mthreads -Wl -o ../../build/bin/reader/release/reader.exe ../../build/bin/reader/obj/main.o -L'../../build/lib/qintegratedserialdevice/release' -L'g:/Qt/2010.02.1/qt/lib' ../../build/bin/reader/obj/version_res.o -lqserialdevice -lQtCore4
mingw32-make[1]: Leaving directory `h:/tricopter/qt/rs232test2/QSerialDevice_v0.2.0/examples/reader'
mingw32-make: Leaving directory `H:/tricopter/qt/rs232test2/QSerialDevice_v0.2.0'
g:/qt/2010.02.1/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -lqserialdevice
collect2: ld returned 1 exit status
mingw32-make[1]: *** [../../build/bin/reader/release/reader.exe] Error 1
mingw32-make: *** [sub-examples-reader-make_default-ordered] Error 2
Beendet mit Rückgabewert 2.
Fehler beim Erstellen des Projekts BuildExamples
Beim Ausführen des Build-Schritts 'Make'
cannot find -lqserialdevice -> was kann ich dagegen tun?

QextSerialPort:
"Funktioniert" soweit ganz gut, dachte ich jedenfalls.
Habe bereits verschiedenes dazu geschrieben um meine Daten-Pakete zu erkennen und zu überprüfen.
Dann ist mir aufgefallen dass nur das erste Byte jedes Paketes erkannt wird. Habe dann nochmals den original Code genommen ohne Änderungen meinerseits, und siehe da gleiches Problem.

Ein Daten Paket besteht aus 5x8Bit die in kurzem Abstand hintereinander gesendet werden.
Dann ist eine längere Pause, und ein neues Paket wird gesendet.
QextSerialPort erkennt aber nur das erste Byte. ???
Zwischendurch kommen aber noch vereinzelt andere Zeichen an.
Ein Serielles Tool "Terminal.exe" und ein Visual Basic Programm erkennen die Daten korrekt.


Bin leider ziemlich ratlos an was das liegen kann.


Achja, arbeite unter Win Xp mit QT Creator

128000Baud, keine Parity, 1 Stopbit, Flowcontrol=none, Serieller Adapter ist ein USB to Serial
Habe auch schon mit 128000 und 57600 Baud versucht, selbes Problem.

Ich hoffe ihr könnt mir weiterhelfen, ich quäle mich jetzt schon seit Tagen damit herum ;((

Großes Dankeschön für Eure Hilfe.


schönen Abend

lg Lukas
Zuletzt geändert von Lukas am 19. Mai 2010 11:17, insgesamt 1-mal geändert.
stardust5383
Beiträge: 28
Registriert: 31. Oktober 2009 10:36

Beitrag von stardust5383 »

Hallo Lukas,

es wäre vielleicht mal ganz gut, wenn Du den Quelltext postest, aber ich vermute anhand Deiner Fehlermeldung mal dass er die Library qserialdevice nicht finden kann. Hast Du diese in den Projektabhängigkeiten eingetragen? Hatte vor einiger Zeit mal ähnliche Fehler und konnte diese durch korrekte Angabe der Library Paths und Projektabhängigkeiten beseitigen. Wenn ich mich nicht täusche gehört zu der -lqserialdevice auch vorher noch mit -L die Angabe des Librarypfades.
Lukas
Beiträge: 17
Registriert: 17. Mai 2010 21:05

Beitrag von Lukas »

Hallo

Danke für deine Antwort

Das ist das original Verzeichnis/Daten von: http://sourceforge.net/projects/qextserialport/files/
bzw
http://qt-apps.org/content/show.php/QSe ... ent=112039

Würde mich sehr wundern wenn da irgend etwas falsch wäre.

Vielleicht stimmt die Ordner Struktur nicht (Linux/Windows), oder muss außer Projekt öffnen und ausführen noch irgend etwas machen?
In der beigelegten Doku dazu steht jeden falls nichts.

Warum bei qextserialport nur das erste Byte eingelesen wird, ist mir auch noch unklar...
Werde versuchen das in der Arbeit nochmals nachzuvollziehen, vielleicht ist ja der USB to Seriell Controller schuld.

Code würd ich gerne Posten, aber ich glaube es ist einfacher Ihr schaut euch die original Daten an.

Großes Danke schön

lg Lukas
stardust5383
Beiträge: 28
Registriert: 31. Oktober 2009 10:36

Beitrag von stardust5383 »

Du hast das Projekt entpackt, ausgeführt und dann kam schon der fehler?
Lukas
Beiträge: 17
Registriert: 17. Mai 2010 21:05

Beitrag von Lukas »

Ja genau.
Ich habe zum Beispiel die BuildExamples.pro, geöffnet und Ausgeführt -> Fehler
Auf meinem PC in der Arbeit habe ich genau das selbe Problem.

Bei den anderen .pro im examples Ordner kommt der gleiche Fehler.
stardust5383
Beiträge: 28
Registriert: 31. Oktober 2009 10:36

Beitrag von stardust5383 »

Hast du denn die LD_LIBRARY und PATH Variablen mal überprüft?
Lukas
Beiträge: 17
Registriert: 17. Mai 2010 21:05

Beitrag von Lukas »

Hallo

Danke für deine Antwort

Ist die LD_LIBRARY nicht für Linux?
Welche Path Variablen sollten den eingetragen sein, einen Eintrag von QT konnte ich nicht entdecken.

Danke für deine Mühe

lg Lukas
kuzulis
Beiträge: 25
Registriert: 30. September 2009 14:55
Wohnort: Russland, Brjansk
Kontaktdaten:

Beitrag von kuzulis »

Hallo Lukas!
Was QSerialDevice:

1) Kopien eine bessere Version aus dem SVN-site: http://fireforge.net/scm/?group_id=199
(Nehmen Sie die SVN-Client, also nicht müssen Sie auf den Link:
[Download The Nightly SVN Snapshot Tree],
weil es auf der Website falsch funktioniert).

Geben Sie den Befehl:
# svn checkout svn://scm.fireforge.net/svnroot/qserialdevice

PS: Version v0.2.0 ist bereits überholt.

2) Um eine Verbindung der Bibliothek QSerialDevice als statisch - sehen, wie es in den Beispielen in das Verzeichnis / examples getan.

3) Um eine Verbindung der Bibliothek als dynamische QSerialDevice:
- Ändern Sie die Datei *. pro Bibliotheken
- Sammeln Sie die Bibliothek.
- Wenn Sie Windows haben - kopieren Sie dann die Bibliothek in ein Verzeichnis mit dem Projekt
- Wenn Sie ein Linux - kopieren Sie dann die Bibliothek und die Header in / usr / lib (zum Beispiel) oder die Verwendung LD_LIBRARY (du oben empfohlen)

4)Die Hauptsache - lesen Sie die Readme!

Viel Glück! :)

PS: Sorry Bad Deutsch
Lukas
Beiträge: 17
Registriert: 17. Mai 2010 21:05

Beitrag von Lukas »

Hi

Danke für deine Antwort / спасибо за ответ

Ich habe mir nun mittels TortoiseSVN die qserialdevice daten herunter geladen.
Im Projekt steht dann aber auch dass dies die Version 0.2.0 ist, die ja veraltet ist wenn ich dich richtig verstanden habe.

Punkt 3) verstehe ich leider nicht so ganz. ;(((

Habe aber eine Readme.txt in dem Projekt gefunden:

Code: Alles auswählen

2. Building
~~~~~~~~~~~~

2.1 Requirements.

To build the project in OS Windows and GNU/Linux (for example) require mandatory conditions:
- Must be installed library Qt4 > 4.5.0 and correctly set its own environment variables.
- The compiler must be installed and configured its environment variables.

Note: For OS GNU/Linux to build classes SerialDeviceWatcher and SerialDeviceInfo
must be installed UDEV (http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html)

2.2 Building the Library.

Note: By default, the library is going with the option: staticlib, so
all the recommendations of assembling the library and examples, which are given below,
are given only for the static build libraries.

    2.2.1 Compiling the library in an integrated form.
    
    1. Unpack the source tarball of the project.
    2. Navigate to the directory with the source code of the project:
        # cd <QSerialDeviceProjectDir>
    3. The following commands:
        # qmake BuildIntegratedLibrary.pro
        # make
        
    Result:
    in the directory: <QSerialDeviceProjectDir>/build/lib/qintegratedserialdevice/release
    will be binary: libqserialdevice.a libraries.
    
    2.2.2 Compiling libraries in differential form.
    
    1. Unpack the source tarball of the project.
    2. Navigate to the directory with the source code of the project:
        # cd <QSerialDeviceProjectDir>
    3. The following commands:
        # qmake BuildDifferentiatedLibrary.pro
        # make
        
    Result:
    in the directories:
    <QSerialDeviceProjectDir>/Build/lib/qserialdevice/release
    <QSerialDeviceProjectDir>/Build/lib/qserialdeviceinfo/release
    <QSerialDeviceProjectDir>/Build/lib/qserialdevicewatcher/release
    appear, respectively, the binary library files.
    
    2.2.2 Compiling examples.
    
    Note: Before building the examples must be building library in an integrated form (see Section 2.2.1)
    
    1. We assume that we have unpacked the source code and compiled the library in an integrated form.
    2. The following commands:
        # qmake BuildExamples.pro
        # make
        
    Result:
    in the directories:
    <QSerialDeviceProjectDir>/Build/bin/reader/release
    <QSerialDeviceProjectDir>/Build/bin/sreader/release
    <QSerialDeviceProjectDir>/Build/bin/writer/release
    <QSerialDeviceProjectDir>/Build/bin/serialdeviceinfo/release
    <QSerialDeviceProjectDir>/Build/bin/serialdevicewatcher/release
    <QSerialDeviceProjectDir>/build/bin/anymaster/release
    <QSerialDeviceProjectDir>/build/bin/anyslave/release
    appear respectively executable binary files are examples.
Nun habe ich versucht die BuildIntegratedLibrary.pro auszuführen, leider selber Fehler.

Gibt es irgend welche Path variablen die eingetragen sein müssen?

Nochmals großes Dankeschön für Eure Mühe

schönen Abend

lg lukas
kuzulis
Beiträge: 25
Registriert: 30. September 2009 14:55
Wohnort: Russland, Brjansk
Kontaktdaten:

Beitrag von kuzulis »

Ich habe mir nun mittels TortoiseSVN die qserialdevice daten herunter geladen.
Im Projekt steht dann aber auch dass dies die Version 0.2.0 ist, die ja veraltet ist wenn ich dich richtig verstanden habe.
Ja, ist es besser, die Bibliothek aus dem SVN zu verwenden. Sie ist neu!
Punkt 3) verstehe ich leider nicht so ganz. ;(((
Schau, was ist in der Readme geschrieben:
2.2 Building the Library.

Note: By default, the library is going with the option: staticlib, so
all the recommendations of assembling the library and examples, which are given below,
are given only for the static build libraries.
dh Das Projekt ist standardmäßig gesetzt, um die Bibliothek als eine statische Aufladung! Dies bedeutet, dass der Code-Bibliotheken mit Ihrem ausführbare Datei Ihrer Anwendung verknüpft sind.

Um zu testen, kompilieren einige Beispiele /examples :
1.
1. Unpack the source tarball of the project.
2. Navigate to the directory with the source code of the project:
# cd <QSerialDeviceProjectDir>
3. The following commands:
# qmake BuildIntegratedLibrary.pro
# make
2. Überprüfen Sie, dass es keine Fehler und in der Bibliothek befindet sich hier:
Result:
in the directory: <QSerialDeviceProjectDir>/build/lib/qintegratedserialdevice/release
will be binary: libqserialdevice.a libraries.
3. Löschen Sie alle Ordner und *. moc Makefile und *. obj-Dateien
4. Füllen Sie bitte die Beispiele:
2.2.2 Compiling examples.

Note: Before building the examples must be building library in an integrated form (see Section 2.2.1)

1. We assume that we have unpacked the source code and compiled the library in an integrated form.
2. The following commands:
# qmake BuildExamples.pro
# make

Result:
in the directories:
<QSerialDeviceProjectDir>/Build/bin/reader/release
<QSerialDeviceProjectDir>/Build/bin/sreader/release
<QSerialDeviceProjectDir>/Build/bin/writer/release
<QSerialDeviceProjectDir>/Build/bin/serialdeviceinfo/release
<QSerialDeviceProjectDir>/Build/bin/serialdevicewatcher/release
<QSerialDeviceProjectDir>/build/bin/anymaster/release
<QSerialDeviceProjectDir>/build/bin/anyslave/release
appear respectively executable binary files are examples.
dh als Ergebnis dieser *. exe (ausführbare Dateien), Anwendungen, die Sie auf jedem PC mit Qt4 benutzen können!

5. Wenn die Kompilierung wird Fehler geben, dann schreiben Sie sie hier.
Lukas
Beiträge: 17
Registriert: 17. Mai 2010 21:05

Beitrag von Lukas »

Hallo

Danke für deine Antwort

# qmake BuildIntegratedLibrary.pro
# make
Ich arbeite unter Windows XP, qmake kennt die Windos Konsole nicht, make schon.
Wenn ich das Projekt BuildIntegratedLibary.pro öffne und Ausführe kommt der Selbe Fehler:

Code: Alles auswählen

Führe Build-Schritte für Projekt BuildIntegratedLibrary aus...
Konfiguration unverändert, überspringe QMake-Schritt.
Starte: G:/Qt/2010.02.1/mingw/bin/mingw32-make.exe -w 
mingw32-make: Entering directory `H:/tricopter/qt/rs232 test/trunk'
cd examples/reader/ && G:/Qt/2010.02.1/mingw/bin/mingw32-make -f Makefile
mingw32-make[1]: Entering directory `h:/tricopter/qt/rs232 test/trunk/examples/reader'
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-subsystem,console -mthreads -Wl -o ../../build/bin/reader/release/reader.exe ../../build/bin/reader/obj/main.o -L'../../build/lib/qintegratedserialdevice/release' -L'g:/Qt/2010.02.1/qt/lib' ../../build/bin/reader/obj/version_res.o -lqserialdevice -lQtCore4
mingw32-make[1]: Leaving directory `h:/tricopter/qt/rs232 test/trunk/examples/reader'
g:/qt/2010.02.1/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -lqserialdevice
collect2: ld returned 1 exit status
mingw32-make[1]: *** [../../build/bin/reader/release/reader.exe] Error 1
mingw32-make: Leaving directory `H:/tricopter/qt/rs232 test/trunk'
mingw32-make: *** [sub-examples-reader-make_default-ordered] Error 2
Beendet mit Rückgabewert 2.
Fehler beim Erstellen des Projekts BuildIntegratedLibrary
Beim Ausführen des Build-Schritts 'Make'
in the directory: <QSerialDeviceProjectDir>/build/lib/qintegratedserialdevice/
den Ordner build/lib gibt es bei mir nicht, vielleicht liegt da das Problem?

Nochmals Danke für Eure Mühe

lg lukas
Dateianhänge
Screenshot.JPG
Screenshot.JPG (19.23 KiB) 9010 mal betrachtet
kuzulis
Beiträge: 25
Registriert: 30. September 2009 14:55
Wohnort: Russland, Brjansk
Kontaktdaten:

Beitrag von kuzulis »

1.
Nehmen Sie die Symbole der "Lücke" in den Weg, um das Projekt, dh
- Stattdessen: "H:/tricopter/qt/rs232 test/trunk"
- Beitrag: "H:/tricopter/qt/rs232_test/trunk"

2.
Reinigen Sie das Verzeichnis mit dem Projekt aus allen *. moc, *. obj, Makefile *, etwa so:
#make distclean
oder
#make clean
3. Öffnen Sie Ihren ersten Entwurf: BuildIntegratedLibrary.pro
4. Kompilieren
5. Wenn keine Fehler - dann aussehen:
<QSerialDeviceProjectDir>/build/lib/qintegratedserialdevice/
library.

6. Wenn die Bibliothek vorhanden ist -, dann schließen Sie das Projekt: BuildIntegratedLibrary.pro

7. Take away all das Makefile (oder # make clean)

8. Projekt öffnen: BuildExamples.pro
9. Kompilieren
Lukas
Beiträge: 17
Registriert: 17. Mai 2010 21:05

Beitrag von Lukas »

JUHU *freu* es funktioniert

ganz großes Dankeschön

Leerzeichen habe ich ersetzt und alle Makefiles gelöscht.

Danke an alle für Eure Hilfe

lg lukas
Antworten