Serielle ?

  • 1
  • 2
  • 3
  • 4
  • Page 1 of 4
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Serielle ?

 · 
Posted: 02.08.2015 - 08:21  ·  #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
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: Serielle ?

 · 
Posted: 02.08.2015 - 08:50  ·  #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
 
Subject:

Re: Serielle ?

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

Re: Serielle ?

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

Re: Serielle ?

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

übrigens - Serstat nutzt auch die Abfrage der _rxcount auf >0
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1409
Registered: 03 / 2005
Subject:

Re: Serielle ?

 · 
Posted: 02.08.2015 - 15:40  ·  #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
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: Serielle ?

 · 
Posted: 02.08.2015 - 18:22  ·  #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
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Serielle ?

 · 
Posted: 02.08.2015 - 19:13  ·  #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
  • Page 1 of 4
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   137   151 · Page-Gen-Time: 0.022806s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI