Serielle ?

  • 1
  • 2
  • 3
  • 4
  • Seite 1 von 4
TheBeginner
Schreiberling
Avatar
Geschlecht: keine Angabe
Herkunft: Wunsiedel Bayern
Alter: 68
Beiträge: 776
Dabei seit: 06 / 2013
Betreff:

Serielle ?

 · 
Gepostet: 02.08.2015 - 08:21 Uhr  ·  #1
Guten morgen,

In mein Projekt muss ich die Serielle 100% unter Kontrolle haben.
Das bedeutet das ich von Computer immer 10 Byte sende.
Diese 10 Byte möchte ich in Header : Array[0..9] of Byte abspeichern.

Die Serielle frage ich so ab und lese dann die Daten in mein Header ein.

Code
  SerPort        = 115200, Stop1;    {Baud, StopBits|Parity}
  RxBuffer       = 10, iData;
  TxBuffer       = 10, iData;
//...
    if SerStat then
        SerInpBlock(Header);
        CASE Header[0] OF
           $3F :  GeheProc;  


If SerStat sagt doch nur, daß min 1 Byte angekommen ist, dann würde ich ja schon in meine
Procedure reinlaufen..
wie kann man testen ob die ganzen 10 Byte angekommen sind ?



Gruß Frank
TheBeginner
Schreiberling
Avatar
Geschlecht: keine Angabe
Herkunft: Wunsiedel Bayern
Alter: 68
Beiträge: 776
Dabei seit: 06 / 2013
Betreff:

Re: Serielle ?

 · 
Gepostet: 02.08.2015 - 08:50 Uhr  ·  #2
Habe es, hab mir gerade ein test prog. geschrieben.

SerInpBlock(Header); bleibt solange in der schleife bis alle 10 Byte angekommen sind.
Also MUSS ich immer 10 Byte senden.

Oder ich benutze noch TimeOut.
In der Pdf Datei steht nichts drin wie ich TimeOut benutze ?

Könnte ich TimeOut einen wert zb. 100 für 100ms am Anfang meines Prog
übergeben ? Oder in was zählt TimeOut ?



Gruß Frank
Harald_K
 
Avatar
 
Betreff:

Re: Serielle ?

 · 
Gepostet: 02.08.2015 - 11:03 Uhr  ·  #3
du könntest auch den Puffer etwas vergrößern (wegen Überlauf) und dann statt serinp die Variable _rxcount ( typ byte ) abfragen - die zählt die Zeichen im Puffer.

Du mußt nur genug Pufferplatz lassen damit evtl. folgende Blöcke nicht verlorengehen, falls du nicht irgendeine Art von Quittierung verwendest.
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: Serielle ?

 · 
Gepostet: 02.08.2015 - 11:53 Uhr  ·  #4
Du könntest auch eine Satzkennung (wie bei NMEA) voran stellen, dann weißt du, wann ein Datensatz anfängt.
Harald_K
 
Avatar
 
Betreff:

Re: Serielle ?

 · 
Gepostet: 02.08.2015 - 15:38 Uhr  ·  #5
...aber nicht, wann er komplett empfangen wurde ....

übrigens - Serstat nutzt auch die Abfrage der _rxcount auf >0
Merlin
Administrator
Avatar
Geschlecht:
Alter: 25
Beiträge: 1473
Dabei seit: 03 / 2005
Betreff:

Re: Serielle ?

 · 
Gepostet: 02.08.2015 - 15:40 Uhr  ·  #6
The method I use for time out is
Code
var
  MyTimer : systimer;

...

if SerStat then
  SetSysTimerM( Mytimer, 100); // another 100 ms
...
elsif IsSysTimerZero( Mytimer ) then
  // timed out action
  ...
endif;
TheBeginner
Schreiberling
Avatar
Geschlecht: keine Angabe
Herkunft: Wunsiedel Bayern
Alter: 68
Beiträge: 776
Dabei seit: 06 / 2013
Betreff:

Re: Serielle ?

 · 
Gepostet: 02.08.2015 - 18:22 Uhr  ·  #7
Wenn ich drauf achte das ich wirklich 10 Byte an den uC sende, dann habe ich auch keine
Probleme.

Wenn ich nur 9 senden würde, würde er in der schleife hängen bleiben, deswegen schaue ich mir
noch Merlins und auch Harald Code an.

@Harry, Das werde ich mit senden, (wieviel Byte wurden gesendet) zb in Header[1]



PS. Wenn man die Serielle unter Kontrolle hat, geht es ruckzuck.. :3some:


Gruß Frank
Gunter
Administrator
Avatar
Geschlecht:
Herkunft: Frankfurt Main / Germany
Beiträge: 1697
Dabei seit: 02 / 2003
Betreff:

Re: Serielle ?

 · 
Gepostet: 02.08.2015 - 19:13 Uhr  ·  #8
Hi Frank,

dafür würde sich das SLIP Protokoll anbieten. Aber natürlich nicht mit 3.98
Du bist doch so intensiv dabei, machst dir das Leben mit dieser alten Version aber an allen Fronten unnötig schwer.
Es weiß doch niemand mehr, was damals aktuell war und absolut problemlos funktionierte.
Und deshalb gehen viele Tipps halt oft "ins Leere".
Ein Update beinhaltet doch auch einen neuen und schnellen Programmer

Ich, z.B., gebe für mein Fotohobby weitaus mehr aus!

Überdenk mal deine Prioritätenliste.

Gruß
Gunter
  • 1
  • 2
  • 3
  • 4
  • Seite 1 von 4
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   137   151 · Page-Gen-Time: 0.049456s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI