Idee gesucht für Anfangserkennung Protokoll

Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Idee gesucht für Anfangserkennung Protokoll

 · 
Posted: 22.03.2022 - 10:47  ·  #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
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: Idee gesucht für Anfangserkennung Protokoll

 · 
Posted: 22.03.2022 - 19:26  ·  #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
Gender:
Location: Belgrade, Serbia
Age: 53
Homepage: rs.linkedin.com/in…
Posts: 653
Registered: 07 / 2002
Subject:

Re: Idee gesucht für Anfangserkennung Protokoll

 · 
Posted: 23.03.2022 - 08:52  ·  #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
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Idee gesucht für Anfangserkennung Protokoll

 · 
Posted: 25.03.2022 - 13:43  ·  #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
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 14 · Cache Hits: 14   75   89 · Page-Gen-Time: 0.02376s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI