# Wie baue ich am besten mein Programm auf?



## Tigerkroete (2 Juni 2006)

Ich schreibe gerade meine Diplomarbeit im Bereich Automatisierungstechnik bei einer Firma, die Schrauben und Bolzen herstellt. Ziel der Diplomarbeit ist deren Packmaschine auf S7 umzurüsten. Derzeit hängt die Anlage an drei Steuerungen: Wiegeeinheit, Bänder und Palettierer. 
Ich ging zunächst davon aus, dass es bei drei Steuerungen bleiben solle, da der Betreuer das anfangs auch so wollte. 
Leider bin ich totaler Laie, wenn es darum geht ein Programm strukturiert aufzubauen. Im Studium sollten wir bei Laboren unseren Code einfach in den OB1 schreiben und das wars. Ich bin auch nur vertraut im Umgang mit digitalen Eingängen, digitalen Ausgängen, Timern, Zählern, Merkern, Merkerwörtern. Klar kam mal in einer Vorlesung vor, dass es FBs und DBs gibt, aber wie man so etwas nutzt nicht. Auch habe ich hier im Forum gestern zum ersten Mal gelesen, dass es UDTs gibt. Was genau das ist weiß ich bis heute nicht, obwohl ich schon viel durch Google dazu gelesen habe.
Ich gehöre leider zu den Menschen die Beispiele brauchen. Nach der Art: Es gibt eine Sache, die macht das und das, man erstellt sie so und so und das kann sinnvoll sein für dieses oder jenes.

Ich habe also schonmal begonnen mein Programm für die Wiegeeinheit zu schreiben. Im OB1 wähle ich zwischen FC1 und FC2 aus, je nachdem ob Automatikbetrieb oder Handbetrieb gewählt ist. Dann werden im FC selbst noch wenige andere FCs aufgerufen, um etwas mehr Übersicht hinein zu bringen. Keine Angst, die anderen FCs sind nicht willkürlich herausgeschnittener Code, um nur den FC1 nicht zu lang zu machen, sondern sind vom Schnitt her sinnvoll, was den Programmablauf angeht.
Bisher benutze ich keinerlei Datenbausteine oder Ein- und Ausgangsvariablen für meine FCs. Ich benutze ganz normale Merker und Merkerwörter.
Je länger ich mich aber nun mit Step-7 beschäftige, umso mehr drängt sich mir der Verdacht auf, dass ich das ganze aber doch nicht so sinnvoll mache.
Das wird verstärkt durch die Tatsache, das die CPU der Wiegeeinheit (S7-300 CPU 315-2DP), wahrscheinlich doch später auch die Ansteuerung für die Bänder und den Palettierer übernehmen wird.
Ich überlege gerade, ob ich die Wiegeeinheit erstmal in eine Funktion packe. Dann definiere ich einen Datenbaustein, der in meiner Funktion aufgeschlagen wird. Das selbe dann später für die anderen Einheiten.
Soll ich dann auf normale Merker und MWs komplett verzichten und beides stattdessen in meinem Datenbaustein anlegen?

Jemand der Ahnung hat, merkt bestimmt sofort, dass ich echt durcheinander und ahnungslos bin. Ich würde mich sehr über jede Art von Tipp freuen ;-)

Viele Grüße,
Tigerkroete


----------



## Lazarus™ (2 Juni 2006)

Hi,

ich mache es bei den meisten Anlagen so , das ich einzelne Funktionsgruppen erstelle. Z.B. deine Wiegeeinheit. Die würde ich als einen FB mit zugehörigem Instanz-DB machen, wo dann alee variablen etc. reinkommen.


----------



## Ralle (2 Juni 2006)

Da kann man stundenlang drüber schreiben, jeder macht es anders. Mal ganz kurz.

1. Wiederkehrende Einheiten zusammenfassen ist sinnvoll (Werkstückträger-Stopper+Hubeinheiten mit Schreib-Lese-Gerät, Wiegeeinheit).
2. Aufteilen einer Anlage in Stationen bzw. Anlagenteile.
3. Jede Station hat ihren FC und einen zugehörigen Stations-DB. Der DB ist bei allen Stationen gleich aufgebaut, inkl. Handsteuerungsbereich etc. (Instanz-DB mag ich da nicht so, es verändern sich laufend die Bezüge und von "Außen" auf einen IDB zugreifen halte ich für unsauber (man sucht sich später kaputt).
4. Es gibt Funktionsbausteine für Mono-Ventile, Bi-Ventile, Motore, ...
An jedem dieser Bausteine gibts Hand-Ein/Aus, Auto-Ein/Aus, Fehler (Laufzeit, Ini, Motorschutz etc.) Freigabe/Verriegelung usw. Die IN/Out für diesen Baustein kommen aus den Stations-DB, von zentralen Merkern (Hardware_ok, Ack_Fehler), oder physikalische Eingänge/Ausgänge der Anlage (Ventile, Schütze INI's).
5. Ich nutze einen zentralen Hand-FC, der aus einem TP die Daten bekommt und diese dann auf die angewählte Station verteilt. 

Merker nutze ich nur zentral (Hand, Auto etc.) und als Koppelmerker zwischen den Stationen (Freigaben, Start, Verriegelung etc.). Jede Station bekommt einen festen Merkerbereich zugeordnet, das ist bei jeder Anlage möglichst gleich, so findet man sich schneller zurecht.


----------



## Tigerkroete (6 Juni 2006)

Hallo Ralle, ich würde es gerne ungefähr so machen, wie Du vorgeschlagen hast. Hoffe ich habs richtig verstanden:
Alle meine drei Anlagenteile bekommen einen FC und einen DB. In den DBs lege ich Funktionsspezifischen Merkerwörter oder ähnliches ab. Jedoch nehme ich als eigentliche Merker die ganz normalen (wie nennt man die eigentlich?) und lege großzügig die Merkerbereiche fest, z.B M0.0 bis M9.7 für die Wiegeeinheit, dann M10.0 bis M19.7 für die Bänder usw..

Viele Grüße,
Tigerkroete

PS: Bis hier her schonmal vielen Dank an beide von Euch.


----------

