TIA Schulaufgabe Tankanlage

Tim2112

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag ich bräuchte mal Hilfe von jemanden der mir Weiterhelfen kann.
Und zwar haben wir in der Berufsschule von unseren Lehrer eine Programmieraufgabe bekommen für die 300er Siemens SPS.
Die aufgaben Stellung ist Simpel, die Tanks sollen in der Reihenfolge wie sie entleert wurden wieder befüllt werden.
Und das ist auch genau das Problem da komme ich nicht weiter und unser Lehrer hilft uns auch nicht.
Die genaue Aufgaben Stellung hab ich als Bild mit Hinzugefügt.
Ich Programmiere auf mein Laptop mit TiaV13 falls das wichtig ist.
Und falls das wichtig ist ich bin im Zweiten Lehrjahr.
LG Tim
1737622869364.png
 
Dann zeig doch einfach mal was du schon hast und wo es klemmt.
Fertige Lösungen für Hausaufgaben gibt es hier im Forum eher selten.
Macht auch nicht wirklich Sinn, da auch viele Lehrer mitlesen.
 
Dann zeig doch einfach mal was du schon hast und wo es klemmt.
Fertige Lösungen für Hausaufgaben gibt es hier im Forum eher selten.
Macht auch nicht wirklich Sinn, da auch viele Lehrer mitlesen.
Ich will auch keine fertige Lösung sondern bräuchte nur eine idee bzw. Denkanstoß.
Ich hab die Auswahl der Tanks schon fertig über UND glieder und die Automatische befüllung sobald er Leer ist und das jeweils nur einer Leer seien kann. Aber ich weiß nicht wie ich es machen soll das sie halt Nacheinander voll werden wie ich sie Entleert habe also nur die reihenfolge.
Mein Ausbilder hat uns eine Lösung mit Move gliedern vorgeschlagen aber das funktioniert auf der 300er nicht
 
Ich würde da erst einmal die Zustände als Bool definieren.. jeder Tank hat ja zwei Sensoren, also weißt du wie viele Zustände es pro Tank gibt.. die Zeiten zum befüllen hast du auch..

Du musst dir halt _merken_ in welcher Reihenfolge die Tanks entleert wurden und das auch so in deiner Sequenz dann wieder abfragen und dementsprechend reagieren
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

KOP oder FUP oder AWL oder SCL? Hast du denn schon einen Ansatz? Ich denke mal, es wird dir keiner den Code schreiben.
In FUP Ja ein Ansatz hab ich schon, diesen hab ich auch grad schon Reingeschrieben. Ich will nicht direkt einen Code sondern nur eine Idee Bzw. Anstoß womit oder wie ich es machen kann
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich will auch keine fertige Lösung sondern bräuchte nur eine idee bzw. Denkanstoß.
Ich hab die Auswahl der Tanks schon fertig über UND glieder und die Automatische befüllung sobald er Leer ist und das jeweils nur einer Leer seien kann. Aber ich weiß nicht wie ich es machen soll das sie halt Nacheinander voll werden wie ich sie Entleert habe also nur die reihenfolge.
Mein Ausbilder hat uns eine Lösung mit Move gliedern vorgeschlagen aber das funktioniert auf der 300er nicht
Warum sollte Move nicht mit einer 300er funktionieren?

3 Zahlenspeicher (Int_ZuerstLeer, Int_ZweiterLeer, Int_DritterLeer)
Flankenauswertung auf die Leer-Meldung
und damit in den ersten freien Speicher die Tanknummer schreiben.

Vollständiges Füllen löscht den ersten Speicher und lässt den Rest aufrücken.
 
Als Zahlenspeicher ein Array nehmen [1..3] of byte.
Dann hast du über die Flanke die richtige Nummer gleich drinnenstehen.
Wenn du nach dem Befüllen an die enstprechende Stelle eine Null schreibst, wenn er voll ist kannst du über eine Schleife den nächsten Wert ungleich Null rausziehen.(Aktueller Tank befuellen).Das wäre dann aber SCL.Eine einfach Forschleife.
Oder mit FUP der Reihe nach das Array durchgen auf ungleich Null.
Wenn überall Null drinnen ist bist du fertig.
Das bei unterbrechen an der richtigen Stelle wietergemacht wird heisst die Nummern speichern.
 
Als Zahlenspeicher ein Array nehmen [1..3] of byte.
Dann hast du über die Flanke die richtige Nummer gleich drinnenstehen.
Wenn du nach dem Befüllen an die enstprechende Stelle eine Null schreibst, wenn er voll ist kannst du über eine Schleife den nächsten Wert ungleich Null rausziehen.(Aktueller Tank befuellen).Das wäre dann aber SCL.Eine einfach Forschleife.
Oder mit FUP der Reihe nach das Array durchgen auf ungleich Null.
Wenn überall Null drinnen ist bist du fertig.
Das bei unterbrechen an der richtigen Stelle wietergemacht wird heisst die Nummern speichern.
Danke für die Antwort.
Muss ich sonst noch irgendwas bei dem Array beachten?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde da erst einmal die Zustände als Bool definieren.. jeder Tank hat ja zwei Sensoren, also weißt du wie viele Zustände es pro Tank gibt.. die Zeiten zum befüllen hast du auch..

Du musst dir halt _merken_ in welcher Reihenfolge die Tanks entleert wurden und das auch so in deiner Sequenz dann wieder abfragen und dementsprechend reagieren
Vielen dank für die Antwort!
 
Wie schaut es aus, hast du es schon lösen können?

Unser Azubi kam neulich mit genau dieser Aufgabe zu mir.
Das Ansteuern der Ventile für Entnahme und die Meldeleuchten waren nicht das
Problem, er hing auch an der Reihenfolge des Befüllens.

Dies soll auf einer 314C laufen, da würde ich ARRAY-Methode schonmal
nicht empfehlen. Das geht auf dieser CPU nämlich nicht so schön wie bei einer
mit optimiertem Zugriff.

Code:
L P##MyArray // array[0..3] of Int
LAR1
L W [AR1, P#4.0]
T #x

für

Code:
#x := MyArray[2];

Ich empfehle, dies (wie @stivi_d) mit drei INT-Variablen zu lösen.

Die Lösung ist nicht trivial, aber vollständig in FUP umsetzbar.

LG
Chris
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für eine Schulaufgabe echt nicht trival.Mit einem Zeiger hat ein Array nichts zu tun.Das habe ich nicht gemeint.
Das Array dient im Prinzip nur der Speicherung der 3 Integer Werte.
Es müssen trotzdem dann über Vergleiche geprüft werden ob ein fach belegt ist mit einer Nummer(ungleich Null) und dann das nächste Fach belegt werden.
Die Reihenfolge des Befüllens erfordert dann immer ob ein fach schon belegt ist mit ungleich Null.

Die Reihenfolge ist dann durch das Array vorgegeben.Also ich fände es leichter so.Aber jeder wie er mag.
 
I'm sorry, what?

Natürlich kann das über ein Array gelöst werden. (Projektiert ist hier eine S7-314C). Das muss nicht kompliziert über Pointer auf Arrays in AWL gelöst werden.

1737979760061.png
 
Ich empfehle, dies (wie @stivi_d) mit drei INT-Variablen zu lösen.
+1
Die Aufgabe ist auch ohne Array vollständig lösbar. Array verkompliziert die Lösung nur.


Die Reihenfolge ist dann durch das Array vorgegeben.Also ich fände es leichter so.Aber jeder wie er mag.
die Aufgabenstellung verlangt aber:
die Tanks sollen in der Reihenfolge wie sie entleert wurden wieder befüllt werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja diese Information steckt doch gerade dann im Array drinnen. 3 Tank im ersten Array Element oder zweiter.
Wenn die Entllerflanke vom Tank 3 kommt schreibe ich ins erste Arrayelement 3.u.s.w
Das finde ich ja gerade den Vorteil.Man kann es auch ohne Array, aber ich finde es übersichtlicher so.
 
Ob ich jetzt drei Variablen habe NummerTankZuerstBefuellen, NummerTankAlsZweitesBefuellen, NummerTankAlsDrittesBefuellen. oder ob in ein Array ReihenfolgeBefuellung habe, verkompliziert die Sache aus meiner Sicht nicht sonderlich.

Aber so lernt Tim vielleicht etwas Neues, das später nochmal nützlich werden kann.
 
Wie schaut es aus, hast du es schon lösen können?

Unser Azubi kam neulich mit genau dieser Aufgabe zu mir.
Das Ansteuern der Ventile für Entnahme und die Meldeleuchten waren nicht das
Problem, er hing auch an der Reihenfolge des Befüllens.

Dies soll auf einer 314C laufen, da würde ich ARRAY-Methode schonmal
nicht empfehlen. Das geht auf dieser CPU nämlich nicht so schön wie bei einer
mit optimiertem Zugriff.

Code:
L P##MyArray // array[0..3] of Int
LAR1
L W [AR1, P#4.0]
T #x

für

Code:
#x := MyArray[2];

Ich empfehle, dies (wie @stivi_d) mit drei INT-Variablen zu lösen.

Die Lösung ist nicht trivial, aber vollständig in FUP umsetzbar.

LG
Chris
Erstmal vielen Dank für die Antwort!
Also gewissermaßen hab ich sie normal in FUP ohne ARRAY lösen können aber hatte trotzdem nen Fehler und naja dann nach ein paar hektischen Lösungsversuchen hat nix mehr funktioniert.
Ich hab es versucht über SR Glieder zu lösen.
Ich werde es die Woche noch mal mit meinem Ausbilder probieren.
Wenn ich fragen darf auf welcher Berufschule geht ihr Azubi?
Lg Tim
 
Zurück
Oben