Forum: Mikrocontroller und Digitale Elektronik Rs485 probleme (Polling / Multimaster)


von Tom (Gast)


Lesenswert?

Hallo Leute,

ich hab heut Nacht schlecht geschlafen und auf einmal mein komplettes 
privates Projekt in Frage stellen müssen wegen einem Einfall....

Im Prinzip habe ich eine kleine Steuerung für Geräte in einem Raum 
gebaut.
Jedes Gerät funktioniert an sich eigenständig, erhält Steuersignale und 
Statusabfragen von einem Master-PC.

Bus ist rs485 full duplex. Also mit 4 Leitungen.

Soweit so gut, im Moment läuft das so, dass der master einfach wenn 
keine Befehle anliegen alle Slaves in reihe durchgeht und den Status 
abfragt. Das dauert so ca. 1,5 Sekunden, bis er bei allen einmal durch 
ist (150 Geräte am Bus).

Auf dem Bus ist normal nicht viel los, wenn nicht gerade ein Gerät mit 
einer neuen Softwareversion programmiert wird (Bootloader via rs485)


Blöderweise ist mir heute Nacht eingefallen, dass ich vll. auch mal 
weitere Geräte wie eine Türklingel oder Alarmanlage anbinden will. Da 
ist jetzt natürlich auf einmal recht doof, wenn der status von allen 
Geräten nur gepollt wird. Wer will schon - vor allem wenn's dann noch 
ein paar Geräte mehr werden oder eines gerade programmiert wird - 
mehrere Sekunden auf die Türklingel warten oder dem Dieb Sekundenlang 
zeit geben die Alarmanlage abzuschalten, bis sie mal gepollt wird....?


Wenn ich richtig liege brauche ich also nun multi-master fähigkeit und 
bin damit mit rs485-fullduplex komplett am A......


:-/ ?

Danke euch

von Tom (Gast)


Lesenswert?

Ah, noch eine kleine Ergänzung. Vielleicht brauch ich garnicht unbedingt 
Multi-Masterfähigkeit. Also meine Slaves sollen nicht untereinander 
reden.

Was ich aber haben will ist ein:

"Frag mich mal ab, bei mir ist irgendwas los"  was jeder slave an den 
master senden können müsste.

von Guest (Gast)


Lesenswert?

Ich hab auch einen RS485 Bus realisiert. Allerdings ist dieser nur 
Halbduplex.
Mit einer Seuerleitung vom Controller schalte ich den Pegelwandler 
zwischen Senden/Empfangen um.

Normalerweise sing alle Knotem am Bus auf Empfang.
Die Empfangsleitung liegt zusätzlich an einem Interrupt PIN des 
Controllers.
Wenn Daten auf dem Bus übertragen werden, wird ein PinChange Interrupt 
ausgelöst und so ein Zeitzähler zurückgesetzt.
Sollen nun Daten gesendet werden, wird dieser Zähler abgefragt. Hat 
dieser einen bestimmten Wert, kann mit grosser Wahrscheinlichkeit der 
Status des Bus bestimmt werden.
Ist er frei, werden die Daten sofort gesendet, ist er belegt, wird eine 
bestimmte Zeit gewartet danach eine neue Busprüfung gestartet.

von kukuk (Gast)


Lesenswert?

gib der Klingel oder Alarmanlage je ein Statusbyte das du alle 1,5 
Sekunden abfragen kannst...wo ist das Problem ?

von Falk B. (falk)


Lesenswert?

@  Tom (Gast)

>Bus ist rs485 full duplex. Also mit 4 Leitungen.

Warum? Wenn es sowieso nur ein einfaches Master-Slaver System ist, reich 
halbduplex locker aus und spart eine Doppelader.

>abfragt. Das dauert so ca. 1,5 Sekunden, bis er bei allen einmal durch
>ist (150 Geräte am Bus).

Macht 10ms /Gerät. Ganz schön lange. Warum? Mit 115k2 als Baudrate und 
kurzen Paketen von vielleicht 10 Byte braucht man eher 2ms.

>weitere Geräte wie eine Türklingel oder Alarmanlage anbinden will.

Zwei vollkommen verschiedene Dinge.

>Geräten nur gepollt wird. Wer will schon - vor allem wenn's dann noch
>ein paar Geräte mehr werden oder eines gerade programmiert wird -
>mehrere Sekunden auf die Türklingel warten

Firmware wird ja im Normalfall nur selten programiert und dann ist der 
Bus halt langsamer oder ganz inaktiv bezüglich der Normalfunktion.

> oder dem Dieb Sekundenlang
>zeit geben die Alarmanlage abzuschalten, bis sie mal gepollt wird....?

Naja, die Sicherheit von Alarmanalgen besiert nciht auf einem Bussystem 
;-)
Das mit der Klingel würde ich schon eher akzeptieren.

>Wenn ich richtig liege brauche ich also nun multi-master fähigkeit

Ja.

> und
>bin damit mit rs485-fullduplex komplett am A......

Was willst du dauch damit? Die wenigsten Feldbusse arbeiten vollduplex.

von Tommi (Gast)


Lesenswert?

Ich hab fullduplex genommen, weil ich so jede beliebige serielle 
Schnittstelle einfach mit einem transceiver auf den Bus hängen kann.

Gut, bei den mikrocontrollern wäre es kein Problem eine enable leitung 
zu nutzen, bei dem mini-pc, den ich zum steuern nutze kommt allerdings 
nur eine uart auf 3,3v raus, die ich direkt auf meinen transceiver 
hängen kann. gpio hab ich da leider keine.


// Die zeiten sind relativ lang, weil:

- 96 kbit/s
- 2 byte slave adresse + datenpaket + checksumme
- antwort mit ca. 30 byte pro gerät + checksumme

von Falk B. (falk)


Lesenswert?

@  Tommi (Gast)

>hängen kann. gpio hab ich da leider keine.

Die Umschaltung TX/RX kann man bei fester Baudrate mit einem 
retriggerbaren Monoflop machen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Tom schrieb:
> Wenn ich richtig liege brauche ich also nun multi-master fähigkeit und
> bin damit mit rs485-fullduplex komplett am A......

Du fragst im Moment 150 Geräte zyklisch ab:

1, 2, 3, .... 150.

Jedes Gerät besitzt bei Dir also dieselbe Priorität. Das ist aber im 
Allgemeinen Unsinn. Einige Geräte könntest Du auch seltener abfragen, 
einige aber öfter.

Du könntest die Türklingel also einfach öfters abfragen, z.B. 10 mal so 
oft wie die anderen Geräte. Ebenso könntest Du Geräte, die weniger 
zeitkritisch sind, seltener abfragen (z.B. 1/10 so oft), z.B. ein 
Thermometer.

Dann würde die Türklingel alle 0,15 sec abgefragt werden, das 
Thermometer aber nur alle 15 sec.

Du musst also in Deine Abfragesequenz 1...150 die Türklingel (z.B. als 
Gerät 151) folgendermaßen einbauen:

1, 2 ... 10, 151, 11, 12 ... 20, 151, 21, 22 ... usw.

Ein Thermometer (nehmen wir mal Gerätenummer 152 an), fragst Du nur ab, 
wenn Du die Sequenz 1.... 150 10mal durchlaufen hast.

von Helmut L. (helmi1)


Lesenswert?

Tom schrieb:
> Blöderweise ist mir heute Nacht eingefallen, dass ich vll. auch mal
> weitere Geräte wie eine Türklingel oder Alarmanlage anbinden will. Da
> ist jetzt natürlich auf einmal recht doof, wenn der status von allen
> Geräten nur gepollt wird. Wer will schon - vor allem wenn's dann noch
> ein paar Geräte mehr werden oder eines gerade programmiert wird -
> mehrere Sekunden auf die Türklingel warten oder dem Dieb Sekundenlang
> zeit geben die Alarmanlage abzuschalten, bis sie mal gepollt wird....?

Wo ist das Problem. Dann muss du deinen Pollzyklus ein bisschen anders 
gestalten.

Also nicht der Reihe nach sondern die Tuerklingel zwischen durch oefter 
pollen.

Beispiel:

Die Tuerklingel sei die Nummer 4.

Also jetzt nicht 1 , 2 , 3 , 4 , 5 , 6 , 7 pollen sondern

1, 4 , 2 , 4 , 3 , 4 , 5 , 4 , 6 , 4 , 7 im extermfall.

So wird die Tuerklingel viel hauefiger gepollt und kommt eher zum Zug.

von da1l6 (Gast)


Lesenswert?

Hallo

Anstatt immer einen ganzen Roman beim Pollen zu übertragen könntest du 
eine möglichst kurze "nix neues" Antwort einführen. Damit könnte die 
Antwort in 99% der fälle nur ein Byte lang sein.

da1l6

von Ziff (Gast)


Lesenswert?

Ich arbeite auch mit RS422, wie man den fullduplex RS485 eigentlich 
nennt.
Die 150 Devices alle 1500ms macht alle 10ms ein Device. Das geht auch 
schneller. Mach der Baudrate mal etwas Dampf, und dann allenfalls 
Priorisieren. Temperaturen zB braucht man nicht so oft.

von Stefan W. (dl6dx)


Lesenswert?

Ziff schrieb:
> RS422, wie man den fullduplex RS485 eigentlich
> nennt

Vorsicht: RS422 und Vollduplex-RS485 verwenden zwar beide symmetrische 
Übertragung über eine Vierdrahtleitung, aber unterscheiden sich 
deutlich:

RS422 ist eine Punkt-zu-Punkt-Verbindung (nur zwei Teilnehmer),
RS485 kann auf einer Leitung mehr als zwei sendende Teilnehmer haben 
(Multipoint-Verbindung).

Grüße

Stefan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.