TIA Woher weiß ich, ob ich eine Variable in Static, Temp, constant usw. speichern muss?

Dazai

Level-1
Beiträge
30
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

es fällt mir leider schwer zu verstehen, wie ich eine Variable deklarieren muss. Kann mir das jemand vielleicht so einfach wie möglich erklären? Vielen Dank
 
in = nur an den Baustein übergeben
out = nur vom Baustein bekommen
inout = an den Baustein übergeben, ggf. bearbeiten und vom Baustein zurück bekommen

static = variabler Wert über den aktuellen Zyklus hinaus merken (im Zyklus erst lesen, dann schreiben..)
temp = variabler Wert nur für den aktuellen Zyklus (im Zyklus erst schreiben, dann lesen ...)

const = fester Wert ab Programmierung (vor allem mehrfach benötigte feste Werte nicht direkt sondern als Konstante angeben, damit ggf. nur an einer Stelle geändert werden muss)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@hucki Mal eine etwas blöde Frage, weil ich ganz neu bin in der Materie, aber was versteht man unter einem Zyklus? Ich habe das auch oft gelesen... Kannst du mir das vielleicht anhand eines kleinen Beispiels (mit einem SR oder UND Block oder so?) erklären?
 
was versteht man unter einem Zyklus?
Die Zustände der Eingänge werden von der SPS gelesen, dann wird Dein Programm mit diesen Zuständen genau 1x von vorn bis hinten durchlaufen (abgearbeitet) und mit den Ergebnissen werden dann die Ausgänge beschrieben.
Dies stellt einen Zyklus dar.

Und wie der Name schon sagt, beginnt dann die ganze Chose wieder von vorn:
1. Zyklus: Lesen, Abarbeiten, Schreiben
2. Zyklus: Lesen, Abarbeiten, Schreiben
3. Zyklus: Lesen, Abarbeiten, Schreiben
...
bis zum SPS-Stop oder Sanktnimmerleinstag.
 
Im einfachsten Fall hat man in einer SPS einen (in Worten 1) "Task" oder "Thread", das das komplette Programm beinhaltet.
Dieses Programm wird vom BetriebsSystem gestartet und muss innerhalb von x Millisekunden komplett bis zum Ende durchlaufen/abgearbeitet sein. Dann kopiert das BetriebsSystem das "ProzessAbbildAusgänge" auf die ("physikalisch vorhandenen") digitalen und analogen Ausgänge und das BetriebsSystem kopiert den Zustand der ("physikalisch vorhandenen") digitalen und analogen Eingänge in das "ProzessAbbildEingänge" und wartet dann, bis die vorgegebenen n Millisekunden seit dem letzten Start verstrichen sind und startet den nächsten Durchlauf u.s.w., wie gerade beschrieben.
Die ZyklusZeit ist der Abstand zwischen zwei aufeinander folgenden Starts des Programms. Übliche ZyklusZeiten liegen im Bereich von 1 ms .. 100 ms. Die SPS sind im Laufe der Jahre schneller geworden und schaffen heutzutage (je nach Umfang des Programms) "PiQuadratMalDaumen" i.A. locker in 10 ms das komplette Programm abzuarbeiten und noch etwas "Luft" für die Aufgaben des BetriebsSystems freizuhalten.

Die ZyklusZeit wählst Du aus und Du musst beim Programmieren darauf achten, dass das Programm tatsächlich innerhalb dieser Zeit komplett durchlaufen werden kann. Keine ProgrammSchleifen programmieren, die endlos laufen oder einfach zu viele Durchläufe in einem Zyklus absolvieren sollen.
Insbesondere nicht in Schleifen darauf warten, dass ein Eingang endlich meldet, dass eine Aktion fertig geworden ist und Du daraufhin den nächsten Schritt von irgendetwas starten kannst!
Natürlich muss die SPS auf bestimmte (aber i.A. viele verschiedene) Aktionen oder Reaktionen "warten", aber dies muss so programmiert sein, dass es im ProgrammAblauf gnadenlos weitergeht. Andere Stellen im Programm "warten" schliesslich auch und wollen abgearbeitet werden, um möglichst schnell reagieren zu können.
Im nächsten Zyklus schaut das Programm dann wieder, ob ein Zustand, auf den es warten soll, nun endlich gegeben ist oder weiter gewartet werden muss.
Läuft die ZyklusZeit ab, während das Programm noch am "schuften" ist, tritt eine ZyklusZeitÜberschreitung auf und führt zu einem Stopp des Programms.
Das klingt sehr schlimm und lästig und ist es auch. Die SPS soll ja diverse Aufgaben zuverlässig abarbeiten und immer zügig auf irgendwelche ZustandsÄnderungen reagieren. Darum ist es nicht zulässig/zweckmässig, wenn das Programm an einer (oder mehreren) Stelle ( n ) "hakt".
Man muss sich also Gedanken machen, so zu programmieren, dass es nicht zu ZyklusZeitÜberschreitungen und entsprechenden "Ausfällen" der SPS kommen kann.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@hucki Sagen wir mal ich habe eine UND Verknüpfung, beide Eingänge sind True und somit auch der Ausgang. Wie würde sich der Ausgang unterscheiden wenn ich ihn einmal als Temp und einmal als static definieren würde?
 
Für das UND in Deiner Frage spielt es keine Rolle, ob der Ausgang static oder temp ist.
Der Unterschied liegt in der Verwendung der Variablen (z.B. des Ausgangs) im vorherigen/weiteren Programm.


Ein typisches Beispiel aus der Praxis wäre z.B. eine Selbsthaltung über ein ODER (der Baustein selbst ist dabei eher unwichtig):

#Var1 ODER #Var2 = #Var2

Von #Var2 möchte man zunächst den Zustand am Ende des letzten Zyklus lesen, dann erst #Var2 neu beschreiben.
Mit static ist das möglich.
Mit temp wird der alte Zustand dagegen am Ende des Bausteinaufrufes gelöscht (vereinfacht ausgedrückt).

Mit temp wäre also die Selbsthaltung nicht möglich, weil temp nur ein Gedächtnis für den Rest des Bausteinaufrufes hat.
Daher im Zweifelsfall eher static (was widerum mehr Speicherbedarf bedeutet) wählen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@Dazai Evtl. hilft dir diese Seite. Dort ist die Funktionsweise einer PLC/SPS ganz gut erklärt.
https://www.sps-lehrgang.de/funktionsweise-arbeitsweise-sps/
Hmmm, da steht z.B. ...
2. Schritt 2: Zeile für Zeile wird der Befehlsstapel abgearbeitet. Das VKE kann dabei entweder 0 oder 1 sein und sich auch Zeile für Zeile ändern. Entscheidend ist, ob am Ende des Programms das VKE auf 0 oder 1 steht.
3. Schritt 3: Je nach VKE der einzelnen Netzwerke werden die Ergebnisse in den Prozessabbild der Ausgänge PAA geschrieben und aktualisiert.
Häääh??? Was soll das?
Respekt, nein Ehrfurcht vor einem vermeintlich hochkomplizierten Fachgebiet einflössen?
Übermütige, zuversichtliche SPS-Frischlinge verwirren und abschrecken?
Wer schreibt denn so etwas? Wer hat es ins Deutsche übersetzt?
 
Zurück
Oben