- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Netzwerkprotokoll im kleinen Maßstab

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    15.08.2012
    Beiträge
    24

    Netzwerkprotokoll im kleinen Maßstab

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hey Leute,
    zuerst mal ein herzliches Hallo meinerseits. Ich bin neu in diesem Forum, ich beobachte es zwar schon eine ganze Weile, habe aber erst jetzt den Mut aufgebracht mich anzumelden.
    Ich bin Hobbyprogrammierer und -elektroniker. Ich bin 19 Jahre alt, habe aber schon mit 6 angefangen kleine sich bewegende Schaltungen zu bauen, aus purer Lust an der Schöpfung von "Leben".
    Ich bin gerade an einem privaten Projekt, was sich unter Umständen aber später vermarkten lässt. Ich bin gerade beim Abitur und kann mich deshalb nicht um meinen Garten kümmern, deswegen benötige ich kleine Einheiten die sich um die Wasserzufuhr kümmern. Ich habe bereits Algorithmen aufgestellt, die in Abhängigkeit von Temperatur, Luftdruck und Luftfeuchtigkeit errechnen, wann welches Areal begossen werden muss. Mein Problem ist nun: Ich kann die Stationen nicht verknüpfen.

    Die Hauptrecheneinheit ist ein Atmega32, die kleineren Stationen jedoch sind kleine PIC-Microcontroller, die alle per Funk verbunden sind. Der Atmega32 kann also per Antenne jede Einheit erreichen, allerdings ist das ganze System dann analog, und das funktioniert nicht. Um den Funkverkehr zu digitalisieren benötige ich ein Netzwerkprotokoll, sodass alle Microcontroller kommunizieren können und ich die Routinen für die Bewässerungsstationen schreiben kann.
    Kabelverbindungen scheiden übrigens aus, da sich in dem Garten auch Nager aufhalten, und unterirdisch geht nicht, da der Boden viel zu hart zum Aufgraben ist.
    Vielleicht kann mir also einer von euch zeigen/erklären, wie man am besten ein Netzwerkprotokoll erstellt und verwendet.

    Ich bedanke mich schon einmal im Voraus
    MFG Technipion

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Hallo Technipion,

    der Entwurf von Protokollen ist je nach Zielvorgabe eine sehr anspruchsvolle Tätigkeit. Je nach Anforderungen und Rahmenbedingungen können Protokolle sehr unterschiedlich Aussehen und gestaltet werden.

    Protokolle kann man unterschiedlichen "Schichten" zuordnen. Die unteren Schichten arbeiten dabei sehr hardwarenah, die darüber liegenden Schichten bauen auf dieser Funktionalität auf und biete komplexere Dienste an. Die Aufgaben der Schichten ändern sich mit zunehmendem Abstraktionsgrad. Eine gängige Strukturierung:
    Schicht 1: Die Bitübertragungsschicht (physical layer) kümmert sich darum, einzelne Bits über ein Medium zu befördern. Üblicherweise wird diese Aufgabe von spezialisierten Hardwarekomponenten (SPI/USART, Funkchips etc.) übernommen.
    Schicht 2: Die Sicherungsschicht (data link layer) hat als Aufgabe, aus dem kontinuierlichen Bitstrom der über Schicht 1 versendet wird, eine zuverlässige und strukturierte Transportmöglichkeit für Daten zu formen. Speziell bei Funk ist dabei der Medienzugriff wichtig, da mehrere Sender sich gegenseitig stören.
    Schicht 3: Die Vermittlungsschicht (network layer) brauchst du möglicherweise schon gar nicht mehr. Sie ist dafür zuständig, Informationen über mehrere Stationen hinweg zu übertragen (Routing). Die ersten beiden Schichten decken dagegen nur die Kommunikation zwischen zwei benachbarten Endpunkten ab.
    Darüber gibt es noch weitere Schichten (mehr dazu im Wikipedia-Artikel OSI-Modell), die sind aber an dieser Stelle uninteressant.

    Der wichtigste Teil deines Protokollentwurfes wird darin bestehen, zum einen eine zuverlässige Fehlererkennung zu gewährleisten, und zum anderen den Medienzugriff zu regeln. Darauf aufbauen kannst du dann die Signalisierung für dein Bewässerungssystem erledigen.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    15.08.2012
    Beiträge
    24
    Zuerst mal vielen Dank für die schnelle Antwort!

    Ich konnte heute in der Schule noch ein wenig darüber nachdenken und einen ungefähren Plan entwerfen wie ich meine Drahtloskommunikation aufbauen könnte. Wenn ich das jetzt mit deiner Antwort (den verschiedenen Schichten) kombiniere, kommt etwa folgendes heraus:

    An jede Station kommt (oder ist bereits) ein Microcontroller, der an zwei seiner Pins mit einer Antenne, die auf 2 verschiedenen Frequenzen senden kann, verbunden ist. Die erste Frequenz (die ruhig niedrig sein kann) ist für die Synchronisation der Pakete und die zweite für den Inhalt. Dadrin wären dann quasi Schicht 1 und 2:
    Wenn ich einen bestimmten Controller ansteuern will, baue ich zuerst das zu schickende Paket. Dazu schreibe ich in den Header die Nummer, die ich vorher an der anzusteuernden Platine eingestellt habe (ist sozusagen die IP-Adresse der Platine, und die ist mit einem Kodierschalter einstellbar). Außerdem kommt die Nummer des Absenders hinein. Dann kommt der Bytecode und am Schluss noch eine Prüfsumme. Dann wird geprüft ob die Hauptleitung (Frequenz 2) gerade frei ist und gegebenfalls gewartet. Ist jedoch gerade kein Funkverkehr, wird ein kurzer Impuls auf der Nebenleitung (Frequenz 1) gesendet und somit alle Empfänger aufmerksam gemacht (z.B. durch ein Interrupt; der Funkverkehr ist in diesem Moment für die anderen gesperrt). Dann wird der Header gesendet (evtl. sogar mit eigener Prüfsumme?) und der entsprechende Empfänger weiß, dass er gemeint ist. Die anderen Empfänger gehen dann wieder in den Standby. Als nächstes wird der Content gesendet und anschließend die Prüfsumme und dann gewartet. Der Empfänger wertet die Daten aus und liefert im Normalfall einen Erfolgscode zurück an den Absender. Falls er das Paket nur fehlerhaft erhalten hat (und das an der Prüfsumme merkt), gibt es einen Errorcode und das Paket wird erneut gesendet. Wenn es beim x-ten Senden (muss man ausprobieren wie oft) nicht ankommt, wird abgebrochen.
    Wenn das Paket erfolgreich übermittelt wurde, und der Erfolgscode beim Absender angekommen ist, sendet dieser erneut einen Impuls auf der Nebenfrequenz und der Funkverkehr ist wieder entsperrt.

    Ich wollte jetzt fragen, wie ihr Experten das seht. Kann man das so machen; rein vom Zeitaufwand her ist es kein so großes Problem, ich würde sagen maximal 2-3 Wochenenden und fertig ist das Projekt.

    Danke schonmal im Voraus
    Gruß Technipion

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Waaaaaaaait: Vergiss es. Einfach Drähte an einen µC anschließen macht noch keine Funkverbindung! Du willst dir Funkmodule kaufen. Günstig und recht weit verbreitet sind die RFM12 von Pollin. Die kümmern sich dann für dich komplett um Schicht 1. Ach ja: 2 bis drei Wochenenden ist ... optimistisch. Irgendwas geht immer schief

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    29.08.2008
    Beiträge
    73
    Hey,

    unabhängig davon wie deine Hardware aussieht (davon haben hier viele mehr Ahnung als ich) würde ich an deiner stelle über ein Token-Ring-Verfahren nachdenken. Das macht die Frage wer was sendendarf recht einfach. Dabei darf immer nur ein Teilnehmer senden. Und dieser sendet immer an den, der in der Reihenfolge als nächster kommt. So schickst du immer alle Daten in gewissen Intervallen im Kreis, das erzeugt zwar recht viel Datenverkehr, aber du kannst sehr leicht sagen: Wenn der Vorgänger fertig ist bin ich dran. Und für deine Anwendung reicht es sicher wenn so eine Runde alle paar Minuten gesendet wird.
    Ich hoffe das hilft dir weiter.

    Gruß Elchimtr

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    15.08.2012
    Beiträge
    24
    Hey danke für die Antworten,
    ich meinte natürlich nicht, direkt die Antennen an die Pins anzuschließen, sondern eine externe Sende- und Empfangsschaltung. Aber die Funkmodule die markusj vorgeschlagen hat funktionieren doch auch irgendwie. Wie stellen die eine fehlerfrei Bitübertragung her? Das könnte man doch dann in den Übertragunsalgorithmus integrieren...
    Das Token-Ring-Verfahren klingt auch nicht schlecht, allerdings ist mein Vorschlag von oben ja fast das gleiche, nur das ich damit in jedem Zyklus jeden beliebigen Zugriffspunkt ansteuern könnte.
    Und das 2 bis 3 Wochenenden optimistisch sind weiß ich auch, ich besitze was so etwas angeht aber auch viel Ehrgeiz
    Ich denke ich werde mich jetzt erst einmal an den Code und die Übertragungsmodule (vorerst ein einfacher Draht, danach erst Funk) setzen, und wenn ich fertig oder gescheitert bin mein Ergebnis hier posten.
    Ich danke euch allen schon mal für die Antworten und falls ich während des Bauens noch Fragen habe melde ich mich einfach wieder.
    Danke
    Gruß Technipion

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    @Token-Ring: Don't! Funk ist ein unzuverlässiges Medium, es macht mit Garantie einen Heidenspaß verlorenen Tokens hinterherzujagen ... Über Funk haben sich simple konkurrierende Zugriffsverfahren wie CSMA bewährt.

    @Fehlerfreie Funkmodule: Gar nicht. Du schiebst Bytes in den Sendepuffer, das Funkmodul sendet diese in den Äther und auf der Gegenseite empfängt ein Funkmodul meistens etwas, das eine hohe Ähnlichkeit mit dem hat, was ursprünglich Mal gesendet wurde. Die einfachen Funkmodule nehmen dir nur die Synchronisation und die eigentliche Datenübertragung ab (Schicht 1). Den Medienzugriff, Fehlererkennung und Behandlung musst du selbst implementieren. Und das ist schon mehr als genug.

    mfG
    Markus

    PS: Das mit den Datenverlusten ist leicht übertrieben dargestellt. Oft geht alles gut, selten gehen Übertragungen ganz verloren oder es gibt Bitmüll. Da du aber eine zuverlässige Übertragung haben möchtest, solltest du vom schlimmsten ausgehen

    PPS: Wenn du erst über Draht arbeitest: Plane von vornherein eine Abstraktion zwischen deinem Protokoll und dem Treiber für Schicht 1. Sonst musst du später alles Umstricken und Teufels Küche weil du Fehler nicht findest die durch die Modifikationen verursachst oder zutage förderst.
    Tiny ASURO Library: Thread und sf.net Seite

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    31
    Beiträge
    601
    @markusj: ist in diesem Fall überhaupt ein Zugriffsverfahren wie CSMA notwendig? Wie Technipion in seinem ersten Beitrag schreibt, hat er eine Hauptrecheneinheit (setze ich mal mit "Master" gleich) und mehrere "Slaves". Wenn nun der Master ein Telegramm per "Broadcast" aussendet (alle Slaves können ja die drahtlos übermittelte Information empfangen) und in dem Telegramm Fehlererkennungsinformationen (etwa CRC) mit drinstecken - wäre das nicht doch auch ausreichend?

    Der Slave könnte ja dann das Paket ACKnowledgen und ggf. Daten zurücksenden.

    Ich habe mal ein ähnliches Protokoll für ein halbduplex RS485 implementiert - wäre das nicht rein aus der Sicht des ATMega eine äquivalente Situation zu der hier dargestellten Funklösung (Single-Master, logischer Bus, ...)?

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Naja, theoretisch könnte man für Rückantworten einfach einen Zeitslot nach Senden des Paketes von der Master-Einheit reservieren, dann braucht man das nicht. Sollen dann aber einzelne Module selbst Ereignisse an den Master senden, muss dieser dann ständig die entsprechenden Module abfragen.

    Vieles ist auch eine Geschmackssache, wenn ich so etwas entwerfe, plane ich es oft im Hinblick auf eine Wiederverwendbarkeit bei anderen Projekten. Das macht beim ersten Mal etwas mehr Arbeit, dafür hat man danach dann aber Bibliotheken die für viele andere Anwendungsfälle ebenfalls eingesetzt werden können.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    15.08.2012
    Beiträge
    24
    Hey Leute,
    zuerst nochmal danke für eure Antworten.
    Ich konnte gestern Abend noch etwas herumrechnen und ein kleines Simulationsprogramm schreiben. Dabei ist mir aufgefallen, dass die Wahrscheinlichkeit ein intaktes Paket zu erhalten nahezu exponentiell abnimmt. Deswegen habe ich mir noch einmal zwei kleine Änderungen überlegt wie ich eine einwandfreiere Fehlererkennung hinbekomme.
    Die erste Änderung ist, dass ich in dem Header des Paketes noch einen Pakettyp einfüge, einfach nur weil es in den meisten Netzwerkprotokollen enthalten ist, und das Netzwerk ausbaufähig macht.
    Die zweite Änderung ist ein Verfahren, welches ich mir überlegt habe nachdem ich bei der NASA einen ähnlichen Algorithmus gefunden hatte.
    Da ich f1 und f2 (f = Frequenz) kenne, kann ich folgendes machen:
    Wenn das Paket nach dem x-ten mal nicht ankam, wird noch ein Versuch unternommen. Das Paket wird gesendet/empfangen und das empfangene Signal wird mit einer FFT (Fast Fourier Transformation) in ein Spektrum transformiert. In dem Spektrum sieht man dann alle auftretenden Störgeräusche, und natürlich die Ursprungsfrequenz f1. Dann werden alle Teile entfernt, deren Spektrum nicht etwa f1 entspricht. Es wird Rücktransformiert und das Signal wird neu ausgewertet. Wenn das immer noch nicht funktioniert, wird erst abgebrochen.

    Wie findet ihr die Idee? Rein mathematisch müsste das doch schon nahe an den professionellen Geräten liegen, oder? Ich meine irgendwie müssen die ja auch mit den wenigen Ausgangsdaten einen funktionierenden Stream erzeugen...

    Danke schonmal
    Gruß Technipion

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. RC Hummer H2 Maßstab 1:6
    Von JellbieO im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 13
    Letzter Beitrag: 01.04.2009, 19:32
  2. Solid Edge Maßstab einstellen?
    Von daniel.weber im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 3
    Letzter Beitrag: 27.12.2008, 21:53
  3. Motorenansteuerung für kleinen Robo.
    Von Roberto im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 12.11.2007, 07:34
  4. Hilfe bei ner kleinen Schaltung!
    Von qEp im Forum Elektronik
    Antworten: 10
    Letzter Beitrag: 02.06.2007, 11:47
  5. LCD mit zu kleinen Pinabständen
    Von Cornholio im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 18.01.2006, 12:47

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen