TCP/IP Kommunikation SPS/Rasp PI

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich bin neu in diesem Forum und auch relativ neu im Umgang mit dem Raspberry Pi.

    Im Rahmen meines Dualen Studiums im Bereich Elektrotechnik soll Ich nun für einen Wettbewerb eine Hausautomation mit einer Steuerung von Phoenix Contact realisieren. Da der Raspberry Pi eine sehr anpassungsfähige Plattform darstellt verwenden wir einen Pi für diverse Anwendungen die wir mit der SPS nicht implementieren können.

    Das Haus soll unter anderem eine Sprachausgabe für sehbehinderte Menschen bieten. Dabei sollen Werte die von der SPS eingelesen wurden ausgegeben werden.

    SPS seitig steht mir dazu ein Baustein zur Verfügung welcher Datenpakete per TCP/IP an beliebige andere Teilnehmer verschicken kann. In der Wahl des Formats des Datenpakets bin Ich relativ frei. Dieser Teil ist für mich relativ einfach zu realisieren.

    Jetzt geht es nun an den Teil von dem Ich leider relativ wenig verstehe. Ich möchte ein Programm auf dem Raspberry schreiben welches zunächst auf dem Ethernet Port auf die Datenpakete wartet, dieses empfängt und ablegt bzw. ggf das alte löscht. Dies könnte zum Beispiel ein Bitmuster sein welches in eine txt Datei geschrieben wird.

    Gerade bei dem oberen Teil bräuchte Ich eure Hilfe da Ich noch nie ein Programm auf dem Raspberry geschrieben habe , geschweige denn Ahnung von der Programmierung eines "Horchprogramms" für den Ethernet Port habe. Wenn mir da jemand mit Informationen oder Programmen für ähnliche Probleme weiterhelfen kann wäre ich sehr dankbar. :helpnew:

    Später soll über ein Enocean Modul dann der Impuls für die Sprachausgabe per Espeak erfolgen. Dabei wird aus dem aktuellen Bitmuster wieder die Uhrzeit, die Temperatur, die Luftfeuchtigkeit etc. gemacht werden.

    Erstmal vielen Dank im Vorraus :danke_ATDE:

  • Ich habe mal ein paar Anwendungen für die Buskoppler ( FL IL 24 BK-PAC ) von Phoenix Contact gemacht.
    Allerdings seinerzeit in VB.
    Am besten suchst du mal nach "Python und Socketserver"
    Zum Thema Socketserver gab es hier schon ein paar Threads

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

    • Offizieller Beitrag

    du kannst ruhig den Socketserver so nehmen wie er in der Python Doku als example angegeben ist. Dieser lauscht einfach nur und gibt alles wieder auf der jeweiligen IP/Port ankommt. Dann fängst du an dir das so zurecht zu bauen wie du willst. Ich finde den Umweg über Textdateien immer unschön und würde das vermeiden wo es geht.

  • Vielen Dank für die schnellen Antworten

    Ich werde jetzt zunächst mit dem Socket Server beginnen und mich dann weiter hangeln.


    Ich finde den Umweg über Textdateien immer unschön und würde das vermeiden wo es geht.

    Welche Lösung würdest du empfehlen ? Mir ist auf die schnelle keine andere Möglichkeit eingefallen ;)


  • Vielen Dank für die schnellen Antworten

    Ich werde jetzt zunächst mit dem Socket Server beginnen und mich dann weiter hangeln.


    Welche Lösung würdest du empfehlen ? Mir ist auf die schnelle keine andere Möglichkeit eingefallen ;)

    Anstatt das Telegram in eine Textdatei schreiben, dieses in einer Variable halten.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

    • Offizieller Beitrag

    Versuch so viel wie möglich innerhalb deines Hauptprogramm abzuarbeiten. Das auslagern in Dateiien scheint auf den ersten Blick verlockend birgt aber andere Risiken, File locks, Fehler beim auslesen bzw. schreiben usw.

    Edit: Unser militärischer Kommandeur war schneller :)

  • Einen Socket Server kann man in jeder X-Beliebigen Sprache umsetzen, es muss nicht unbedingt Python sein sondern es kann auch bash, Perl, C oder was auch immer sein ;)

    Denkbar wäre auch einfach netcat (man nc) zu benutzen.
    Ein einfaches Beispiel wäre wenn du auf der RaspberryPI Konsole folgendes ausführst:

    Code
    nc -k -l 4444 > filename.out


    Dann nimmst du dir PuTTY (oder irgendein anderes Terminal Programm) und verbindest dich über Telnet auf die RaspberryPI-IP sowie den Port 4444, und gibst dann einfach irgendwas ein. Anschließend beendest du den Prozess auf dem PI wieder indem du STRG+C drückst und guckst dann in die Datei filename.out rein:

    Code
    cat filename.out

    Dort sollte dann das was du in PuTTY eingegeben hast drin stehen ;)
    Das liese sich dann auch in ein Script basteln um auf eine entsprechende Eingabe zu reagieren, man könnte sich also die Umleitung in eine Datei sparen...

    Aber das Beispiel hier setzt Telnet voraus. Mit richtigen Programmiersprachen kannste denk ich tiefer eingreifen und das Protokoll selber schreiben ;)

  • Moin,


    Einen Socket Server kann man in jeder X-Beliebigen Sprache umsetzen, es muss nicht unbedingt Python sein sondern es kann auch bash, Perl, C oder was auch immer sein ;)
    ...

    ich würde an dieser Stelle das Pferd von hinten aufzäumen ...
    Was steht Dir als "Endverarbeitung" zur Verfügung, was "erwartet" diese Endverarbeitung als Eingabe, gibt es bei der Abarbeitung dieser Eingabe Besonderheiten, die ein Standard-Programm nicht bietet?

    Und dann halt den einfachsten und bequemsten Weg suchen, diese Vorgaben zu erfüllen.

    Wobei sich natürlich anbietet, wenn der "Player" eine phyton-Bibliothek benutzt, ihn in Python, falls er eine C-Library einbindet, ihn in C ... zu realisieren.

    cu,
    -ds-

  • ich würde an dieser Stelle das Pferd von hinten aufzäumen ...
    Was steht Dir als "Endverarbeitung" zur Verfügung, was "erwartet" diese Endverarbeitung als Eingabe, gibt es bei der Abarbeitung dieser Eingabe Besonderheiten, die ein Standard-Programm nicht bietet?

    Und dann halt den einfachsten und bequemsten Weg suchen, diese Vorgaben zu erfüllen.

    cu,
    -ds-

    Ich wollte als Endverarbeitung eigentlich Espeak nutzen. Dazwischen erfolgt nur die Umwandlung vom Bitmuster zum tatsächlichen Text. Ich denke das sollte aber eigentlich nicht mehr die Schwierigkeit darstellen.


  • espeak hat python bindings :)

    Code
    sudo apt-get install python-espeak

    Das ist schon mal mehr als erfreulich ;) Jetzt eine Frage für die Phyton Noobs. Wie kann Ich dann Espeak innerhalb von Phyton verwenden ?

  • Hi, alter Schlangen-Beschwörer ...

    es gibt da scheinbar schon was Neueres: -> hier <- auf der Homepage wird auf die Entwickler-Version verwiesen. Und die ist -> hier <- zu finden und trägt den Namen "espeak-1.48.07.zip 16.June.2014".

    Ich war damals ziemlich beeindruckt von der Ausgabequalität auf dem RPi ... dagegen waren seinerzeit die Anfänge mit speziellen Soundkarten auf dem PC unverständliches Gequäke ...

    cu,
    -ds-

    • Offizieller Beitrag

    Ich hatte mich "damals" (wie das klingt), intensiv mit der Windows Speech API und python auseinander gesetzt. Die richtige Stimme vorausgesetzt (welche gar nicht so leicht zu finden ist) war das Ergebnis echt beeindruckend. Espeak hatte ich kurzzeitig mal unter Ubuntu 10.04 am laufen um Wichitge Systemmeldungen vorgelesen zu kriegen ;)

  • So es ist geschafft. Nach einigem Rumprobieren und auswerten habe ich eine stehende Verbindung über die Ich Daten versenden kann, welche vom Raspberry ausgewertet und als Audio dann ausgegeben werden.

    Vor allem der Verbindungsaufbau gestaltete sich als schwierig. Am Ende habe ich aber über einen TCP/IP Socket in Python eine Lösung gefunden

    Vielen Dank nochmal für die wertvollen Tipps ;)

Jetzt mitmachen!

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