Behälter befüllen

Bender25

Level-2
Beiträge
584
Reaktionspunkte
20
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen...

Brauch wie so oft mal wieder die Hilfe von euch.

Kleine Programm beschreibung...

Über eine Pumpe muß ich 4 Behälter füllen, die in einer bestimmten Reihenfolge über ein TP (TP=Touchpanel) festgelegt werden. Im TP selber wird eine INT zu jeden Behälter (1-4) eingetragen. Wenn der 1. Behälter voll ist erfolgt eine freigabe zum befüllen des nächsten Behälters.

Jetzt habe ich mir überlegt, das ich einfach einen vergleich zwischen Priorität des Behälters und "aktueller Priorität" mache und so jeweils die Freigabe setzte...

Aber jetzt steck ich darin fest, wie "zähle" ich die akt.Priorität hoch (wenn z.b. der erste Behälter voll ist, das der nächste füllen kann)da die Behälter selber ja Variabel sind in der Priorität..

Wäre super wenn ihr Tips hättet... Bin auch für andere Lösungsvorschläge offen... (Nur Kunde wünscht das er Zahlen eintragen kann zu den Behältern)
Vielen dank mal
 
Also ich würde eine Variable anlagen, die mir sagt wieviele behälter ich überhaupt füllen muss.(vielleicht mit bit Zählen). Ergebniss=4 Behälter mit prio 1 füllen, Ergebniss=3 Behälter mit prio 2 füllen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich würde eine Variable anlagen, die mir sagt wieviele behälter ich überhaupt füllen muss.(vielleicht mit bit Zählen). Ergebniss=4 Behälter mit prio 1 füllen, Ergebniss=3 Behälter mit prio 2 füllen.

Hallo Antonio.. Das ganze läuft so ab, wenn der Niedertarif kommt, sollen alle Behälter (1-4) den Prioritäten nach gefüllt werden, egal wie "leer" sie sind.Natürlich nur bis zu einem Oberen Grenzwert.
 
Hallöchen

du hast ja für jeden silo einen merker wo die nr drinnen steht

jetzt zählst du einen zähler hoch und vergleichst die merker mit denn zähler wert wenn er gleich ist dann wird dieser silobefüllung freigegeben

l mw 0 // silo 1
l mw 10 // zähler wert
==I
= m20.0 //Silo 1 befüllen

l mw 2 // silo 2
l mw 10
== I
= m20.1 // Silo 2 befüllen

wenn der Silo voll ist Zähler hochzählen

wenn du verhindern willst das zwei gleichzeitig befüllen dann noch die verriegelungen von denn anderen silos


l mw 2 // silo 2
l mw 10
== I
un m20.0
un m20.2
un m20.3
= m20.1 // Silo 2 befüllen


ich hoffe das ist dein Problem und nicht das ich es zu einfach sehen
 
Hallöchen

du hast ja für jeden silo einen merker wo die nr drinnen steht

jetzt zählst du einen zähler hoch und vergleichst die merker mit denn zähler wert wenn er gleich ist dann wird dieser silobefüllung freigegeben


ich hoffe das ist dein Problem und nicht das ich es zu einfach sehen


Hallo Kpeter

Vielen Dank für deine Antwort...
Dein Lösungsvorschlag hab ich eigentlich auch so umgesetzt.

Nur hänge ich am Hochzählen. Problem ist noch, das hinter jedem Behälter eine andere Schrittkette hängt, mit bestimmten Zuständen die erreicht werden müssen, bevor der nächste füllen darf.

Und da ich jetzt noch mit dem Kunden geredet hab :twisted: will er jetzt noch zusätzlich, das die Prio-Kette unterbrochen wird, wenn ein Behälter einen Grenzwert Min Meldet und diesen dann füllt....... Arrrrggghhh
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...
Und da ich jetzt noch mit dem Kunden geredet hab :twisted: will er jetzt noch zusätzlich, das die Prio-Kette unterbrochen wird, wenn ein Behälter einen Grenzwert Min Meldet und diesen dann füllt....... Arrrrggghhh

Die Prio-Kette zu unterbrechen hilft ja nun auch nicht. Wenn Zweibehälter auf min stehen will er ja sicher das der mit der höchsten Prio (von den Beiden) zu erst befüllt wird.

Ich würde das so machen:
Die Behälter haben eine Manuell vergebene Prio von 1..4 (4 höchste Prio) Variablen OpPrio1..4.
Nun würde ich noch eine interne Prio 1..4 erstellen und dieser in einem resten Schritt die Werte von den OpPrio zuweisen, in einem zweiten Schritt würde ich die Min Zustände so verarbeiten das ich bei den Behältern die auf Min stehen die interne Prio + 10 verpasse. Die Max Zustände würde ich in einem dritten Schritt so verarbeiten das alle Behälter die auf Max stehen würde ich mit der Prio := 0 übershreiben.
Dann kann man den behälter mit der höchsten Prio ermitteln und diesen befüllen.
In ST könnte ich das auch recht schnell programmieren aber in AWL tu ich mir da gerade etwas schwer ;o(
 
Hier mal der Quik and Dirty Ansatz in ST/SCL (vielleicht hilft das ja auch).

Ich habe bewust auf Arrays verzichtet (obwohl es angebracht wäre).
Min und Max beschreiben den Zustand (habe mir keine Gedanken über NC/NO gemacht).

Als Ergebnis kommt die Nr. des zu befüllenden Behälters raus.

Code:
VAR
    OpPrio1 : INT;
    OpPrio2 : INT;
    OpPrio3 : INT;
    OpPrio4 : INT;

    Prio1 : INT;
    Prio2 : INT;
    Prio3 : INT;
    Prio4 : INT;


    Min1 :BOOL;
    Min2 :BOOL;
    Min3 :BOOL;
    Min4 :BOOL;

    Max1 :BOOL;
    Max2 :BOOL;
    Max3 :BOOL;
    Max4 :BOOL;

    BehaelterNr:INT;
END_VAR
Code:
Prio1 := OpPrio1;
Prio2 := OpPrio2;
Prio3 := OpPrio3;
Prio4 := OpPrio4;

IF (Min1) THEN
    Prio1 := Prio1 + 10;
END_IF;

IF (Min2) THEN
    Prio2 := Prio2 + 10;
END_IF;

IF (Min3) THEN
    Prio3 := Prio3 + 10;
END_IF;

IF (Min4) THEN
    Prio4 := Prio4 + 10;
END_IF;

IF (Max1) THEN
    Prio1 := 0;
END_IF;

IF (Max2) THEN
    Prio2 := 0;
END_IF;

IF (Max3) THEN
    Prio3 := 0;
END_IF;

IF (Max4) THEN
    Prio4 := 0;
END_IF;


IF ((Prio1 > Prio2) AND (Prio1 > Prio3) AND (Prio1 > Prio4)) THEN
    BehaelterNr := 1;
ELSE
    IF ((Prio2 > Prio3) AND (Prio2 > Prio4)) THEN
        BehaelterNr := 2;
    ELSE
        IF (Prio3 > Prio4) THEN
            BehaelterNr := 3;
        ELSE
            BehaelterNr := 4;
        END_IF;
    END_IF;
END_IF;
 
Hier mal der Quik and Dirty Ansatz in ST/SCL (vielleicht hilft das ja auch).

Ich habe bewust auf Arrays verzichtet (obwohl es angebracht wäre).
Min und Max beschreiben den Zustand (habe mir keine Gedanken über NC/NO gemacht).

Als Ergebnis kommt die Nr. des zu befüllenden Behälters raus.


Hey vielen Dank... Hört sich schon mal sehr sehr gut an.. Werd ich gleich mal umsetzten... hab aber bestimmt noch fragen an dich wenns Ok ist :rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey vielen Dank... Hört sich schon mal sehr sehr gut an.. Werd ich gleich mal umsetzten... hab aber bestimmt noch fragen an dich wenns Ok ist :rolleyes:

Klar kannste fragen mir ist auch noch aufgefallen das man die BehaelterNr besser erst mal auf "0" setzen sollte das wenn Alle Behälter voll sind nicht doch der Behälter Nr. 4 dran kommt.

Code:
BehaelterNr := 0;

Einfach vor de Auswertung setzen ;o)
 
Klar kannste fragen mir ist auch noch aufgefallen das man die BehaelterNr besser erst mal auf "0" setzen sollte das wenn Alle Behälter voll sind nicht doch der Behälter Nr. 4 dran kommt.

Code:
BehaelterNr := 0;

Einfach vor de Auswertung setzen ;o)

Super. Vielen Dank. Genial

Bender << Sagt Danke
 
Wie wird der Befüllvorgang eigentlich gestartet? Drückt man auf einen Schalter/Taster und startet die Befüllung, und die Befüllung läuft dann so lange, bis alle Behälter voll sind? Oder startet die Befüllung automatisch, wenn z. B. ein Min-Sensor meldet, dass mindestens ein Behälter leer ist? :confused:

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also das ganze sollte so laufen das die Behälter mit dem Niedertarif gefüllt werden, egal wie leer sie sind (halt nach Prioriät).

Wie gesagt sollte... Jetzt kam schon wieder eine Änderung :twisted:
Jetzt soll die Behälterfüllung bei Niedertarif doch erst dann starten, wenn ein NT-Grenzwert erreicht ist.. Den versuch ich jetzt in den SCL Code von Zotos rein zu pfriemeln. :rolleyes:

Bei Hochtarif, werden die Behälter nach Wasserstand bzw Grenzwerte gefüllt..
 
Was ist denn jetzt Hochtarif und Niedertarif? Bezieht sich das auf den Strompreis?

Und noch mal zurück zu meiner Frage: Startet die Befüllung (je nach Tarif, Grenzwerten, Priorität) automatisch oder muss ein Bediener einen Schalter oder Taster drücken und damit den Befüllvorgang (je nach Tarif, Grenzwerten, Priorität) der Behälter starten?

Gruß Kai
 
Was ist denn jetzt Hochtarif und Niedertarif? Bezieht sich das auf den Strompreis?

Und noch mal zurück zu meiner Frage: Startet die Befüllung (je nach Tarif, Grenzwerten, Priorität) automatisch oder muss ein Bediener einen Schalter oder Taster drücken und damit den Befüllvorgang (je nach Tarif, Grenzwerten, Priorität) der Behälter starten?

Gruß Kai


Sorry... Ja HT und NT beziehen sich auf die Strompreise.... Und bei NT soll alles von alleine Starten (natürlich vorausgesetzt der Schalter am Schrank steht auf Automatik)
 
Irgendwie verliere ich langsam den Überblick. :confused:

Könntest Du noch einmal in ein paar Sätzen oder in Tabellenform beschreiben, wann welcher Behälter wie befüllt werden soll (mit HT, NT, Priorität, Max, Min, Automatik, Wasserstand usw.)?

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Irgendwie verliere ich langsam den Überblick.

Könntest Du noch einmal in ein paar Sätzen oder in Tabellenform beschreiben, wann welcher Behälter wie befüllt werden soll (mit HT, NT, Priorität, Max, Min, Automatik, Wasserstand usw.)?

Gruß Kai

Dann gehts dir wir mir :ROFLMAO: Vor allem wenn alle halbe Stunde den Leuten was anderes einfällt. Oder ich es falsch verstanden hab

Aber mit dem SCL Code von Zotos bekomme ich das ganze hin :D


Aber nochmal

Hochtarif - Automatik:

Alle 4 Behälter werden über Grenzwerte vom Wasserstand gesteuert.
Für jeden Behälter sind gewisse Grenzen in der SPS hinterlegt, über die dann die Befüllung gesteuert wird.


Niedertarif-Automatik:

Im Touch-Panel werden alle 4 Behälter mit einer Priorität vorgewählt (Prio 1-4). Diese Behälter sollen dann in abhängigkeit dieser zugeordneten Priorität gefüllt werden, wenn diese jeweiligen Behälter eine gewisse Grenze davor unterschritten haben (Ist vorher neu dazu gekommen).
Dieser Grenzwert wird aus dem Analogwert gebildet.

Ist z.B. dem 3. Behälter die Priorität 4 (höchste Priorität) zugeteilt und er hat bereits eine gewisse Grenze unterschritten, dann füllt dieser zuerst bis zu einem Grenzwert Max. Anschließen kommt der nächste Behälter zur befüllung. Ist es so das diese Grenze noch nicht erreicht wurde soll sofort der nächste Behälter (sprich der mit der Priorität 3) befüllt werden.

Kommt es jetzt aber wärend der Befüllung z.b. des 3. Behälters zu einer Warnung (In diesem Fall eine Elektrode die Wasser Min Meldet) von Behälter 1 der die niedrigste Priorität hat, soll diese obere Kette unterbrochen werden und sofort diese Behälter 1 befüllt werden, bis dieser dann voll ist... Danach gehts wieder mit dem Behälter 3 weiter...

Hab jetzt noch , wegen der letzten änderung, an dem Code von Zotos ein wenig rum gewurstelt und es sollte jetzt gehen... :rolleyes:

Wenn ich mir das jetzt so anschaue hab ich mich und dich jetzt völlig verrückt gemacht....>> Feierabend...

Wünsch euch mal allen frohe Ostern :D
 
Zurück
Oben