brauche hilfe beim erstellen eines tool



  • ich möchte mir mit Visual C++ 2008 Expres ein kleines tool schreiben.
    und benötige themen übergreifend hilfe, da ich nicht genügend erfahrung habe.

    was das tool machen soll:
    - die auswahl eines vorhandenen comport und dazugehöriger baudrate ermöglichen.
    - daten vom ausgewählten comport empfangen und diese in einer datei ablegen.
    - das öffnen und anzeigen von daten ermöglichen die in eine datei abgelegt wurden.
    - die anzeige der daten soll in form eines Liniendiagramm erfolgen.

    das format der zu empfangenen daten ist bekannt und kann ich auch ändern.
    es geht dabei um einen selbst gebauten flugschreiber meines RC-Helikopter.

    ----------------------------------

    aktuell knabbere ich an folgenden problemen:
    - wie fülle ich comboboxen mit dem inhalt der aktuell vorhandenen COM schnittstellen und möglichen bautraten so,
    das diese dann auch für das SerialPort objeckt verwendet werden?
    brauche ich dazu zwei arrays?

    - wie muß ich es anstellen, um die empfangenen daten in eine datei ab zu legen?
    - wie ist der einfachste weg um dem tool klar zu machen wo anfang und ende der übertragung sind?
    - warum hat das SerialPort objeckt eine verzögerung von fast zwei sekunden wenn ich daten empfange?
    - hat VC++2008 möglichkeiten Diagramme zu erstellen ohne irgendwelche zusatz dateien von dritten?
    - wie kann ich die empfangenen daten so analysieren, das ich im diagramm auch das angezeigt bekomme was sie aussagen?

    ich übertrage die daten aktuell in strings.
    der string enthält sieben werte die mit komma getrennt sind.
    am ende ist ein zeilenumsprung.

    beispiel: 23127,85,147,210,75,14,6

    der erste wert ist ein zähler(word vareable 0-655xx) die anderen sechs sind sensor werte(in byte 0-255).
    der zeilenumsprung (enter) am ende, soll das ende eines messzyklus anzeigen.
    der zähler gibt dabei die position auf der zeit achse an.

    ----------------------------------

    wie ihr merkt hab ich mir schon mal ein par minuten gedanken zum ablauf gemacht.
    doch leider stehe ich auf dem schlauch was die umsetzung an geht.

    ----------------

    klar könnte ich die daten so wie sie rein kommen in eine text datei ablegen
    und in excel importieren, doch ich möchte ein eigenes programm schreiben.

    danke schon mal.



  • ich möchte mir mit Visual C++ 2008 Expres ein kleines tool schreiben.
    und benötige themen übergreifend hilfe, da ich nicht genügend erfahrung habe.

    Wenn ich nicht ganz falsch liege, gibt es bei der Express Version kein MFC.
    Ich würde es daher im WinAPI-Bereich versuchen.

    klar könnte ich die daten so wie sie rein kommen in eine text datei ablegen
    und in excel importieren, doch ich möchte ein eigenes programm schreiben.

    Wie du richtig bemerkt hast währe das Aufzeichnung mittels Hypertherminal die einfachste Lösung.
    Vor allem für den Anfang bis die Datenquelle fehlerfrei funktioniert würde ich dir Hypertherminal+Excel empfehlen. Ich vermute du verwendest einen AVR oder Pic Mikrocontroller und ein Funkmodul. Hab ich recht?

    Ich würde übrigens zumindest eine einfachste Checksumme mitsenden.
    Denn ein Bit kann schnell bei der Übertragung umkippen.
    Auch einzelne Teile der Übertragung können verlohren gehen.

    wie fülle ich comboboxen mit dem inhalt der aktuell vorhandenen COM schnittstellen und möglichen bautraten so,
    das diese dann auch für das SerialPort objeckt verwendet werden?
    brauche ich dazu zwei arrays?

    Wofür willst du die 2 Array's verwenden?
    Normalerweise schreibt man die Daten in die Combobox und holt sich einfach die Auswahl.

    - wie muß ich es anstellen, um die empfangenen daten in eine datei ab zu legen?

    Erstmal zur Erklährung: Die serielle Schnittstelle (Egal ob Rs232 oder über USB emuliert) wird wie eine Datei behandelt.
    Gehe einfach so vor:
    Die Daten Empfangen -> Analysieren -> Fehler: Erneute Sendung erbitten, Daten verwerfen oder was auch immer / Kein Fehler: Weiter im Programm -> Die Daten genauso wie du sie von der RS232 gelesen hast in die Datei schreiben -> zurück zum Anfang.

    - wie ist der einfachste weg um dem tool klar zu machen wo anfang und ende der übertragung sind?

    Dass Einfachste dürften fixe Paketlängen + Checksummen + Timeouts sein.
    Eventuell sind auch Protokolle wie TTY, die Vorgänger oder Nachfolger eine Anregung für dich.

    - warum hat das SerialPort objeckt eine verzögerung von fast zwei sekunden wenn ich daten empfange?

    Welches Objekt verwendest du?
    Wenn du das nicht verrätst kann dir keiner helfen.
    Ich verwende die RS232 normalerweise immer nur über die Befehle OpenFile, ReadFile, WriteFile, CloseHandle die ich in einer simplen Klasse verpakt habe um die Handhabund etwas zu vereinfachen.

    Verzögerungen kommen normalerweise durch falsch gewählte Flusskontrolle (Handshake, Start-/Stoppbyte,...) oder durch falsch gesetzte Timeoutzeiten.
    Normalerweise liegt es an zu großzügig gewählten Zeiten.

    - hat VC++2008 möglichkeiten Diagramme zu erstellen ohne irgendwelche zusatz dateien von dritten?

    Wenn du Glück hast findest du bei www.Codeprojekt.com etwas passendes.
    Ansonsten darfst du selbst deine Diagramme malen.
    Schau dir einmal die Funktionen MoveTo,LineTo an und wie sie verwendet werden.

    wie kann ich die empfangenen daten so analysieren, das ich im diagramm auch das angezeigt bekomme was sie aussagen?

    Wie du die Daten angezeigt bekommen willst und was sie dir sagen sollen, mußt du schon selbst wissen.
    Das Hängt ganz von den Sensordaten selbst ab.

    ich übertrage die daten aktuell in strings.
    der string enthält sieben werte die mit komma getrennt sind.
    am ende ist ein zeilenumsprung.

    Ganz blöde Idee.
    Ich vermute du hast einen Mikrocontroller der dir die Daten sammelt und zufunkt.
    Du willst doch nicht einen Großteil der Rechenleistung verbraten, nur um die Zahlenwerte in einen String zu verpacken die dann auf der PC-Seite sowiso wieder in Zahlenwerte zurückgerechnet werden müssen. Sende sie einfach so wie sie sind als Zahlenwerte und verwende die Rechenleistung lieber für ein ordentliches Komunikationsprotokoll mit einer ordentlichen Fehlererkennung.
    Denn je nach dem welche Funkmodule du verwendest, wirst du viele bis sehr viele davon haben. Welche Funkmodule verwendest du?

    wie ihr merkt hab ich mir schon mal ein par minuten gedanken zum ablauf gemacht.
    doch leider stehe ich auf dem schlauch was die umsetzung an geht.

    Der Anfang ist gemacht. Aber überlege noch die ein oder andere Minute wie man es besser machen könnte 😉

    An deiner Stelle würde ich folgendermaßen vorgehen:
    Datenquelle (Mikrocontroller oder was auch immer) direkt über Kabel an den PC anschließen und mit Hypertherminal aufzeichnen.
    Wenn das Senden funktioniert, erstellst du ein einfaches PC-Programm (es reicht eine Konsolenanwendung) dass mit der Datenquelle komuniziert und entwickelst das Komunikationsprotokoll.
    Wenn dass hin und her Senden über Kabel funktioniert, kannst du dich an die Funkmodule heranwagen und schaun wie dein Komunikationsprotokoll bei den auftretenden Fehlern reagiert.
    Erst wenn da die Komunikation auch unter Realbedingungen funktioniert, würde ich die Darstellung mittels Grafiken beginnen.

    Aber zum Projekt selbst.
    Was fliegst du denn für einen Helikopter?
    Wenn ich fliege habe ich keine Zeit mir irgendetwas am Laptop-Monitor anzuschaun.
    Desswegen nützt eine Funkübertragung der Messdaten nur etwas wenn man die Onboardelektronik im Flug anpassen will oder sich die wichtigsten Daten wie Boarspannung, Fluglage,... beim FPV einblendet.
    Für normale Telemetrie die man nach dem Flug auswärtet, reicht ein kleiner ATmega der die Daten auf einer SD-Karte aufzeichnet.

    Übrigens erleichtert es das Lesen ungemein wenn man zwischendurch das ein oder andere Wort groß schreibt.



  • Nachtrag:

    Ich habe mich beim Link verschrieben.
    Der richtige Link lautet:
    http://www.codeproject.com



  • ich danke dir für die top antwort.

    ich hab einen "Graupner MICRO STAR 400 V2" (nur ein billiger heli um daran einen autopilot zu entwickeln).
    ich nutze einige PIC mikrocontroller.
    die verbindung des flugschreiber zum PC ist per kabel und hat einen Max323 IC.
    ich zeichne im flug daten in einen EEPROM auf und möchte die nach dem flug auswerten.

    das SerialPort objeckt das ich nutze habe ich einfach aus der werkzeug leiste in das projeckt rüber gezogen, com nummer und baud rate eingestellt.

    und daten empfange ich aktuell in einer roh version mit "label2->Text = serialPort1->ReadLine();" in einem timer.

    ich habe für serialPort1 nur folgendes geändert:

    this->serialPort1->BaudRate = 4800;
    this->serialPort1->PortName = L"COM8";
    

  • Mod

    Das bischen Code was Du hier zeigst sieht nach C++/CLI aus...



  • ich hab einen "Graupner MICRO STAR 400 V2" (nur ein billiger heli um daran einen autopilot zu entwickeln).

    Schau dir einmal die "Mikrocopter" Platine an.
    Dass ist zwar eine Multikopterplatine, aber es hat schon jemang erfolgreich diese Platine in einem Helikopter einzusetzen.

    Ich würde dir für den Drohnenbau erstmal zu einem einfachen Multikopter aus 10x10x1er Alu Formrohr raten.
    Denn der kostet nicht viel und hält eine Menge aus.
    Wenn man Kunststoffschrauben verwendet, bleibt der Schaden bei einem Absturz aus 10 Metern normalerweise unter 10 Euro und das Ganze ist nach spätestens 10 Minuten wieder einsatzbereit.
    Bei einem Heli dürfte dass etwas anders aussehen 😉

    Ich würde mir an deiner Stelle einmal die Projekte "Armo Copter", "UAVP NG" und "Mikrocopter" anschaun. Die sind schon recht nahe an der Drohne dran.
    Dass dürfte dir sehr helfen, da du wie's aussieht noch nicht sehr viel Erfahrung in diesem Bereich hast und in den oben genannten Projekten schon etliche Jahre Arbeit steckt.
    Asctec verkauft übrigens auch Drohnen und hat in Zusammenarbeit mit dem MIT schon etliche Preise abgeräumt. Die sind etwas leistungsstärker als das Konkurenzprodukt Mikrodrohne, aber bei beiden Herstellern sind die Preise ganz schön geschmlazen.
    (Asctec hat zwar einen Hobbybereich der auch für normalsterbliche erschwinglich ist, aber das ist dann halt keine Drohne.)
    Ein Besuch im Bereich www.X-Ufo.de könnte dir auch nicht schaden.

    ich nutze einige PIC mikrocontroller.

    Schade, da kann ich dir nicht weiterhelfen.
    Ich habe mich aus Kostengründen für AVR entschieden.

    die verbindung des flugschreiber zum PC ist per kabel und hat einen Max323 IC.
    ich zeichne im flug daten in einen EEPROM auf und möchte die nach dem flug auswerten.

    Verwende lieber eine SD-Karte.
    Die hat mehr Speicherplatz und du ersparst dir das Anstöpseln an den PC und man kann sie einfach per SPI ansprechen.
    Mit der SD-Karte kannst du ein nettes Turnschuhnetzwerk aufbauen ohne das ganze Kabelwirrwar zu haben.
    Beispielquellcode für das Ansteuern der SD-Karte findest du bei www.mikrocontroller.net und bei Dr.Google

    das SerialPort objeckt das ich nutze habe ich einfach aus der werkzeug leiste in das projeckt rüber gezogen, com nummer und baud rate eingestellt.

    und daten empfange ich aktuell in einer roh version mit "label2->Text = serialPort1->ReadLine();" in einem timer.

    Tut mir leid. Mir ist ein solches Element noch nicht aufgefallen.
    Stell doch noch die Timeoutwerte und die Flusssteuerung ein.
    Genauere Informationen dazu findest du in der Hilfe zum Modul.



  • die microkopter sind mir bekannt.
    doch mein system arbeitet flexiebel mit jeglichen RC-Modellen, da es RC-Empfänger ersetzt aber auch adaptieren kann fals eine zusätzliche funk steuerung gewünscht ist.

    SD-Card ist kein thema, dafür hab ich den EEPROM.

    hier noch ein bild vom serialport1.

    http://www.proudmoore.de/ele/serialport.jpg



  • doch mein system arbeitet flexiebel mit jeglichen RC-Modellen, da es RC-Empfänger ersetzt aber auch adaptieren kann fals eine zusätzliche funk steuerung gewünscht ist.

    Da wird dir kein verantwortungsbewuster Modellpilot mitmachen.
    Denn bei selbstgebauten oder modifizierten Funksystemen steigt jeder Versicherung aus. Und im Falle eines Personen- oder Sachschadens bleibt man auf den Kosten sitzen.
    Selbst bei Dronen mußt du jederzeit die Kontrolle übernehmen können.
    Und dass kann man mit einer selbstgebastelten Anlage nicht umbedingt.

    Also lass besser die Finger davon.
    Das kan wirklich böse ausgehen.
    Und genau desswegen hat es keiner gemacht der sich mit der Materie auskennt.

    SD-Card ist kein thema, dafür hab ich den EEPROM.

    Jeder wie er will.
    Mit SD währe halt die Handhabung einfacher.

    hier noch ein bild vom serialport1.

    http://www.proudmoore.de/ele/serialport.jpg

    Dass ist C++/CLI mit .NET und hier ist MFC.
    Lass dich vom Abministrator/Moderator dorthin schieben.

    Aber noch ein Tipp:
    Setze den Timeout auf einen passenden Wert wie ich vorher geschrieben habe.
    Auch wen du die Buffergröße verringerst beschleunigt dass die Übertragung.

    Der Grund:
    Das Programm wartet mit dem Senden und mit dem Weitergeben der empfangenen Daten so lange, bis der Buffer voll ist.

    Kleinerer Buffer.
    Der Buffer ist schneller voll.

    Timeout: Wenn eine gewisse Zeit nicht gesendet empfangen wird, werden die Daten übermittelt/weitergegeben. Dass verhindert das Einfrieren und beschleunigt bei vernünftigen werten den Ablauf.



  • -selbstgebastelten Anlage
    und
    -jederzeit die Kontrolle übernehmen können

    hab ich nie behauptet das es so ist oder nicht ist. 😉

    trotzdem nochmal genauer beschrieben:
    ich habe eine funkfernsteuerung mit empfänger (handelsüblich).
    die PWM signale des empfänger werden an meine schaltung übergeben und dienen dem programm als sollwerte (wie der heli sich verhalten soll).
    die von der schaltung ausgegebenen werte sind korekturen der ist werte (ermittelt durch diverse sensorik)
    um den helikopter möglichst den soll werten an zu nähern.
    befindet sich die fernsteuerung in kalibrierter ausgangs stellung, schwebt der heli,
    oder arbeitet auf befehl ein autopilot programm ab bis die fernsteuerung von der ausgangs stellung ab weicht.

    versicherung hin oder her, das teil ist experimentell und wird in meinem großzügigen wohnzimmer betrieben.
    mir sind die gesetzlichen richtlinien zum betrieb motorisierter flugobjekte bekannt.
    und mal im ernst kennst du jemanden mit 20Eur KoaxHeli der eine versicherung dafür hat?
    die liegt sicher nicht mit im spielzeug regal wenn man den kauft, müßte aber.

    -------------------

    so zurück zum tool um das es hier geht.

    Dass ist C++/CLI mit .NET und hier ist MFC

    mag sein doch ich arbeite mit Visuall C++ und wenn ich zu dieser IDE fragen habe ist das hier der richtige ort, darum hier der beitrag und auch der vermerk zu beginn das es ein themen übergreifendes problem ist.
    nicht das ich mal wieder codes vorgesetzt bekomme die nur im borland oder sonst einem teil laufen.

    --------------------

    naja ich werd dann wohl weiter bücher welzen.
    trotzdem danke Bernhard, deine erste antwort war hilfreich.
    ein kleines beispiel zur combobox hätte geholfen aber das hab ich mittlerweile.



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • thamirios schrieb:

    -selbstgebastelten Anlage
    und
    -jederzeit die Kontrolle übernehmen können

    hab ich nie behauptet das es so ist oder nicht ist. 😉

    Dass hatte sich oben ganz anders gelesen.

    thamirios schrieb:

    trotzdem nochmal genauer beschrieben:
    ich habe eine funkfernsteuerung mit empfänger (handelsüblich).
    die PWM signale des empfänger werden an meine schaltung übergeben und dienen dem programm als sollwerte (wie der heli sich verhalten soll).
    die von der schaltung ausgegebenen werte sind korekturen der ist werte (ermittelt durch diverse sensorik)
    um den helikopter möglichst den soll werten an zu nähern.
    befindet sich die fernsteuerung in kalibrierter ausgangs stellung, schwebt der heli,

    Genauso machen es die von mir genannten Steuerungen.
    Übrigens, die Signalform nennt sich PPM -> Puls Pausen Modulation.

    thamirios schrieb:

    oder arbeitet auf befehl ein autopilot programm ab bis die fernsteuerung von der ausgangs stellung ab weicht.

    Ich würde den Autopilot über einen Schalter aktivieren / deaktivieren.
    Damit die Handsteuerung dominant ist und steuern kann auch wenn sich der Autopilot aufhängt oder verrückt spielt.

    thamirios schrieb:

    versicherung hin oder her, das teil ist experimentell und wird in meinem großzügigen wohnzimmer betrieben.
    mir sind die gesetzlichen richtlinien zum betrieb motorisierter flugobjekte bekannt.
    und mal im ernst kennst du jemanden mit 20Eur KoaxHeli der eine versicherung dafür hat?
    die liegt sicher nicht mit im spielzeug regal wenn man den kauft, müßte aber.

    Auch bei den großen Modellen muß man keine Versicherung Versicherung abschließen.
    Es ist aber bei Groß oder Klein ratsam.
    Und auch bei den großen Modellen liegt keine Versicherung bei. Darum muß man sich selbst kümmern.
    Überlege nur mal was passiert wenn der Copter einen Besucher streift und mit den Rotorblättern erwischt. Auch wenn der Copter klein ist, verursacht er nette Schnittwunden.
    Auch wenn man mal rausgeht, verursachen die kleinen Hüpfer schnell einmal einen Kratzer in einem Auto.
    Beides kann ganz schön in's Geld gehen.
    Aber das mußt du selbst entscheiden.

    so zurück zum tool um das es hier geht.

    Dass ist C++/CLI mit .NET und hier ist MFC

    mag sein doch ich arbeite mit Visuall C++ und wenn ich zu dieser IDE fragen habe ist das hier der richtige ort, darum hier der beitrag und auch der vermerk zu beginn das es ein themen übergreifendes problem ist.
    nicht das ich mal wieder codes vorgesetzt bekomme die nur im borland oder sonst einem teil laufen.

    Mit MFC-Befehlen kannst du aber auch nichts anfangen.
    Und genau dort hattest du gepostet.

    thamirios schrieb:

    naja ich werd dann wohl weiter bücher welzen.
    trotzdem danke Bernhard, deine erste antwort war hilfreich.
    ein kleines beispiel zur combobox hätte geholfen aber das hab ich mittlerweile.

    Mit der MFC-Version eine Combobox mit Daten zu befüllen hättest du leider nichts anfangn können. Also bitte das nächste mal nachdenken wo du fragen solltest.

    Ich würde dir raten, dass du dein Projekt in kleine Abschnitte unterteilst.
    Denn wie ich schon geschrieben habe, wird sich dein Projekt mehrere Jahre brauchen und alles auf einmal zu machen würde zu viel sein.

    Sag doch bitte noch einmal detailiert was du genau wissen willst.



  • Bernhard. schrieb:

    thamirios schrieb:

    trotzdem nochmal genauer beschrieben:
    ich habe eine funkfernsteuerung mit empfänger (handelsüblich).
    die PWM signale des empfänger (...)

    Genauso machen es die von mir genannten Steuerungen.
    Übrigens, die Signalform nennt sich PPM -> Puls Pausen Modulation.

    Nö, das ist schon PWM.



  • Glaub einem, der schon lange mit Empfängern und Servos beschäftigt hat.

    Alle Empfänger (außer den Sateliten und spezielle Summensignalempfänger) liefern ein PPM-Signal.
    Bei der herkömmlichen Signalform hat man einen Signalimpuls von einer analogen Zeitdauer von 1 bis 2 ms Länge.
    Bei den neuen Hochgeschwindigkeitsanlagen ist die Pulsdauer und die Pause dazwischen kürzer.

    Wenn du mir nicht glaubst, frag Wicki:
    http://de.wikipedia.org/wiki/Puls-Pausen-Modulation
    Hier wird zwar mehr auf den analogen Sender und den Empfänger eingegengen, aber das Signal das der Empfänger ausgegeben wird, ist einfach die aufgesplitete Version des Summensignal's.

    PPM ist eine Spezialform des PWM.
    Außerdem ist PWM normalerweise für die Leistungsregelung und PPM für die Datenübertragung gedacht.

    Aber genug von den Technischen Dingen, lass uns hören was der thamirios wissen will.


Anmelden zum Antworten