AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Serielle Schnittstelle spinnt...

Ein Thema von Dawn87 · begonnen am 21. Feb 2007 · letzter Beitrag vom 21. Feb 2007
Antwort Antwort
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#1

Serielle Schnittstelle spinnt...

  Alt 21. Feb 2007, 08:44
Hallo,

ich schreibe zur Zeit ein Programm was Daten über serielle Schnittstelle von einem Mikrocontroller empfängt.

Jede Sekunde werden 66 bytes eingelesen, diese 66 Bytes werden nur auf Anfrage vom Mikrocontroller gesendet.

Diese Geschichte funktioniert auch wunderbar, soweit. Doch wenn während der Kommunikation die Onlinehilfe aufgerufen wird oder eine andere Aktion im Programm ausgeführt wird, liefert die Funktion READBYTE() aus der freeware PORT.dll nur noch den Wert 255 zurück. Beides hat nichts mit miteinander zu tun (das heißt es wird beim Aufrufen der Hilfe nicht explizit auf die Verbindung zugegriffen).

Hat da jemand eine Idee?

Grüße
Stefan
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Serielle Schnittstelle spinnt...

  Alt 21. Feb 2007, 08:54
Du programmierst die serielle Schnittstelle im Direktzugriff? Warum (um Gottes Willen)?

Die WinAPI bietet dir zum einen ordentliche Funktionen, welche auch einen Buffer zur Verfügung stellen sowie interrupt-driven arbeiten, damit ist die Systemlast deutlich geringer als dein Weg über das Polling. Auch hast du es deutlich einfacher, wenn du nur fragen musst: ist was da, und wenn ja, gib es mir.

Aber du musst dich ja nichtmal mit den WinAPI Schnittstellen beschäftigen, es gibt genug Bibliotheken, welche dir einfach und sauber eine API zu der seriellen Schnittstelle zur Verfügung stellen (auf Basis der WinAPI). Nutze lieber diese (ich nenne mal 2)

ComPort
Turbo Power ASync Professional

Zu deinem Problem: Du pfuscht Windows damit dazwischen und daher kann keiner genau sagen wie sich Windows verhält, bzw. wann du wem wie dazwischen haust. Der direkte Hardwarezugriff ist nicht umsonst verboten worden...
  Mit Zitat antworten Zitat
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Serielle Schnittstelle spinnt...

  Alt 21. Feb 2007, 09:06
Hallo,

soweit ich weiß ist die PORT.dll ein Wrapper für solche "ordentlichen" Windows Funktionen? Außerdem Polle ich ja nicht wirklich, ich weiß das nach dem senden von "data5" 66 bytes Daten + ein ENTER ($0d) zurückkommen. Das System wird dadurch nicht wirklich ausgelastet:

Delphi-Quellcode:
SendCommand('data5',False);

Sleep(20);

sBuffer := '';

nTime := GetTickCount + 1000;

  bWorking := True;

  for i := 1 to 67 do
  begin
    sChar := Readbyte();

    If GetTickCount >= nTime Then
    begin
      ShowError(105,'Zeitüberschreitung beim Empfangen von Daten (Timeout)');
      CloseConnection;
      bWorking := False;
      Exit;
    end;

    sBuffer := sBuffer + Chr(sChar);
  end;


  for i := 1 to 67 do
  begin
    if sChar = 255 then
      begin
        CloseConnection;
        ShowError(106,'Ungültige Daten empfangen.');
        bWorking := False;
        Exit; // Fehler
      end;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#4

Re: Serielle Schnittstelle spinnt...

  Alt 21. Feb 2007, 09:57
wie ich aus dem codeschnipsel sehe, benutz du keinen eigenen thread?!
das könnte einiges anproblemchen verhindern...
Jörg
have FUN
  Mit Zitat antworten Zitat
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Serielle Schnittstelle spinnt...

  Alt 21. Feb 2007, 09:59
Hallo,

der gepostede Code läuft in einem Timer. Wie verhält sich dieser unter Delphi? Wird automatisch ein Thread für diesen erzeugt? (bin Delphi-Anfänger )

Kann ich in Delphi Textboxen aus einem anderen Thread heraus aktualisieren (bei .NET muss man das z.B. über einen Delegaten regeln).

Grüße
Stefan
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz