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
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.
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.
gib der Klingel oder Alarmanlage je ein Statusbyte das du alle 1,5 Sekunden abfragen kannst...wo ist das Problem ?
@ 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.
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
@ 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.
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.