Blamaster
11.02.2009, 16:37
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:
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
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:
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