AGB  ·  Datenschutz  ·  Impressum  







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

RS422 Datensenden unter Windows7

Ein Thema von akuk · begonnen am 13. Aug 2020 · letzter Beitrag vom 15. Aug 2020
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: RS422 Datensenden unter Windows7

  Alt 14. Aug 2020, 14:11
Bietet Comport denn nicht die Möglichkeit einen kompletten Puffer zu schicken? Also alle 16 Bytes in einem Rutsch?
Gibt es, man muss es nur anders nutzen als vom Entwickler gedacht.
procedure SENDSTRING(Buffer: Pchar); // Text über die serielle Schnittstelle senden
Falls das hier genutzt wird.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#12

AW: RS422 Datensenden unter Windows7

  Alt 14. Aug 2020, 14:20
Bietet Comport denn nicht die Möglichkeit einen kompletten Puffer zu schicken? Also alle 16 Bytes in einem Rutsch?
Gibt es, man muss es nur anders nutzen als vom Entwickler gedacht.
procedure SENDSTRING(Buffer: Pchar); // Text über die serielle Schnittstelle senden
Falls das hier genutzt wird.
Da diese Klasse nicht mit Delphi 10.3 kompatible ist, kommt sie eher nicht in Frage .
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: RS422 Datensenden unter Windows7

  Alt 14. Aug 2020, 14:29
Zitat:
Umgebung : Delphi7, Windows7
Ich las nirgends von wo uComPort her kommt, tut mir leid das war nur ins blaue geraten und ich bin auch schon wieder still.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#14

AW: RS422 Datensenden unter Windows7

  Alt 14. Aug 2020, 14:33
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.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#15

AW: RS422 Datensenden unter Windows7

  Alt 14. Aug 2020, 14:46
Zitat:
Umgebung : Delphi7, Windows7
Ich las nirgends von wo uComPort her kommt, tut mir leid das war nur ins blaue geraten und ich bin auch schon wieder still.
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:

Delphi-Quellcode:
procedure TComport.SendBuffer(const Buffer; Len: Integer); // Einen Puffer senden.
var BytesWritten: DWord;
begin
  WriteFile(PortHandle, Buffer, Len, BytesWritten, NIL);
END;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: RS422 Datensenden unter Windows7

  Alt 14. Aug 2020, 15:02
Ein Problem ist erstmal, dass WriteFile auf eine Serielle Schnittstelle nicht asynchron arbeiten kann. (kein Overlapped möglich) und besser auch nur innerhalb eines Thread behandelt werden sollte.
Da aber viele SerialPort-Komponenten asynchron arbeiten wollen, müssen sie es dann irgendwie (teilweise echt pervers) in einen eigenen Thread übergeben.


Wer wirklich zeitkritische Dinge machen will, sollte sich daher eine synchrone Komponente basteln.
Ich hab mir vor 'ner Weile etwas für einen FingerPrintReader gebaut, aber hatte noch keine Zeit das in eigenständige eine Komponente auszulagern.
(allerdings kann ich versprechen, dass es keine endlose Abwärtskompatibilität geben wird ... maximal bis XE3 ... eher neuer, so ab XE8 oder 10)



Willst dir 'nen CNC basteln?
Meine GUI hatte ich mal angefangen, aber viel gibt es noch nicht.
Allerdings nutze ich einen Arduino mit einem angepassten Grbl, um vom Computer halbwegs entkopelt zu sein und mit zeitkritischen Dingen keine Probleme zu haben.
Windows ist kein Echtzeitsystem und auch wenn es Ansätze gibt das zu beheben, will ich mich damit nicht befassen wollen.

Ich selbst habe aber keine Problme, egal ob zwischen den Zeichen oder Zeilen Pausen sind, da es im Grbl/Arduino einen Cache gibt, wo die nächsten Befehle bereits vorgeladen sind und somit Pausen ignoriert werden.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (14. Aug 2020 um 15:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: RS422 Datensenden unter Windows7

  Alt 14. Aug 2020, 15:12
Mist, nun schreib ich doch nochmal :-]

SENDSTRING erwartet leider einen abschließendes 0-Byte. Also eher nicht brauchbar.
Ich hatte es mir so gedacht, ohne seperate methode zu entwerfen:

einen PAnsiChar mit 16 bytes füllen, abschließend sich irgendein byte ausdenken zum terminieren, da ja vielleicht auch mal weniger als 16 oder mehr....
dann SendString(Buffer) ausführen.
dann sollte ja function READSTRING() : Pchar; // Text über die serielle Schnittstelle empfangen was empfangen haben.
das dann wiederum bis zum selbst erfundenen terminierer byte auswerten.

//edit
Oder halt generell immer nur bis "length(buffer) -1" auswerten ginge auch denk ich mal.
Gruß vom KodeZwerg

Geändert von KodeZwerg (14. Aug 2020 um 15:18 Uhr)
  Mit Zitat antworten Zitat
akuk

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

AW: RS422 Datensenden unter Windows7

  Alt 15. Aug 2020, 08:51
Hallo
besten Dank an Alle, der Hinweis :

"die Möglichkeit einen kompletten Puffer zu schicken?
Also alle 16 Bytes in einem Rutsch?"

war Goldwert.

Ich habe versuchsweise eine Methode gemacht in Abänderung von SENDSTRING :
//--------------------------------------------------------
T_OutMld = packed array [0..16] of byte;
//------------------------------------------------
procedure TComport.SendArray (Data : T_OutMld);
var BytesWritten: DWord;
begin
WriteFile(PortHandle,Data,17,BytesWritten,NIL);
END;
//--------------------------
und es lauft ohne Unterbrechungen, ich muss es noch für gössere Anzahl Bytes testen als 17.
Bsten Dank für Euere Hilfe
Anton

an himitsu:www.zuritronic.com
Anton Kurka
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
719 Beiträge
 
Delphi XE5 Professional
 
#19

AW: RS422 Datensenden unter Windows7

  Alt 15. Aug 2020, 11:43
Hallo Anton,
Du kannst Deinen QuellCode hier mit Hilfe des Delphi-Symbols (= Helm mit rotem Kamm) richtig formatieren, damit er besser lesbar ist.
Gruß, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#20

AW: RS422 Datensenden unter Windows7

  Alt 15. Aug 2020, 12:02
Hallo
besten Dank an Alle, der Hinweis :

"die Möglichkeit einen kompletten Puffer zu schicken?
Also alle 16 Bytes in einem Rutsch?"

war Goldwert.

Ich habe versuchsweise eine Methode gemacht in Abänderung von SENDSTRING :
Delphi-Quellcode:
//--------------------------------------------------------
T_OutMld = packed array [0..16] of byte;
//------------------------------------------------
procedure TComport.SendArray (Data : T_OutMld);
var BytesWritten: DWord;
begin
  WriteFile(PortHandle,Data,17,BytesWritten,NIL);
END;
//--------------------------
und es lauft ohne Unterbrechungen, ich muss es noch für gössere Anzahl Bytes testen als 17.
Bsten Dank für Euere Hilfe
Anton

an himitsu:www.zuritronic.com
Falls Du die etwas universellere Methode TComport.SendBuffer (s. #15) benutzen möchtest, geht das z.B. so:

Delphi-Quellcode:
var
  Msg: T_OutMld;
begin
  Comport.SendBuffer(Msg, Length(Msg));
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:36 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