- Labornetzteil AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 13 von 13

Thema: Vorgehensweise beim einlesen eines Telegramms variabler Länge

  1. #11
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    Anzeige

    Praxistest und DIY Projekte
    Wow, da ist ja jetzt einiges an Information zusammengekommen.

    Also es ist so, das mein Telegramm momentan rein Binär aufgesetzt ist, weil ich glaube das ich so die länge des Telegrammes und somit die Übertragungszeit drastisch reduzieren kann.
    Das bringt aber auch den Nachteil mit sich, das es für mich schwierig ist ein Startbyte bzw. Endbyte zu definieren, da ja jedes Nutzdatenbyte theoretisch jeden beliebigen Wert zwischen 0 und 255 annehmen kann. Wie soll ich also verhindern das ein Nutzdatenbyte den Wert des Startbytes bzw. Endbytes annimmt und diese dann nicht mehr eindeutig sind?

    Ich hatte mir überlegt eine Überwachung über die Zeit zu realisieren.

    Und zwar soll das einlesen des Telegramms in zwei Stufen erfolgen.
    Zunächst wird gewartet bis die Anzahl an Bytes für den Telegramkopf im Eingangspuffer sind, da der Kopf ja immer die selbe Länge hat.
    Im zweiten Schritt wird dann der Rest des Telegramms anhand der variablen Länge eingelesen. Diese variable Länge ist ja inzwischen durch den Kopf bekannt.
    Ist dann der Rest des Telegramms komplett eingegangen kann es weiter überprüft und verarbeitet werden (Richtige Teilnehmeradress, CRC usw.).

    Nun zur zeitlichen Überwachung:
    Parallel mit dem Eintreffen des ersten Bytes wird eine Zeitüberwachung angestartet.
    Die Zeit der Überwachung ist abhängig von der Anzahl der Bytes die eingelesen werden sollen und wird nach dem Einlesen des Kopfes nochmals korrigiert wenn die Länge der variablen Daten feststeht.
    Ist nun die Zeit abgelaufen und das Telegramm nicht vollständig eingegangen oder es stehen Daten über die erwartete Länge hinaus im Eingangspuffer.
    Weiß man schon mal, das was schiefgelaufen ist und der Puffer wird geleert. Somit steht er wieder für den Empfang eines neuen Telegramms bereit.
    Ist das Telegramm korrekt empfangen wird die Zeitüberwachung gestoppt.

    Im Fehlerfall hat ja der Master keine Rückmeldung erhalten, somit muss er irgendwann sein Telegramm wiederholen und erneut versuchen den Slave zu erreichen um die Kommunikation wieder aufzunehemen.

    Was haltet Ihr davon?

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Kann man machen. Würde ich aber nicht so lösen. Was ist so zeitkritisch, wenn es im Fehlerfall eh wiederholt werden kann? Der Master muss sich bei mehreren Slaves dann auch eine Menge merken, um es nochmal zu senden, wenn keine Antwort kam. Stehen da evtl. schon neue Daten an, braucht es weitere Puffer. Was lässt Dich an einer zuverlässigen Übertragung zweifeln?

    Wieviele Slaves gibt es, was sollen die so machen und wieviel neue Daten kommen in welchem Zeitraum zusammen? Das würde ich alles berücksichtigen und darauf das Protokoll aufbauen. Die Baudrate wähle ich anhand der Verbindungsqualität und Leitunsglänge.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  3. #13
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    Naja eine Fehlerbehandlung muss ja in irgendeiner Form rein!? Das mit der Überwachungszeit ist rein nur als Fehlerbehandlung gedacht um im Fehlerfall wieder auf einen grünen Zweig zu kommen, also den Telegrammempfang zu bereinigen.

    Und wenn ein Fehler im Buszyklus auftritt muss das doch auch irgendwie behandelt werden!? Oder feuert ihr einfach alle Telegramme nacheinander einfach raus und wartet gar nicht nach jedem anpollen eines Slaves auf dessen Antwort?

    Ich meine man muss doch immer mal damit rechnen das ein Telegramm mal zerstört wurde durch Einstreuungen oder was weis ich!

    Also Ziel soll es sein, einen Ausgangsdatenspeicher, welcher im Master permanent aktualisiert wird an die Slaves zu verteilen und umgedreht die aktuellsten Daten abzuholen um einen Eingangsdatenspeicher zu füllen. Die Daten stehen also so und so die ganze Zeit in der Steuerung zur Verfügung und werden dann nur nochmal in der zu diesem Zeitpunkt aktuellsten Form gesendet.
    Geändert von demmy (14.10.2014 um 18:53 Uhr)

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Länge eines Distanzbolzen
    Von Lunatix im Forum Mechanik
    Antworten: 2
    Letzter Beitrag: 18.08.2009, 13:27
  2. Länge eines Pulses messen
    Von waxology im Forum C - Programmierung (GCC u.a.)
    Antworten: 10
    Letzter Beitrag: 22.08.2007, 06:58
  3. Antworten: 1
    Letzter Beitrag: 03.06.2007, 09:15
  4. Einlesen eines Tasters...
    Von Spritey im Forum PIC Controller
    Antworten: 4
    Letzter Beitrag: 28.01.2005, 11:25
  5. [ERLEDIGT] Werte eines Biosensors in HW einlesen
    Von Takeo im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 22.11.2004, 15:46

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen