Step 7 WinCC Visualisierung von einem Reaktor

Beiträge
141
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
Ich stecke gerade fest bei meinem Lehrbrief 4 und hoffe das mir hier jemand helfen kann.
Die Visualisierung funktioniert fast einwandfrei nur soll bei der Füllstandsanzeige wenn sie das Niveau 100 erreicht eigentlich stoppen, aber der Wert zählt immer weiter rauf. Erst wenn ich voll auf True setze und dann Ventil auch auf True geht zählt es runter. Es stoppt aber auch nicht bei 0, sondern zählt da auch wieder weiter runter. Ich versuche schon den ganzen Tag es zu lösen komme aber nicht darauf.

MFG
Carmen
 

Anhänge

  • Screenshot (119).png
    Screenshot (119).png
    210,5 KB · Aufrufe: 91
  • Screenshot (120).png
    Screenshot (120).png
    175 KB · Aufrufe: 95
  • Screenshot (117).png
    Screenshot (117).png
    406,5 KB · Aufrufe: 98
  • Screenshot (118).png
    Screenshot (118).png
    221,4 KB · Aufrufe: 102
Du solltest das voll und leer auch mit in Deinen Zähler einbauen, zum Beispiel:
Code:
IF Pumpe AND NOT voll then
   Niveau:= Niveau+1;
END_IF;
IF Ventil AND NOT leer then
   Niveau:= Niveau -1;
END_IF;
Wie Du nun voll und leer zurücksetzt oder wie Pumpe und Ventil geschaltet werden geschieht in einem anderen Baustein? Wäre nett den gesehen zu haben.
 
Mit S7-CFC habe ich keine Erfahrung, trotzdem fällt mir auf:
- auf INPUT schreibt man nicht/weist man nichts zu
- OUTPUT liest man nicht zurück
- weil die Visu das Niveau anzeigen aber auch ändern können soll, sollte das eine INOUT-Variable sein, die mit der Variable für die Visu/HMI beim FB-Aufruf beschaltet wird. Die Visu soll nicht auf die Instanz-INOUT-Variable "Niveau" zugreifen (und auch kein SPS-Programmteil).

Ich würde sagen, die Status-Signale "voll" und "leer" sollten OUTPUT sein.

Dein Programm für das Ventil und die Pumpe, und der Simulations-FB, und die Visu/HMI laufen in verschiedenen Task (eventuell unterbricht sogar die HMI-Kommunikation das Programm?) ---> Multitasking-Grundsätze beachten: Eingangs-Variablen dürfen nur einmal gelesen und Ausgabe-Variablen darf nur einmal etwas zugewiesen werden.

Falls die Visu/HMI den FB_Modell unterbrechen kann (HMI-Kommunikation außerhalb des Zykluskontrollpunkts), dann wird es haarig, wenn in der Visu ein neuer Wert für das Niveau eingegeben wird. Da kann es vorkommen, daß die Änderung manchmal nicht im SPS-Programm ankommt. Das ist aber ein anderes Thema, was Du bei Deiner Hausaufgabe vermutlich (noch) nicht beachten musst/sollst.

Die Reihenfolge Deiner Anweisungen im FB ist sehr ungünstig. Du solltest zuerst das Niveau abhängig von "Pumpe" und "Ventil" +/- verändern. Danach das Niveau auf 0..100 begrenzen. Danach die Status-Ausgänge "voll" und "leer" entsprechend Niveau zuweisen.

Harald
 
Habe doch noch ein Anliegen bezüglich dieser Visualisierung sie funktioniert so einwandfrei nur steht in meiner Angabe das ich während der Wartezeit bei vollem Reaktor einen Screenshot machen soll nur läuft es sofort wieder runter auf 0. Außer wenn ich Start auf FALSE setzte stoppt es bei voll für ca. 5 sek und dann wird Ventil TRUE und läuft runter auf 0. Und das ich bei dem letzten Entleeren auch einen machen soll aber es stoppt ja nie es läuft immer so weiter außer wenn ich Start auf FALSE setzte läuft es noch einmal und dann stoppt es. Muss ich für "Maximale Anzahl an Chargen auch noch irgendetwas beachten.
MFG
 

Anhänge

  • Screenshot (142).png
    Screenshot (142).png
    196 KB · Aufrufe: 47
  • Screenshot (131).png
    Screenshot (131).png
    431,6 KB · Aufrufe: 50
  • Screenshot (132).png
    Screenshot (132).png
    432,5 KB · Aufrufe: 44
  • Screenshot (139).png
    Screenshot (139).png
    431,8 KB · Aufrufe: 34
  • Screenshot (140).png
    Screenshot (140).png
    431,3 KB · Aufrufe: 40
Wenn ich nun nichts übersehen habe dann sehe ich das Hoch- und Runterzählen sowie die Begrenzung auf >=100 bzw. <=0 und das voll sowie leer ausgegeben werden.
Das alles aber in Abhängigkeit eines externen Signales: Pumpe oder Ventil.
Von Start bzw. warum Ventil bzw. Pumpe eingeschaltet werden sehe ich gerade nichts.

Da aber wäre ja der Teil der das Einschalten von jeweils Pumpe bzw. Ventil steuert.
Es wäre hilfreich das Pumpe bzw. Ventil beim Erreichen von 100 bzw. 0 abzuschalten. Wo das nun geschieht, steht hier gerade nicht.? Also können wir hier auch nur erraten wo Du etwas ändern solltest, darauf habe ich aber gerade keine Lust.

Hast Du Lust uns alles zu zeigen was benötigt werden könnte ?
 
Hier im Anhang müsste alles wichtig vorhanden sein.
Ich versuche schon den ganzen Tag es zu lösen und wahrscheinlich wäre es nicht schwer aber ich komm einfach nicht mehr darauf.
 

Anhänge

  • Screenshot (143).png
    Screenshot (143).png
    224 KB · Aufrufe: 44
  • Screenshot (144).png
    Screenshot (144).png
    237,4 KB · Aufrufe: 44
  • Screenshot (145).png
    Screenshot (145).png
    197,6 KB · Aufrufe: 41
  • Screenshot (146).png
    Screenshot (146).png
    236,5 KB · Aufrufe: 37
  • Screenshot (147).png
    Screenshot (147).png
    187,5 KB · Aufrufe: 39
  • Screenshot (148).png
    Screenshot (148).png
    367,1 KB · Aufrufe: 41
  • Screenshot (149).png
    Screenshot (149).png
    349,1 KB · Aufrufe: 45
  • Screenshot (150).png
    Screenshot (150).png
    81,4 KB · Aufrufe: 54
  • Screenshot (151).png
    Screenshot (151).png
    78,1 KB · Aufrufe: 50
  • Screenshot (152).png
    Screenshot (152).png
    162,1 KB · Aufrufe: 49
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn der Baustein Reagieren wirklich so arbeiten soll dann ist das ja gut, kann ich mir aber kaum vorstellen.

Im Grunde genommen fehlt eigentlich noch die Angabe was der Baustein Reagieren überhaupt machen soll. Das was er nun tut und was Du beschreibst passt ja übereinander.
- Wenn der Behälter voll ist, soll er automatisch sofort wieder entleeren oder nach einer festen Zeit?
- Wenn der Behälter nun leer ist, soll er nochmal automatisch gefüllt werden oder erst wenn Start nochmal betätigt wird bzw. so oft wiederholen wie die Maximalanzahl an Chargen nicht erreicht wurde?

Was also erwartest Du als Reaktion auf voll bzw. auf leer. Was soll mit Maximalanzahl an Chargen gemacht werden?

Den Baustein Reagieren hast Du geschrieben bzw. geändert nach dem ersten Beitrag oben. Denn in dem Baustein steht ja auch rücksetzen von Pumpe wenn voll, was er vorher ja nicht getan hat.
Durch das externe Rücksetzen der Pumpe bei der Meldung voll erübrigen sich die Bedingungen AND NOT aus meinem Beitrag #2. Durch das Drehen der Zähler und der Abfrage ist die Bedingung ohne Belang, da leer und voll nun Ausgänge sind, was ja auch richtig ist. In diesem Falle würden nun voll und leer gelesen bevor die überhaupt geschrieben werden. Daher reagieren sie schonmal mindestens einen Zyklus zu spät, und auch nur wenn der Zustand beim zweiten Zyklus noch vorhanden ist und nicht anderweitig beschrieben wurde.
 
Wenn der Behälter voll ist soll er nach einer gewissne zeit sich automatisch entleeren.

Wenn der behälter leer ist soll er nochmal gefüllt werden automatisch und so oft wiederholen bis die maximale anzahl an chargen erreicht wurde
 
In Deinem CFC Reagieren aktuell steht das wenn er nicht leer ist und Start und nicht Pumpe an sofort entleert werden soll, weshalb er sobald die Pumpe abgeschaltet wird durch voll auch sofort wieder entleert, ohne Pause.
ODER
wenn er voll ist nach 5 Sekunden unabhängig vom Startsignal entleeren soll.

Dies erklärt doch warum er nur bei abgeschaltetem Start 5 Sekunden wartet, oder?

Das er nur X mal füllen soll:
Es steht nicht beim SR der Pumpe das er das nur solange machen soll wie die Anzahl an Chargen nicht erreicht wurde. Das fehlt im CFC Reagieren noch. Also der Zähler der im CFC FB_Zaehler genutzt wird, wobei ich nicht ganz sicher bin warum am AND (1) gezählt werden soll wenn die Pumpe an ist und leer. Sollte da nicht gezählt werden wie oft Voll ist, und zwar nur das?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier im Codesys Programm habe ich genau das selbe Programmiert und es funktioniert so wie es eigentlich funktionieren soll. Ich habe das beim Simatic Manager genau so gemacht nur das ich im Programm Reagieren den FB Zähler gelöscht habe weil ich sonst das Programm nicht als Funktionsbaustein übersetzten kann. War dass der Fehler aber ich wüsste nicht wie ich das Programm sonst als FB übersetzte. Und in der Aufgabe von der Fernschule steht auch das keine hierarchischen Bausteine verwendet werden dürfen.
 

Anhänge

  • Screenshot (177).png
    Screenshot (177).png
    155,7 KB · Aufrufe: 39
  • Screenshot (176).png
    Screenshot (176).png
    91,8 KB · Aufrufe: 36
  • Screenshot (178).png
    Screenshot (178).png
    195,4 KB · Aufrufe: 35
Nur das "genau das selbe" hier nicht gleich ist.

CodeSys:
VKE AND(4) ist true wenn:
- Start betätigt
- nicht Pumpe an
- nicht leer
- Zählerwert =0

S7:
VKE AND(5) ist true wenn:
- Immer true
- Start betätigt
- nicht Pumpe an
- nicht leer

Hast Du mal beobachten können das das VKE am AND(4) im CodeSys-Programm ein TRUE liefert?
Vergleiche bei beiden Progammen genau dieses AND(4-Codesys) und AND(5-S7) in einem Durchlauf.
Fällt Dir da ein Unterschied auf?
Fällt Dir der Sinn des AND-Gliedes ein?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast Du denn geschaut was das AND(4) im Codesys-Programm macht? Zur Not verschalte doch mal das AND(4) mit einem Signal als dauerhaft false. Dann probiere das Programm erneut aus mit allen Sollfunktionen.

Das es sich nicht als ein Baustein übersetzen lässt liegt daran das ein weiterer Baustein darin ist. Das weist Du ja schon. Aber es gibt ja Lösungen hierfür. Eine wäre dann das FB_Zaehler nicht hier aufgerufen wird sondern im OB35. Ein anderer das der Inhalt des FB_Zaehler im Baustein Reagieren integriert wird. Benötigen wirst Du den Zähler auf jeden Fall an irgendeiner Stelle im Programm. Sonst kannst Du ja nicht auswerten ob die Anzahl Chargen erreicht wurde.

Ich kenne nicht alle Texte zu diesem Projekt, kann daher schlecht beurteilen was erlaubt ist und was nicht, aber eine Lösung muss offen sein, sonst geht es ja nicht.

Die Aussage keine hierarchischen Bausteine zu nutzen ist für mich nicht eindeutig.

Als Beispiel steht in Deiner Vorgabe "Da bisher der CFC-Plan "Reagieren" als OB35 übersetzt worden ist, muss man die FBe "FB_Zaehler" und "FB_Reagieren" als Funktionsbausteine übersetzen. Dafür dürfen allerdings keine hierarchischen Bausteine verwendet werden."
Für mich ist das eindeutig die Aussage das ich nur aufgrund der Übersetzung keine hierarchischen Bausteine verwenden darf. Nicht, das ich das nirgends anders im Programm darf.
Der OB35 als übergeordneter baut ja bereits die erste Hierarchieebene auf.
Ebenso wird mitgeteilt das im OB35 als SCL FB_Reagieren und FB_Zaehler aufgerufen werden müssen, aber da steht nicht ob ich FB_Zaehler nicht auch dort aufrufen darf. Da es da nicht steht würde ich das so tun.
Was aber natürlich derjenige dazu sagt der diese Hausaufgabe korrigiert ist eine andere Geschichte. Im beruflichen Alltag komme ich damit immer durch, bei so einer Hausaufgabe werden Regeln leider oft nach Abgabe hinzugedichtet a la "Das war so nicht gedacht und darf deshalb nicht gemacht werden" obgleich es nicht explizit dort steht.

Also würde ich den FB_Zaehler halt nutzen, diesen aber eben im OB35 nach FB_Reagieren aufrufen und die dann benötigten Variablen im FB_Reagieren hinzufügen, wobei dies ja nur eine wäre: "AnzChargenErreicht:BOOL", der Rest würde im FB_Zaehler ausgewertet.
 
ok vielen dank habe das jetzt so gemacht wie sie es mir gesagt haben und es funktioniert. Jetzt ist nur noch das in der Angabe steht das ich das Startsignal eingeben soll. Und ich schätze das wenn es das letzte mal Entleert wird Start auf FALSE gehen soll. Verstehe ich das so richtig? Weil hier steht ich soll einen Screenshot nach dem letzten Entleeren bei der Schalterstellung „AUS“ machen. BZW soll Start TRUE werden wenn das letzte mal Entleert wurde?
 

Anhänge

  • Screenshot (190).png
    Screenshot (190).png
    210,8 KB · Aufrufe: 15
  • Screenshot (191).png
    Screenshot (191).png
    197 KB · Aufrufe: 15
Schön das es nun läuft, ich hoffe Du hast die Probleme die ich Dir vor die Nase halten wollte gefunden und Du konntest die Lösung so erarbeiten.

Das mit dem letzten Screenshot ist ein wenig unglücklich in der Aufgabe beschrieben, auch kenne ich das Ursprungsprojekt nicht.
Ich gehe bei dem Text davon aus das Start durch den FB_Reagieren auf false gehen soll wenn alles durchgelaufen ist. Mit Sicherheit kann ich das aber nicht sagen.
Bei einer normalen Steuerung würde Start dann ein INOUT werden und somit im FB rücksetzbar werden bei Erledigung womit man bei diesem Projekt nicht sieht ob nun alles durchgelaufen ist oder nie gestartet wurde.
Worauf hier abgezielt wird kann ich nicht ganz erahnen.

Ich würde es aber so machen das Start sich zurücksetzt und dann eben am Ende der Screenshot gemacht wird.
 
Zurück
Oben