Forum: Programmieren allgemein
by samso,
15. Aug 2020
Falls Du die etwas universellere Methode TComport.SendBuffer (s. #15) benutzen möchtest, geht das z.B. so:
var
Msg: T_OutMld;
begin
Comport.SendBuffer(Msg, Length(Msg));
end;
Forum: Programmieren allgemein
by samso,
14. Aug 2020
Stimmt Du hast recht, ich hatte mich an der Version im Profil orientiert. Die Klasse ist trotzdem schauderhaft. SENDSTRING erwartet leider einen abschließendes 0-Byte. Also eher nicht brauchbar. Die Klassen könnte aber erweitert werden:
procedure TComport.SendBuffer(const Buffer; Len: Integer); // Einen Puffer senden.
var BytesWritten: DWord;
begin
WriteFile(PortHandle, Buffer, Len,...
Forum: Programmieren allgemein
by samso,
14. Aug 2020
Ich würde mal messen wie lange die Transfer-Schleife braucht (->QueryPerformanceCounter).
Normalerweise sollte sie eigentlich überhaupt keine Zeit benötigen, weil die Daten ja lediglich in den Puffer der seriellen Schnittstelle übertragen werden müssen.
Forum: Programmieren allgemein
by samso,
14. Aug 2020
Da diese Klasse nicht mit Delphi 10.3 kompatible ist, kommt sie eher nicht in Frage :shock:.
Forum: Programmieren allgemein
by samso,
14. Aug 2020
Ok, danke für den Quelltext.
Für mich sieht das so aus, als wenn dieses Comport.SendByte tatsächlich auf die Übertragung des Bytes wartet. Denn 87µs ist ja gerade die Zeit für die Übertragung eines Bytes. Bietet Comport denn nicht die Möglichkeit einen kompletten Puffer zu schicken? Also alle 16 Bytes in einem Rutsch?
Forum: Programmieren allgemein
by samso,
14. Aug 2020
Ich habe zunächst mal Probleme die Fehlerbeschreibung zu verstehen. Du schreibst "zwischen den einzelnen bytes". Deine Message besteht aus 16 Bytes. D.h. du hast 15 Lücken von 70-100µs? Oder hast Du zwischen den Messages (je 16 Bytes) eine Verzögerung von 70-100µs. Wie misst Du die Verzögerungen? Mit einem Oscilloskop auf der Leitung?