Raspberry + USB RS485

  • Hallo,

    das ist mein erster Post hier im Forum, bisher nur stiller Leser. Ich freue mich bereits jetzt auf eure hilfreichen Antworten, so wie ich es bisher immer gelesen habe.

    Folgendes, ich habe einen Raspberry, einen USB RS485 Konverter und 3 Arduino Nano und 3 TTL Konverter. Diese sind alle in einem 2wire System zusammengeschlossen, was auch funktioniert.
    Was ich jetzt aber gerne machen möchte, mit dem Raspberry automatisch erkennen, welche Ardinos aktiv sind.

    Also:
    "Scan" den Bus, gib mir alle "Adressen" und Frage den Arduino wer er ist.

    Ich hatte das Ansatzweise schon einmal gefunden leider weiß ich nicht mehr wo in den weiten des Internets.

    Ich freue mich auf Eure Hilfe.

    Einmal editiert, zuletzt von slsb02 (28. August 2017 um 08:41)

  • Erst einmal vielen Dank für die Stichworte.

    Ich benutze "einfach" serial, leider kann ich dazu nichts finden.

    Vielleicht macht ja auch der Wechsel auf ein anderes Protokoll Sinn. Das Projekt steht noch ganz am Anfang daher ist ein wechsel Problemlos möglich.
    Vielleicht hast du dazu auch Informationen.

    Was ich möchte, Sensoren an den Arduinos einlesen und an den PI senden und auswerten. Für eine Statusanzeige, möchte ich aber sehen, welche Arduinos anwesend sind.
    Daher soll quasi bei jedem Start die Scan erfolgen.

    Ich freue mich, Danke schon einmal bis hier her!!!

  • Hi,
    also ich würde da modbus nehmen ...
    Ich hatte seinerzeit JumpY u.a. bei modbus über RS485 ein wenig unterstützt -> https://www.forum-raspberrypi.de/Thread-arduino…n-raspi-arduino

    Ich denke, dort solltest Du eine Menge Informationen finden.
    cu,
    -ds-

  • dreamshader, vielen Dank das hatte ich bereits gelesen und bin daraus aber nicht wirklich schlau geworden, vielleicht übersehe ich auch einen passenden Link auf den Seite ;-(..

    meigrafd, am liebsten wäre mir "PHP" aber Python ist auch kein Problem. Wobei Python die bessere wahl ist, wie ich meine.

    Besten Dank!

  • Moin slsb02,

    ich bin selbst grad dabei einen Modbus aufzubauen andem Raspi (Master) und nachher insgesamt acht Arduinos (Slaves) quer durchs Haus verteilt dran hängen. Ebenfalls als Halbduplexvariante, also mit nur zwei Drähten. Ich hoffe das Thema hier ist für dich noch aktuell :) Ich bin selbst grad dabei viel über den Modbus und seine Eigenarten zu lernen und damit zu arbeiten. Ggfs. kann man sich dann hier in deinem Trööt gemeinsam "befruchten".

    Eines fällt mir da bei Halbduplex gleich mal auf, wenn man in dem Telegramm im Adressbyte die 0 angibt soll das die BroadcastID sein. Ich hab´s noch nicht selbst probiert (bin grad noch dabei eine Stabile Verbindung zwischen RasPi und EINEM Nano herzustellen und die übergebenen Daten in die MySQL zu schreiben), aber nach meinem Verständnis sollten dann doch alle am Bus hängenden Slaves zeitgleich antworten - quasi unmöglich einzelne Telegramme von einander getrennt auszuwerten, oder?

    Ich würde da, rein theoretisch und nur so als Idee, so vorgehen:

    Dir sind ja die ID´s deiner Slaves bekannt. Wenn du jetzt in einer Schleife einfach der Reihe nach alle ID´s oder eine ID-Range an pingst bekommst du ja nur von den wirklich aktiven ein Feedback. Also um meine Idee zu verdeutlichen rein beispielhaft:

    Master (Pi) --> Request an SlaveID1 --> Rückantwort vom Slave abwarten/auswerten --> Rückantwort erfolgt I.O.
    Master (Pi) --> Request an SlaveID2 --> Rückantwort vom Slave abwarten/auswerten --> keine Rückantwort Arduino nicht am Bus
    Master (Pi) --> Request an SlaveID3 --> Rückantwort vom Slave abwarten/auswerten --> Rückantwort erfolgt I.O.
    usw.

    Was genau meinst du mit "Frage den Arduino wer er ist"? Habe ich grad erst vom -ds- gelernt, der Slave antwortet nur dann, wenn er auch gefragt wird. D.h. von sich aus wird keiner der Slaves die Sensorwerte mitteilen oder in den Bus "schreien".

    Was verstehst du unter "Daher soll quasi bei jedem Start die Scan erfolgen."? Immer dann wenn der Raspi eingeschaltet wurde?

    Einmal editiert, zuletzt von Masterkennie (27. September 2017 um 13:15)

  • 2 Draht ist schon mal MODBUS RTU.
    Wenn man es kapiert hat, eigentlich simpel.
    Zum Broadcast: Zum Lesen von Slave-Daten nicht verwendbar.
    Wird normalerweise zur Steuerung der GESAMTANLAGE verwendet: LifeBit, STOP, oder sonstige Funktionen die ALLE Slaves ausführen sollen.
    Vorhandensein der Slaves ist, wie oben geschrieben, nur mit Abfrage aller Slaves unter Berücksichtung evtl. Fehlermeldungen (z.B. Timeout) zu ermitteln.
    EIne GANZ BÖSE Falle ist der Adressoffset beim Modbus, der blöderweise auch nicht fest definiert ist. Dieser Offset ist Hersteller/Software Abhänging.
    Also ist das erste Datenwort = Registeradresse+Offset.

    Hier mal ein Link zum Modbus: http://www.camillebauer.com/src/download/Modbus_Grundlagen.pdf

    Geht nicht, gibts nicht. Reine Preisfrage....

    Einmal editiert, zuletzt von dale (27. September 2017 um 14:01)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!