Idee gesucht für Anfangserkennung Protokoll

Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Idee gesucht für Anfangserkennung Protokoll

 · 
Gepostet: 22.03.2022 - 10:47 Uhr  ·  #1
Hallo Zusammen,

ich habe ein Protokoll bei dem 512 Bytes als zusammenhängender Block via RS485 zyklisch gesendet werden. Zwischen den Blöcken ist eine Pause von ca. 17ms.
Wie könnte man eine solche Pause erkennen? Wie macht man sowas? Ideen?

Gruss & Danke
Harry
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1343
Dabei seit: 02 / 2009
Betreff:

Re: Idee gesucht für Anfangserkennung Protokoll

 · 
Gepostet: 22.03.2022 - 19:26 Uhr  ·  #2
Hallo Harry,

da gibt es verschiedenste Ansätze.

Ich würde es erstmal so angehen:

1. Einen Timer setzen
2. Mit SerStat / WaitPipe prüfen ob Daten vorhanden sind, wenn ja Timer auf 0 setzen und Daten abholen und zwischenspeichern. Wenn nein mit FlushBuffer() Empfangspuffer leeren und den Zwischenspeicher prüfen, wurden 512 Byte empfangen dieses Paket verarbeiten, wenn nein verwerfen und evtl. neu anfordern.

Evtl. kann man auch direkt den PortPin zum Timer rücksetzen nutzen, auch das nutzen des Timeout's wäre evtl. denkbar, habe ich aber so noch nie benutzt.

Hat das Paket evtl. einen festen Kopf am Anfang, das würd es extrem erleichtern, bei nur Zeittrennung zwischen den Paketen würde ich es mit dem Timer angehen.

Gruß
Thorsten
Avra
Schreiberling
Avatar
Geschlecht:
Herkunft: Belgrade, Serbia
Alter: 54
Homepage: rs.linkedin.com/in…
Beiträge: 653
Dabei seit: 07 / 2002
Betreff:

Re: Idee gesucht für Anfangserkennung Protokoll

 · 
Gepostet: 23.03.2022 - 08:52 Uhr  ·  #3
Code
Function SerInp_TO (var rx: char|byte; const timeoutinsysticks: byte): boolean;


If you can afford idling on timeouts, then you could alternatively have a loop for serial reading, with timeoutinsysticks set to 5ms. Once you detect timeout, next byte read will be the 1st byte of new message.
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: Idee gesucht für Anfangserkennung Protokoll

 · 
Gepostet: 25.03.2022 - 13:43 Uhr  ·  #4
Hallo,

ich habs ....
Code

Var
  DMXData               : Array[0..511] of Byte;      // DMX-Daten
  DMXDummy              : Byte;

Process ReadDMX($100,$100:iData);
  Begin
    Repeat
      DMXDummy:=SerInpC0;
      Until Bit(USARTC0Status,4)=true;
    Lock(self);
    SerInpBlock(USARTC0,DMXData);
    UnLock(self);
  End ReadDMX;


Das Protokoll erzeugt am Anfang einen Frame-Error und auf den muß man warten :).

Gruss & Danke
Harry
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   75   89 · Page-Gen-Time: 0.045123s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI