AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

RS422 Datensenden unter Windows7

Ein Thema von akuk · begonnen am 13. Aug 2020 · letzter Beitrag vom 15. Aug 2020
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#1

AW: RS422 Datensenden unter Windows7

  Alt 13. Aug 2020, 16:37
Es gibt ja mehrere Stellen, wo es hängen kann.

Viele ComPort-Komponenten arbeiten in einem Thread, also Senden und Empfangen nicht dort wo du es wegsendest.
Hier kommt es natürlich drauf an, wie da die Synchronisierung arbeitet.

Hier sollte es zwar nicht passieren, aber z.B. bei einigen TCP/IP-Komponenten wird auch nochmal bissl gewartet, ob nochmal was kommt, um besser ein Großes anstatt vieler kleiner Pakete versenden zu können.

Und dann gibt es vermutlich auch nochmal im Treiber/Hardware ein paar Puffer und Verzögerungen,
allerdings würde ich so eine "große" Pause doch eher/erstmal in deiner Komponente suchen.


Test:
CreateFile/TFileStream/... auf 'COM2' (oder welcher es ist), da dann ein Write ausführen und schauen ob es immernoch so lange dauert.
Hier im Windows die Defaults für BAUD und Co. beachten/anpassen, sonst müsstest du nach dem Create noch mit MSDN-Library durchsuchenSetCommState das im Programm setzen.

Die alten APIs um Delphi-Referenz durchsuchenAssignFile nicht benutzen, denn dort ist ein Schreib-Lesepuffer integriert. (vor allem für TEXT)


Bei zeitkritischen Anwendungen und wo du selber schon in einem Thread arbeitest, da wäre vermutlich eine synchrone SerialPort-Komponente besser,
aber, wie gesagt, arbeiten fast alle Komponenten asynchron, damit wenn man sie im Haupthread benutzt, nicht das Programm hängen bleibt.


Zitat:
dürfte also nicht durch anderen Task behindert werden
In deinem Programm, aber andere Programme interessiert es nicht.

Bei Einer synchronen Komponente und alles im selben Thread, da könnte man ein Sleep(0) vorher einfügen.
Danach wird in einem neuen Slott begonnen und für die nächsten paar dutzend Millisekunden wird der Task nicht unterbrochen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (13. Aug 2020 um 16:55 Uhr)
  Mit Zitat antworten Zitat
akuk

Registriert seit: 8. Mär 2020
Ort: Wald, Zürich Oberland
51 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: RS422 Datensenden unter Windows7

  Alt 14. Aug 2020, 08:09
Hallo Himitsu
Danke für die ausführliche Antwort, ich habe vergessen noch zu erwähnen dass die Methode Transmit
in einem Thread läuft mit: priority:= TpTimeCritical;
Im gleichem Thread ist auch die Methode Receiv wo ich aber keine Verzögerungen festgestell habe.
Interessant ist vielleicht auch noch, es werden 3 Messages zu je 16 Bytes gesendet bei ersten zwei
sind diese Verzögerungen vorhanden,beim dritten keine mehr.
Das würde vielleicht darauf hindeuten was Du geschrieben hast
"..,wird auch nochmal bissl gewartet, ob nochmal was kommt "

Ich werde Deine Vorschläge probieren und sehe was passiert.
Vielen Dank
Anton
Anton Kurka
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz