WINSPS S7; FUP-Programmierung

JH1990

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo in die Runde!

Der Beitrag wird etwas länger...

Ausgangslage:
Wir sind 3 Kommilitonen, welche gemeinsam Ihre Abschlussarbeit zum Maschinentechniker erarbeiten, hier geht es um eine automatische Schmierung von Dockhebepumpen.
Wir haben als Maschinentechniker lediglich die Grundlagen von SPS im o.g. Programm/Programmierung kennen gelernt.
Nun wollten wir eine SPS erstellen und haben uns vielleicht etwas übernommen :D.


Ausgangslage:
Ein Schwimmdock wird mit 6 Dockhebepumpen getrimmt. Die Dockhebepumpen befinden sich in den Tanks und sind somit nur schlecht zu erreichen. Die Pumpen werden jeweils durch einen Motor angetrieben, welcher auf dem Hauptgang verbaut ist. Von hier aus führt eine Welle hinunter zur Pumpe (ca. 9,5m). Die Welle ist 2-fach gelagert und die Pumpe verfügt ebenfalls über 2 Lager. Es soll eine automatische Schmierung installiert werden um nicht in die Tanks zu müssen.

Idee:
1 Hauptautomat, welcher mit Fett bestückt wird und 3 Füllstandssensoren hat welche im Leitstand über 4 Lampen (Voll, 2/3, 1/3 und leer) abgelesen werden kann.
Der Automat bestückt 6 Verteiler (Pro Pumpe) welche ebenfalls über 2 Sensoren verfügen (Voll/Leer). Wenn einer der Sensoren Leer angibt soll der Automat diesen befüllen bis dieser wieder Voll ist.
Die 6 Verteiler agieren dann jeweils identisch:
Wenn die jeweilige Dockpumpe für 45 Minuten gelaufen ist, soll der Verteiler für 2 Minuten Schmierfett zu den Lagerstellen pressen.
Jedoch soll der Timer erst nach dem erreichen der 45 Minuten zurückgesetzt werden, auch wenn die Pumpe zwischenzeitig für eine weniger lange Periode betrieben wurde (Trimmen von 30 Minuten), sodass beim erneuten anschalten der Pumpe die Zeit "Weiterläuft".

Wir haben uns die Symboltabelle erstellt und aufgrund der Identischen Ansteuerung der 6 Pumpen einen DB erzeugt, in welchen wir die lokalen Variablen eingepflegt haben. Dann haben wir mit den Netzwerken begonnen, bis wir zur Zeit kamen.
Wir haben leider keine Ahnung, wie und wo wir die Zeit des Timers abfragen und speichern können, sodass wir diese im Anschluss weiterverwenden können.
In diesem Forum und im Netz sind wir auf den TON Timer gestoßen, welcher ja IN/OUT für die Zeit abbildet. Den Wert soll man mit einem "MOVE" abgreifen können.
Nur verstehen wir das Prinzip scheinbar nicht. Wo muss die Zeit (max 2700s) hin? Wie nutze ich diese im Anschluss wieder?

Es wäre kein Weltuntergang die SPS "einfacher" zu gestalten (Schmierung läuft wenn Pumpe läuft) oder diese gar gänzlich weg zu lassen. Doch es wäre ganz NiceToHave.
Ich habe mal unseren Stand beigefügt.


Vielleicht erbarmt sich ja hier jemand von euch und kann uns hier Grundlagen vermitteln :D

Liebe Grüße
 

Anhänge

  • WinSPS-S7 - 3 Seiten.pdf
    22,3 KB · Aufrufe: 24
Moin JH1990,

herzlich willkommen hier im Forum!

Ein paar Fragen/Anmerkungen:
- Was für eine SPS programmiert ihr?
- Wieso nutzt ihr WinSPS und in welcher Version?
- Gibt es da vielleicht einen Bausteinkatalog, aus dem man einen Timer in das Programm hineinziehen kann? Habt ihr das mal gemacht?
- Was sagt die Hilfe (F1 ?) zu Zeitgliedern?
- Was lernt man als Maschinentechniker in Sachen SPS-Programmierung? Boolsche Verknüpfungen? Schrittketten? Zeiten (anscheinend nicht?!?!)?

VG
MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey MFreiberger,

vielen Dank!

Die erste Frage verstehe ich nicht :D
Wir Programmieren in WIN SPS S7 V6.05. Hierbei geht es rein um eine theoretische Ausarbeitung, welche im Anschluss als Anlage der Ausarbeitung beigefügt wird (keine Hardware).

Hier anbei die Anmerkung des Dozenten zu quasi dem was ich oben ins Forum schrieb:
Den TON-Baustein findest du in der Bibliothek unter dem Namen SFB4. Der Baustein benötigt einen Instanz-DB für seine lokalen Variablen. Um die Zeit in einem DB zu speichern, musst du einen Global DB erstellen und dort die Variable vom Typ Time anlegen.
Wir haben nur Grundlagen-SPS gemacht. Das hier ist etwas mehr. Der Datentyp Time reicht für diese Anwendung. Den MOVE braucht ihr, wenn ihr in diesem Fall die Istzeit in die Sollzeit transferieren wollt. Ihr müsst genau überlegen, wann ihr welche Zeit in die Sollzeit transferiert.

Die kursiven Passagen erzeugen leider nicht mehr als eine Nulllinie in meinem Kopf!

Wir haben uns lediglich mit den Programm und den bestehenden Bausteinen beschäftigt. Eine Einschalt /Ausschaltverzögerung bekomme ich auch hin! Jedoch alles nur mit den vorhandenen Bausteinen des Programms. Das ganz große Fragezeichen hier ist also das Speichern des Zeitwertes.

Vielleicht ist das ganze auch etwas zu viel gewollt? Dachten uns bloß, dass kann doch nicht so schwer sein. ;)

Anbei noch ein Screenshot.
 

Anhänge

  • Screenshot 2024-02-16 085321.png
    Screenshot 2024-02-16 085321.png
    22,7 KB · Aufrufe: 19
Hallo,

ich denke, es ist am sinnvollsten, wenn Ihr Euch erst einmal die Grundlagen aneignet. Denn wenn Euch hier bei einem Problem geholfen wird, taucht sicher gleich das nächste auf. Ich würde Euch empfehlen, ein Buch oder andere Informationen zu Rate zu ziehen.
In dem folgenden Buch werden zum Beispiel die Dinge erklärt, die Ihr braucht:

Es gibt aber auch sicherlich andere Bücher, welche die entsprechenden Grundlagen vermitteln.
 
TON ist ja wie schon von eurem Prof beschrieben ein SFB, ein Systemfunktionsbaustein.. FBs benötigen immer einen Instanzdatenbaustein, der wird eigentlich automatisch erzeugt, wenn der FB aufgerufen wird.

D.h. wenn ihr in eurem OB1 den SFB4 aufruft, dann sollte entweder automatisch ein Instanzdatenbaustein angelegt werden oder es sollte ein Dialog sich öffnen.

Ich weiß jetzt nicht wie der TON in Winsps7 aussieht, aber wenn ihr mit ausgewähltem TON Baustein F1 drückt, sollte eigentlich dazu die Hilfe aufgehen hoffentlich

Hier noch mal das Handbuch zu Winsps7
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

hier stellt sich vielleicht die Frage was als "Grundlagen" definiert wird?
@WeissT meint, dass die Grundlagen noch nicht vorhanden sind. Euer Prof meint, dass ihr "nur" die Grundlagen kennt.

Deshalb ja auch meine Frage, was ihr bisher behandelt habt.

@DCDCDC redet von ..FB's. Aber wisst ihr, was es für eine Bewandnis mit FBs hat? Was ist der Unterschied zwischen FCs und FBs?

Davon abgesehen ist es eigentlich egal was ihr für Zeiten verwendet. Systemzeiten (S_EVERZ,...), IEC_Timer, TON/TOF, was selbstgebasteltes...
Wichtig ist, dass ihr Euer Taktintervall mal plant.
Vielleicht mit Blatt und Stift einen Signalverlauf (wisst ihr was das ist) aufzeichnen.

VG
MFreiberger
 
Vielen dank für die so zahlreichen und schnellen Antworten!

Also, wir haben immer in FC "programmiert" und diesen dann später in OB1 rein geschmissen.
Neuerlich kam dann der Prozess der wiederkehrenden Programmierung mit den lokalen Variablen. Hier hieß es dann, dass wir hierfür nicht wie zuvor in FC, sondern nun in FB programmieren müssen und uns in diesen nun die "lokalen Variablen" definieren. Anschließend haben wir dann den DB in OB1 aufgerufen und durch die verschiedenen Ein/Ausgänge der Symboltabelle dieses Prozess quasi mehrfach im OB1 wiederholt.

Ich denke genau darum geht es, dass uns nicht bewusst ist wieso wir nun einen "Global DB" benötigen. Und wie wir diesen Pflegen müssen, bzw. ansprechen und abrufen.

Mir qualmt jetzt schon wieder der Kopf und es scheint doch mit größerem Aufwand als erhofft verbunden zu sein.
Ich denke wir werden die SPS "einstampfen" auf ein Level, welches sich für uns erschließt bzw. diese ganz weglassen.

Ich danke für eure Hilfe! Aber der Aufwand scheint zu groß, in Anbetracht dessen, dass es hier wirklich nur um einen Anhang der Arbeit geht. Da werden wir uns wohl lieber auf die Konstruktion und dergleichen beschränken, mit welcher wir schon genug zu tun haben.

Nur falls es hier noch jemanden interessiert, habe ich mal eine Aufgabe angehangen, was so ziemlich unseren Wissensstand entspricht.
Hier hätte es jetzt noch heißen können, dass das Schweißgerät nach XX Sekunden wieder zurückfährt, das wäre auch noch im Bereich des möglichen gewesen.
 

Anhänge

  • Bausteinparameter Aufgabe1.pdf
    139,3 KB · Aufrufe: 10
"global" bezieht sich in dem Sinne ja nur auf die Zugriffsweite, global = kann im ganzen Projekt verwendet werden und nicht nur lokal in einer Funktion/einem Funktionsbaustein. In einem globalen Datenbaustein kannst du definieren was du möchtest und auch brauchst und kannst diese Variable(n) dann im ganzen Projekt lesend und/oder schreibend verwenden
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also im Prinzip nur digitale Verknüpfungen.

Zwei Themen habt ihr offensichtlich noch nicht behandelt. Das sind 1. die FBs und 2. Zeiten (höchstens mal als einfache Verzögerung).

Wenn ihr das Thema nicht weiter verfolgen wollt, weil es gerade Zuviel wird und ihr Euch auf die zentralen Themen konzentrieren wollt, ist das natürlich ok.

Trotzdem eine kleine Hilfestellung zu den FBs:

Zunächst einmal haben auch FCs lokale Variablen. Lokal; also nur an diesem Ort (innerhalb des Bausteins) zu verwenden. Aber die lokalen Variablen von FCs sind nur temporäre Variablen.
Sowohl in FCs als auch in FBs könnt ihr Variablen deklarieren. Beide Bausteine können auch mit einer "Übergabeschnittstelle" beim Aufruf versehen werden.

Ich habe mich auch immer schwer mit temporären Variablen, wie, wann und wo ich sie einsetze und was der Unterschied zu statischen Variablen ist getan.
Ich erkläre es gerne so:
Irgendwo müssen Variablen beschrieben werden. Also wie groß sie sein sollen, was für einen Datentyp sie haben sollen usw. Das kann in einem (globalen) DB, in einer Bausteinschnittstelle (FC oder FB) oder als UDT (user defined type) geschehen.
Damit man mit den Variablen arbeiten kann, müssen sie einem Speicherplatz zugewiesen werden. Das kann temporär oder dauerhaft (statisch) geschehen. Statisch geschieht das, indem ich sie in einem DB anlege oder in einem FB als VAR bzw. Static anlege. Temporär geschieht das beim Anlegen in einem FB oder einer FC als Temp. Den Temp-Variablen wird beim Aufruf des Bausteins ein Speicherbereich zugewiesen. Dann kann man sie im Baustein nutzen. Wenn der Baustein verlassen wird, wird der verwendete Speicherbereich wieder freigegeben.
Jetzt noch der Unterschied zwischen globalen und FB-internen Static-Variablen: globale Variablen sind dafür da, überall im Programm genutzt zu werden (z.B. wenn einem Baustein ein Parameter übergeben wird, werden sie von AUSSEN an den Baustein angeschaltet). Die FB-internen static-Variablen sollten tunlichst nur IN dem FB genutzt werden. Aber sie haben einen fest zugewiesenen Speicherbereich. Damit können sie sich Werte "merken". Denn auch, wenn der Baustein verlassen wird, wird der Speicherbereich nicht freigegeben. Das ist z.B. wichtig für Flanken, Zeiten, Zählerstände, etc.. Beim Aufruf eines FB wird automatisch ein DB angelegt. Der gehört zu diesem einen FB-Aufruf, also zu dieser einen Instanz und heißt deswegen auch Instanz-DB. Im Programm KÖNNTE man damit wie mit einem Global-DB arbeiten (Warum lässt SIEMENS das zu? Aber das ist ein anderes Thema), aber das sollte man lassen.

VG
MFreiberger
 
Hallo JH,
müsst Ihr diese Win-S7 Software verwenden? Müsst Ihr einen DB verwenden?
Ich würde das mit LOGO Soft lösen. Sehr einfach zu bedienen, Drag and Drop in FUP. Mit Linien verbinden, Timer parametrieren. Programm dann direkt testen. Hier mal ein kleiner Ausschnitt.


1708460587023.png

Grüße Detlef

PS: Habe vergessen die Remanenz bei Block001 einzuschalten.
 
Zuletzt bearbeitet:
Zurück
Oben