TIA Programmstruktur

PLCanna

Level-2
Beiträge
52
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe eine Frage ueber Programmstrukturen .
Ich habe eine Aufgabe, ein Programm in TIA Portal 15.1V mit dem CPU 1516 zu schreiben.

Ich habe aber Probleme mit dem Struktur des Programms.

Ich erklaere das Prinzip des Programmsablauf mit einfachen Woertern.
Nach dem Start mit einem Taster sollte unter dem Titel Fehler_Suchen verschiedenen Unterprogramme laufen , z.B Fehler bei SW, Fehler bei HW, Fehler bei der Spannungseinspeissung, usw. diese Unterprogramme geben dann jeweils eine Variable zum Hauptprogramm (Fehler_Suchen) aus. Dann sollte zum naechsten Hauptprogramm gehen z.B Bestimmte Funktionen (Unterbrogramme) zu machen usw.

Meine Frage ist darf man zur Uebersichtlichkeit jede diese Hauptprogramme als OB aufzubauen (z.B OB1 Start, OB123 Fehler_Suchen, OB124..usw) und in diesen OBs dann die Unterprogramme aufzurufen und jede OB mit seinen Unterprogrammen in eine Mappe anzulegen?

Danke im Voraus. :roll::roll::roll:
 
Hallo Anna,

die OBs haben alle besondere Funktionen.
OB1 ist das zyklische Programm, das immer wieder von oben nach unten durchlaufen wird.
Die anderen OBs werden z.B. bei Fehlern aufgerufen, in bestimmten Zeitabständen oder zu bestimmten Zeitpunkten. Übersicht bietet hier die Hilfe.

Was Du suchst, sind FBs und FCs.
FBs behalten Daten von einem Zyklus zum anderen. Sie haben ein Gedächnis, die statischen Variablen. Deshalb hat jeder FB einen DB zugeordnet. Das ist sein Gedächnis. Wenn Du ein und den selben FB mehrmals aufrufst, gibst Du ihm jeweils einen eigenen DB mit, somit hat jeder Aufruf sein eigenes Gedächnis. Das sind die Instanzen.
Ein FB kann mehrere Ausgänge haben.
FCs haben kein Gedächnis. Sie haben nur temporäre Variablen, die nur während der Bearbeitung des FC gelten. Sie haben nur einen Ausgang.

Mit FCs machst Du z.B. größere Verknüpfungen. Dinge, wo Du Dir nichts merken mußt.
Mit FBs machst Du komplexere Dinge, wie z.B. eine Motorsteuerung, wo Du Dir über die Zyklen hinweg Befehle oder z.B. Betriebsstunden merken mußt.

Von Deiner Aufgabe her würde ich vermuten, Du kannst Deine Programmteile alle in FCs programmieren, die Du dann nacheinander aufrufst, so wie Du es benötigst.
Aber das Hauptprogramm mit dem Taster und den ganzen Aufrufen isrt der OB1.

Gruß
Jens
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meine Frage ist darf man zur Uebersichtlichkeit jede diese Hauptprogramme als OB aufzubauen (z.B OB1 Start, OB123 Fehler_Suchen, OB124..usw) und in diesen OBs dann die Unterprogramme aufzurufen und jede OB mit seinen Unterprogrammen in eine Mappe anzulegen?

Danke im Voraus. :roll::roll::roll:

Sicher könnte man das, ist aber nicht sinnvoll.
Ich gebe hier mal ein Beispiel vor, hoffe verständlich, wie man es machen könnte. Daran halten musst Du Dich nicht, meine Programme sind auch anders aufgebaut.

Beispielaufbau:
Inhalt OB1
FC1 (Analogwerte lesen)
FC2 (Betriebsartenverwaltung)
FC3 (Automatikabläufe, hierin enthalten z.B. Aufrufe von FC100-200 für jeden Anlagenteil)
FC4 (Störungsauswertung)
FC5 (Ausgänge)

Alle Bausteine greifen auf einen globalen DB zu, z.B. DB_Global_Merker
Darin enthalten ist:
- Start/Stop aktiviert
- Hand-/Einricht-/Automatikbetrieb
- Störung Gesamtanlage
- Störung Unteranlage(n)
- Warnung Gesamtanlage
- Warnung Unteranlage(n)
- alles worauf mehr als ein FC drauf zugreift also an verschiedenen Stellen im Programm genutzt werden sollte

Sollte die Störungsauswertung das Bit #DB_Global_Merker.Störung_Gesamtanlage auf TRUE setzen, so ist im nächsten Zyklus das ganze auch der Automatik bekannt. Man könnte natürlich auch die Störauswertung nach vorne verlagern, wenn man mag.

In den Ausgängen könnte man so vorgehen:
WENN
(Automatikbetrieb UND Bit_aus_Automatik_einschalten
ODER
Handbetrieb UND Bit_aus_Hand_einschalten
ODER
Einrichtbetrieb UND Bit_aus_Einricht_einschalten
)
UND NICHT
#DB_Global_Merker.Störung_Gesamtanlage
DANN
Ausgang setzen

Du sortierst also im OB1 die FCs die die Unterprogramme aufrufen. Ob Du Dich dabei an mein Beispiel hälst oder nicht ist Deine Sache, Du solltest nur durch alle Deine Projekte hinweg immer das gleiche Prinzip nutzen damit Du selbst in 10 Jahren noch damit klarkommst., aber auch damit andere schnell und einfach sehen können was Du da geschrieben hast.

Es ist nicht schlimm für eine Funktion gleich 2 oder 3 Bausteine zu schreiben, z.B. für Aufwärts/Abwärts, Vor/zurück, solange diese Bausteine aus einem anderen heraus übersichtlich aufgerufen werden.

Nutzt Du bestimmte Funktionen häufiger dann schreibst Du nicht dauernd den gleichen Code sondern nutzt einen FC oder FB mit Ein-/Aus-/Durchgangsparametern.

Im Prinzip also steht es Dir frei wie Du Deine Programme aufbaust solange Kommentare, Beschriftungen und Struktur erkennbar sind. Du kannst dabei gerne eine Baumstruktur nutzen anstatt alle Bausteine in einzelne OBs zu verfrachten, es sei denn Du möchtest durch die OBs z.B. zwei Anlagen trennen. Dann aber sollte man einen DB nutzen der zwischen beiden ist um die Informationen von Anl1 nach Anl2 nur hierüber zu führen und nicht mit Anl1 auf Bausteine von Anl2 zugreifen.
 
Hallo Jens,

Erstmal Danke für die schnelle Antwort.

Ich dachte nur die OBs von 1 bis 122 haben ja besondere Funktionen. weil wenn ich auf OB zyklisches Programm kommt dann ein OB123. Deswegen habe ich gedacht, man kann mehrere zyklische OBs haben und sie nacheinander laufen lassen.

Kann man nach deinem obigen Struktur FCs in FCs aufrufen? Weil wie geschrieben, möchte nicht alles in einem Baustein tun. Z.B bei (Fehler_Suchen) möchte ich die Fehler unter SW, HW, usw. unterteilen wo sie in einem Baustein(Fehler_Suchen) aufgerufen werden.
 
Hallo Anna,

ja, Du kannst - nicht beliebig, aber ausreichend tief - schachteln. Das heißt Du kannst in mehreren Ebenen FCs in FCs (oder FBs) aufrufen.

Ja, es gibt auch weitere OBs, wie ich schrieb, die zyklisch aufgerufen werden, allerdings nutzt man die eher, wenn man Zeitscheiben benötigt, z.B. bei Regelungen oder wenn man mehrere Prozesse nebeneinander laufen lassen muß. Denn diese OBs unterbrechen den OB1 immer. Gegenseitig unterbrechen sie sich auch, da gibt es Hirarchien. Da Du aber nur einen Prozeß hast, ist es besser, den "klassischen" Weg zu gehen: OB1 ist das Programm. Von hier aus entwickelst Du es.

Z.B.
FC1 : Fehler bei SW
FC2 : Fehler bei HW
FC3 : Fehler bei der Spannungseinspeissung
....

Diese können dann über ihren Rückgabewert den Fehler (oder OK) zurückgeben.
Wenn eine Fehlerauswertung allerdings mehrere Zyklen benötigt (z.B. weil Du von irgendwo Daten abfragen muß, was Zeit braucht, z.B. über einen Bus), dann mußt Du auf einen FB ausweichen (Gedächnis!) und dann kannst Du über den Rückgabewert den Aufruf der anderen Bausteine steuern.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und Danke für die informative Antwort.
Im Prinzip also steht es Dir frei wie Du Deine Programme aufbaust solange Kommentare, Beschriftungen und Struktur erkennbar sind. Du kannst dabei gerne eine Baumstruktur nutzen anstatt alle Bausteine in einzelne OBs zu verfrachten, es sei denn Du möchtest durch die OBs z.B. zwei Anlagen trennen.


Wie kann ich eine Baumstruktur erstellen?
 
Die Baumstruktur entsteht automatisch, wenn in einem Baustein ein/mehrere andere aufgerufen werden, und in diesen dann wiederum Bausteine aufgerufen werden.
Die OB's sind nicht für eine logische Strukturierung des Programms gedacht, sondern legen die Ablaufintervalle des darin aufgerufenen Programm(teil)s fest.
 
So wie Ingmar schon schrieb passiert das automatisch.

Wenn Du einen Rechtsklick auf einen Baustein machst dann findet man im unteren Drittel "Aufrufstruktur". Darin sieht man welcher Baustein welchen anderen aufruft und welche Bausteine hierin auch bearbeitet werden.


Nur als Beispiel was ich meine:
Aufrufstruktur_TIA_15_1.png
 
Zurück
Oben