Programme aufbauen in Python

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

    Da ich in meiner Ausbildung seit neustem auf der SPS programmiere, wollte ich fragen ob es da gewisse Ähnlichkeiten gibt.

    Bei der Siemens SPS ist es im TIA-Portal möglich, dass man einzelne Funktionsbausteine erstellt mit Teilen des Programms, z.B. Ein Baustein enthält alle Ausgänge, ein anderer die Logik etc.

    Diese werden dann im Hauptprogramm aufgerufen.

    Kann man ein Programm auch so in Python aufbauen, um die Fehlersuche oder die Erweiterung zu vereinfachen und das Programm generell übersichtlicher zu machen?

    Vielen Dank für eure Antworten. :love:

    Die Hand voller Asse, doch das Leben spielt Schach.


    Erfolg besteht aus drei Buchstaben: Tun

    Goethe

  • Ich habe keine Ahnung von Siemens SPS oder wie das dort ist. In Python gibt es fertige Module, die man (ggf. erst installiert und dann) im Skript importiert. Man kann natürlich auch eigene *Module* erstellen und diese auch noch in das Skript importieren.

    Kann man ein Programm auch so in Python aufbauen, um die Fehlersuche oder die Erweiterung zu vereinfachen und das Programm generell übersichtlicher zu machen?

    Natürlich! Das ist eindeutig ein :thumbup: für Python, denn das ist im Grunde genau das was da abläuft. Was die Fehlersuche angeht ist der Interpreter auch sehr gesprächig und die Ausgaben davon ziemlich treffsicher inkl. betroffene Zeilennummern.

  • FC (function) entsprechen den Funktionen in Python, nur dass man da mehr machen kann.

    FB (function block) sind der Ansatz zu OOP in der SPS-Welt. Bei Python macht man das mit Klassen.

    DB kann man mit den Datentypen von Python abbilden. Es kann eine Liste mit Daten sein oder eine Sammlung (dict, set).

    Mit Python kann man den Code in Modulen aufteilen. Ein Modul ist einfach eine Datei mit der Endung .py, die dann von anderen Modulen importiert werden kann. Etwas Vergleichbares fällt mir da gerade aus der SPS-Welt nicht ein.

    Der OB1 wird zyklisch aufgerufen und bei Python muss man das programmieren.

    Code
    while True:
        programm()

    Dann gibt es z.B. die Möglichkeit, Sockets mit der SPS aufzubauen. Das geschieht asynchron und bei Python hat man mehrere Möglichkeiten.

    Asynchroner Code mit asyncio, Threads, Prozessen oder/und mit Hilfe von selectors / select.

    Die Möglichkeiten, die Python bietet, übertreffen die SPS bei weitem. Was bei Python aber nicht garantiert ist, ist die Echtzeit.

    Echtzeit == Ein Prozess läuft in einer garantierten Zeit ab, z.B. 10 ms.

  • Wenn ich zum Beispiel ein automatisches Terrarium bauen möchte.

    Ich habe das Hauptprogramm und möchte verschiedene Unterprogramme erstellen.

    Als Beispiel nehme ich verschiedene Tierarten. Ein Programm ist für Schildkröten. Dort drin ist die Temperatur gespeichert die gehalten werden muss, die Menge an Wasser und mit Hilfe einer Kamera wird das Verhalten analysiert.

    Das für verschiedene Tierarten. Es ist nur ein Beispiel

    Wie kann ich diese Unterprogramme nun in das Hauptprogramm einfügen? Diese Unterprogramme sollen als eigene Dokumente mit der Endung .py erstellt werden, so dass ich wenn ein Wert verändert will, nur in das entsprechende Programm gehen muss um diesen zu verändern.

    Die Hand voller Asse, doch das Leben spielt Schach.


    Erfolg besteht aus drei Buchstaben: Tun

    Goethe

  • Wenn das Programm immer die gelichen Dinge tut, nur für verschiedene Tierarten mit unterschiedlichen Parametern - also Temperatur, Feuchte usw., dann brauchst du eigentlich nicht mehrere (Unter-)Programme, sondern verschiedene Datensätze, die dem Programm sagen, welche Werte es bei Schildkröten, Echsen, Schmetterlingen oder was auch immer nehmen soll.

    Wenn jede Terrarium einen eigenen Pi hat und du die Steuerung je nach Tierart machen willst, kannst du alle Tiere und ihre Parameter in einem Programm hinterlegen und dem Programm beim Start mitteilen, welches Tier da drin ist, damit es die richtigen Parameter nutzt.

    Du kannst auch einen Pi für mehrere Terrarien nehmen, dann muss hinterlegt sein, in welchem Terrarium welches Tier ist, welche Werte für verschiedene Tiere gelten und vor allem auch, welche Temperatursensoren, Wasserventile usw. an welchem Terrarium hängen. Dann kann der Pi auch mehrere gleichzeitig steuern.

    Eigene Unterprogramme lohnen sich nur, wenn die Terrarien baulich sehr unterschiedlich sind und es einfacher ist, ein Programmteil zu schreiben, als ein Universalprogramm mit sehr verschiedenen Parametern zu füttern.

    Wenn du "Unterprogramme" benutzen willst, kannst du diese getrennt schreiben und importieren - wie du es auch mit anderen Libraries machst. Steinardo hat dir dazu ja schon einen Link genannt. Das kannst du auch benutzen, um den Code übersichtlich zu halten. Du kannst ein Modul programmieren, das nur die Temperatursachen macht, eins für die Feuchte, eins für Licht, ...

    Andererseits klingt mir jetzt eine Terrariensteuerung nicht so komplex, dass das nötig wäre - aber vielleicht hab ich auch einfach nur keine Vorstellung, wie filigran sowas ist.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Tundrameise hast du dir mal den Link angesehen?

    Module einbinden ist nicht so schwer. Das Modul im gleichen Verzeichnis erstellen. In meinem Beispiel own_module1.py und own_module2.py. Dann im Hauptprogramm import own_module1 zum importieren des own_module1.py und import own_module2 zum importieren des own_module2.py. Jetzt kannst du auf die Funktionen aus den Modulen zugreifen.

    Python: own_module1.py
    def function1():
        return "This is module 1, function 1"
    
    
    def function2():
        return "This is module 1, function 2"  
    Python: own_module2.py
    def function1():
        return "This is module 2, function 1"
    
    
    def function2():
        return "This is module 2, function 2"

    Und hier die Ausgabe des Programmes

    Code
    This is module 1, function 1
    This is module 1, function 2
    This is module 2, function 1
    This is module 2, function 2

    Aber ich bin mir nicht sicher ob es wirklich das ist wonach du suchst. Für mich hört sich das eher nach einem Versuch an eine Config Datei zu laden. Für sowas benutze ich toml (Tom's Obvious Minimal Language). Toml sagt über sich "A config file format for human". Hier mal ein Beispiel.

    Du installierst dir das Modul toml [tt]pip install toml/tt]. Du erstellst dir im gleichen Verzeichnis eine Datei die z.B. so Aussehen kann

    Dann im Hauptprogramm liest du einmalig die toml Datei ein und kannst dann auf die Werte zugreifen. Alle Werte sind an einer Stelle, gut sortiert.

    Und zuletzt noch die Ausgabe des Programmes

    Code
    The temperature for the turtle is = 25°C and need 200 l water
    The temperature for the snake is = 30°C and need 400 l water
    The temperature for the lizard is = 15°C and need 100 l water

    Gruß

    Steinardo

  • Hallo,

    es ist mir auf die Schnelle kein anderes Beispiel eingefallen

    es wäre sinnvoller, wenn du beschreibst was du wirklich machen willst.

    Solche Fragen enden üblicherweise mit der Antwort "Kommt drauf an."

    Etwas übersichtlich zu programmieren bedeutet nicht das man zwanghaft mehrere Programmdateien erstellen muss. Damit erreichst du unter Umständen genau das Gegenteil.

    Ich habe den gleichen Eindruck wie Steinardo (für Pfade ist 'pathlib' das akuelle Modul) und denke es wird auf eine Konfigurationsdatei heraus laufen.

    Aber noch einmal, wenn du eine Antwort willst, die dir wirklich weiter hilft, dann musst du deinen Programmablauf so detailiert wie möglich beschreiben.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Lieber Dennis89

    Ich habe kein klares Ziel vor mir und auch keine direkte Anwendung. Da ich gerne mit der SPS programmiere und auch gerne mit dem Raspberry rumspiele, hat es mich einfach interessiert ob das geht und wenn ja wie es geht.

    Aber natürlich hast Du recht, wenn es um ein bestimmtes Projekt geht, ist es natürlich besser wenn ich direkt die Idee oder den Code sende.

    Liebe Grüsse aus der Schweiz

    Die Hand voller Asse, doch das Leben spielt Schach.


    Erfolg besteht aus drei Buchstaben: Tun

    Goethe

Jetzt mitmachen!

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