Hi,

ich habe mir gerade mal wieder mein Rs485 Protokoll angesehen und bin auf ein Problem gestoßen, welches sich so noch nicht bemerkbar gemacht hatte:

Code:
Isrlabel:

Incr E_id
Daten(e_id) = Udr

If E_id = 1 And Daten(1) = S_id Or Daten(1) = 255 Then
   Check = 1
   Init = 1
Else
   If Check = 0 Then
      E_id = 0
   End If
End If

If E_id = 3 And Check = 1 Then
 For B = 1 To 3
   Datenspeicher(b) = Daten(b)
   Daten(b) = 0
 Next B
   Check = 2
   E_id = 0
End If

If Check = 2 Then
   If Crc8(datenspeicher(1) , 2) = Datenspeicher(3) Then
     A = 1
     Check = 0
   Else
     E_id = 0
     Check = 0
   End If
End If

Return
Gesendet werden an den Slave:

1. Byte Slave Id
2. Byte Eine Zahl von 1-99 anhand der im Slave eine Funktion ausgeführt wird.
3. Byte Crc Prüfsumme

Nun mein Problem welches ich nicht bedacht hatte, denn bei einem Slave macht das noch keine Probleme.

Der Slave bekommt nun also die 3 Bytes gesendet.

Wenn nun durch einen Übertragungsfehler ein Byte verschluckt wird oder nicht ankommt ist es nun bei einem slave so das nichts weiter passiert.

Spätestens nachdem dann 3 Bytes angekommen sind z.B. 2 Bytes durch die 1. Sendung und 1 Byte durch die 2. Sendung würde die Checksummen Kontrolle nicht aufgehen, das Protokoll zurückgesetzt und drauf gewartet das wieder die passende Slave ID ankommt.

Nun kommt aber ein Problem auf, sobald mehrere Slaves vorhanden sind.

Mal unter der annahme es gibt 3 Slaves und die haben die Id 1, 2, 3.

Nun sende ich dem Slave mit der Id 2 folgenden Befehl.

1. Byte = 2 (SlaveId)
2. Byte = 1 (Nummer für die auszuführende Funktion)
3. Byte Checksumme

Nun mag beim Slave mit der Id 2 auch alles richtig ankommen. Der Slave mit der Id 1 hat nun aber ein Problem, da er mit der SlaveId 2 zwar nichts anfangen kann mit dem 2. Byte welches die Zahl 1 einthält aber schon. Somit währe der Slave schonmal automatisch für eine kleine Übertragungszeit arbeitsunfähig.

Wenn man nun Viele Slaves hat und der Nummernkonflikt oft autaucht hat man also ein recht großes Problem.

Hat jemand eine Idee wie man das lösen könnte, außer zu sagen Werte von 1-50 sind mögliche Slave Id´s alles von 50 - 100 auszuführende Aktionen ?

mfg blamaster