Strukturierung nach Betriebsarten

itsdarkdownhere

Level-2
Beiträge
81
Reaktionspunkte
16
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend

Ich habe eine Frage, wie man am besten ein Programm mit mehreren Betriebsarten strukturiert und realisiert.

An dieser Beispielanlage soll es die Betriebsarten Stop, TeachIn (Handbetrieb), Automatik und Service geben. Die Darstellung und Eingabe erfolgt über ein HMI + Schlüsselschalter.
Die Beispielanlage besitzt 3 Linearachsen, welche nacheinander auf ihre Position fahren.

Mein erster Ansatz wäre folgender:
Eine Statemachine bspw. als Switch/Case im OB1/Main, welcher dann die Betriebsarten als FB aufruft. Allerdings möchte ich ja im Servicebetrieb bspw. auch die Funktionen des Handbetriebs nutzen. Oder die TeachIn Werte, in einer Rezeptur speichern, welche dann im Automatikbetrieb genutzt werden können.

Betriebsartenübergreifend sollen aber ebenfalls Funktionen wie Achsfreigabe, Fehler usw. existieren.

Mein zweiter Ansatz wäre an den FB die Betriebsart als Eingangsbedingung zu nutzen. Die Betriebsarten sind dann eine ENUM und bspw. manuell auf Positionen fahren wird nur aktiv, wenn Betriebsart.Handbetrieb true ist. Im HMI kann man ja die Funktionalität einfach ausblenden.

Wie realisiert man so etwas normalerweise?
Bisher hatten meine Programme immer nur eine Hauptfunktion mit unabhängigen Nebenfunktionen.


Vielleicht könnt ihr mir ja einen kleinen Denkanstoß geben.

Danke
 
Grundsätzliche nutze ich TIA, aber in diesem Beispiel ist das ganze hersteller- und hardwareunabhängig da es nur um das Konzept der Programmarchitektur geht.

S7 Graph wäre natürlich eine Option, aber ich frage mich wie man das nach IEC oder zumindest in FUP/KOP/SCL mittels Bausteinen realisieren würde?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie realisiert man so etwas normalerweise?
Hängt vom Umfang / Größe der Maschine ab bzw. ob das Programmierkonzept standardisiert ist. Und vor allem macht es am Ende wahrscheinlich jeder etwas anders ;)

Wenn es keine Standardisierung gibt bzw. in deinem Fall die Maschine aus antriebstechnisch aus drei Servoachsen besteht und es sich somit in meiner Vorstellung einer eher kleinen/einfachen Maschine handelt, dann würde ich die aktive Betriebsart zentral in einer Enumeration (besser) bzw. einer Struktur mit einem Bool pro Betriebsart (Siemens) speichern. In deinem Programmcode würde ich dann die einzelnen Funktionen mit der jeweils aktiven Betriebsart verriegeln.

Bei komplexeren Maschinen haben wir eine PackML Schrittkette als Hauptablaufsteuerung für die gesamte Maschine am laufen. Die PackML Spezifikation sieht hier bereits Unterschiede zwischen unterschiedlichen Betriebsarten (Auto, Hand, Service) vor.
Zusätzlich hat jede Prozessstation eigene Schrittketten / Modusschrittketten. Im mindesten eine Schrittkette für den Automatikbetrieb. Falls spezielle Abläufe in den anderen Betriebsarten nötig sind, haben entsprechende Betriebsarten auch eine eigene Modusschrittketten. Außerdem gibt es dann noch eine weitere Schrittkette zur Umschaltung zwischen den Betriebsarten. Zusätzlich sind in den Stationen dann die einzelnen Funktionen zur Aktoransteuerung etc. noch mit der gewählten Betriebsart verriegelt, insbesondere um Bedienhandlungen vom HMI abzufangen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
PackML ist eigentlich eine standardisierte Schnittstellenstruktur zur Steuerung von (verketteten) Verpackungsmaschinen. Der Aufbau ist aber so allgemein gehalten, dass man die Struktur in meinen Augen auf viele Maschinentypen in der Fertigungsautomatisierung übertragen kann. Wir bauen auch keine Verpackungsmaschinen.
Man muss sich nur überlegen, in wie weit man dem PackML Standard entsprechen will. Für die Verkettung usw. kommen irgendwann sog. PackTags ins Spiel. Zumindest für uns ist das mit Kanonen auf Spatzen geschossen - wir haben aber auch nicht den Anspruch, den PackML Standard (vollständig) zu erfüllen.
 
Auch wir nutzen eine Siemens-Pseudo-Enumeration* für die Speicherung der aktuellen Betriebsart. Dabei unterscheiden wir angefordert und angenommen, weil unsere Anlagen z.B. selbsttätig in Notbetriebsarten wechseln können.

Entscheidend bei diesem Ansatz ist, dass es immer nur einen Betriebszustand (bei uns ein USInt) geben kann.

* Die etwa 6 - 10 möglichen Betriebsarten (je nach Anlage) speichern wir bei Siemens als Anwenderkonstanten und programmieren das rein symbolisch durch.
 
Okay also scheint ein gängiger Weg Hauptschrittketten mit Sub-Schrittketten je nach Bedingung zu sein.

Das heißt ich könnte meinen Entwurf als Haupt-Grafcet mit untergeordneten Grafcets erstellen und darauf aufbauend mein Programm schreiben
 
Oder sogar mit Verzweigungen.Da hat Graph schon seine Vorteile.
Allerdings hat es auch ein nachteil.Wenn man Einzelzuweisung bei den Schrittmerkern macht kriegt man natürlich
riesige Oder-Verknüpfungen bei den Ausgängen.Man kann auch setzen und rücksetzen, aber das ist sehr fehleranfällig.
Darum gilt wenn ich was auslagern kann, dann weg von der Schrittkette.
 
Zurück
Oben