- 3D-Druck Einstieg und Tipps         
Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 41

Thema: COM-Abfrage

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    122

    COM-Abfrage

    Anzeige

    E-Bike
    Hallo

    Ich habe meine bisherigen Projekte immer so realisiert, dass ich vom uC her alle ca. 10ms Daten an den PC sende.
    Am PC habe ich dann auch immer ca. alle 10ms (mit Timer) den COM-Eingang abgefragt und so hat sich das ganze System irgendwie synchronisiert...
    Da sehr viele Daten ankommen, war das kein Problem. Nun ist es bei meinem nächsten Projekt so, dass ich nur etwa alle 1s Daten vom uC schicke. Jetzt möchte ich mit dem Borland C++ Builder ein Programm realisieren, dass mir die Daten in eine Variable schreibt, wenn sie ankommen. Also so eine Art Interrupt für den Dateneingang am COM-Port...
    Ich bin jetzt wirklich schon lange am versuchen, aber es will einfach nicht so recht!
    Da ich kein spitzen-Progammierer bin, würde ich mich freuen, wenn ihr mir helfen könntet!!
    Merci

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ich arbeite mit Visual C++. Da mach ich sowas mit threads, is' am einfachsten: Einer wartet auf input , der andere kann inzwischen weiterbüffeln.
    Geht auch anders, aber es funzt, und dann genügt es mir (mir hängt windows eigentlich bei den Ohren raus)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.05.2005
    Ort
    Wien
    Alter
    51
    Beiträge
    137
    schau mal da: http://www.traverse.com/people/poinsett/bcbcomm.html
    In einem thread auf die COM zu warten funktioniert auf betriebssystemebene ebenfalls mit interrupts, nur der programmierer merkt nichts davon (kapselung durch system treiber): der thread wird solange angehalten, bis der interrupt ausgelöst wird, dann wird vom COM-"File" das zeichen gelesen... manchaml sehn ich mich auch nach der alten DOS-Zeit, wo man das alles selber machen musste (pardon: durfte!)

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Zitat Zitat von hl_angel
    ... manchaml sehn ich mich auch nach der alten DOS-Zeit, ...alles selber..
    Au weia, Nostalgie-Attacken schon in deinem jugendlichen Alter sind bedenklich ! Aufpassen !


  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.11.2004
    Ort
    München
    Alter
    37
    Beiträge
    447
    Hi surfer,
    Dass es nicht mit TTimer geht, wird dir aufgefallen sein (nur weil Interval auf 1 ist, bedeutet das leider nicht, dass er jede ms aufgerufen wird).
    Mir fallen jetzt 2 Möglichkeiten ein, dein Problem zu lösen.
    1. Threads: wenn man sich damit auskennt, und sich im klaren ist was man tut ist das ne gute Lösung.
    2. Eine Art eigenen Timer basteln, mit hilfe der "Application.OnIdle" Methode, indem du darin immer abfrägst, ob eine ms vergangen ist. (Application.OnIdle wird in einer endlosschleife immer aufgerufen, wenn dein Programm grad nix besseres zu tun hat). Wenn dein Programm mit den Daten keine zeitintensiven Dinge vor hat, ist die Möglichkeit wohl die Problemloseste und einfachste. Wenn man das einmal gemacht hat, ist es einfach(auch wenns kompliziert klingt), also frag wenns bei dir nicht gleich klappt, dann mache ich dir schnell den code, der dir helfen sollte...
    MfG Alex

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    122
    Also 1.Mal danke für eure Antworten...

    Die ganze Abfrage habe ich nach der Anleitung von hl_angel's link gemacht.
    Mir wäre die "Thread-Lösung" eigentlich am besten.
    Wenn ich das richtig verstehe...:

    Es gibt mein Hauptprogramm und einen Thread.
    Der Thread läuft parallel zum Hauptprogramm und ruft immer und immer wieder die Daten am COM ab....
    Das ganze beeinflusst sich nicht und ich kann einfach im Hauptprogramm die im anderen Thread abgeholten Daten auswerten.
    Im Thread schreibe ich die Daten in ein char und lese sie im Hauptprogramm aus.

    Könnte das so richtig sein?

    Wenn ja. Hätte mir jemand für den Builder mal ein Beispiel für einen einfachen Thread? Danke.

    Merci

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.11.2004
    Ort
    München
    Alter
    37
    Beiträge
    447
    Hi,
    Hab mit BC++ nocht nix mit Threads gemacht, sondern bisher nur mit Delphi.
    Aber mit File|New|Other|Thread kannst du deine Thread Klasse machen, die dann wie jede andere Thread Klasse auch benutzt werden kann.
    Unter ::Execute schreibste deinen Code rein... für Delphi hab ich auf die schnelle http://www.dev-center.de/index.php?c...multithreading gefunden, das müsstest du nur schnell in C++ reintippen, was bei Delphi->BC++ ja kein problem darstellen sollte.
    MfG Alex

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    122
    Aaah. So einfach ist das....
    Eigentlich funktioniert es. Nur weiss ich noch nicht, wie ich zwischen dem Hauptprogramm und dem Threads Variabeln übergeben kann...?
    Muss ich mit include noch die beiden miteinander verknüpfen?

    Danke schonmals...!

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    122
    Suuper!! Danke vielmals!! Ist ja wirklich einfach!! Funktioniert jetzt super!!!!

    DANKE!!!

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    122
    Nun habe ich aber etwas anderes gemerkt....
    Und zwar habe ich ja im Thread eine Endlosschlaufe, ohne Verzögerung, die mir einfach immer den Eingang abfragt. Dies jedoch verlangsamt alles ein bisschen... Wenn ich dann ein Zeichen mit der Tastatur senden möchte, hat es sicher einige 1/100s verzögerung. Sowieso läuft alles irgendwie instabil. Ist das ein bekanntes Problem?

Seite 1 von 5 123 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test