# Gefinkelte Aufgabenstellung, Hirnschmalz gefragt



## MarkusP (1 März 2009)

Hallo an alle Tüftler und Mathematik Freaks,

meine Aufgabenstellung sieht auf den ersten Blick recht easy auf, ich komme aber gerade mal auf keinen grünen Zweig. Vielleicht denke ich aber einfach nur zu kompliziert...

Mein Kunde hat Kompressoren mit unterschiedlichen Luftleistungen. (160 bis 450 kW) Er will nun, da der Luftbedarf bekannt ist und dieser mir auch übergeben wird, dass nur die absolut notwendigen Kompressoren in Betrieb gehen. Erschwerend hinzukommt, dass nicht immer alle Kompressoren verfügbar sind, bzw. nicht gestartet werden können oder dürfen.

Damit es jetzt nicht zu einfach wird, muss mein (Standard) FB zusätzlich mehrere gleichartige (derzeit bis zu max. 4 Kompressoren) verwalten können. Das ergibt dann 16 Kompressoren und entsprechende Kombinationsmöglichkeiten.

Eingänge in den Baustein:
* Angeforderte gesamte Luftmenge
* Luftmenge eines Kompressors der Einheit 1
* Zum Start verfügbare Kompressoren von Einheit 1 (0..4)
* Luftmenge eines Kompressors der Einheit 2
* Zum Start verfügbare Kompressoren von Einheit 2 (0..4)
* Luftmenge eines Kompressors der Einheit 3
* Zum Start verfügbare Kompressoren von Einheit 3 (0..4)
* Luftmenge eines Kompressors der Einheit 4
* Zum Start verfügbare Kompressoren von Einheit 4 (0..4)

Ausgänge:
* Anzahl zu startender Kompressoren der Einheit 1
* Anzahl zu startender Kompressoren der Einheit 2
* Anzahl zu startender Kompressoren der Einheit 3
* Anzahl zu startender Kompressoren der Einheit 4

Es sollen *so wenig* Kompressoren als möglich gestartet werden, beginnend mit den kleinsten. Ein 400 kW Kompressor muss Vorrang gegenüber zwei 200 kW Kompressor haben. Wird mehr Kompressorleistung angefordert als zur Verfügung steht, müssen alle angefordert werden.

Ich will hier nun keine ausprogrammierten Vorschläge, sondern vielleicht hat hier irgendwer so was ähnliches schon gemacht, und kann mir eine bloße Idee geben. Derzeit bin ich bei verschachtelten Schleifen angelangt, und zig Programmzeilen... Jede Lösung die ich bis jetzt hatte, funktionierte nur eingeschränkt, und fängt nicht alle Möglichkeiten und Kombinationen ab.

Entweder bin ich zu blöde, oder es ist nicht so einfach wie es aussieht.

Programmiert wird's letztendlich in ST unter TwinCAT-PLC. Spielt jedoch eigentlich keine Rolle.


Ich hoffe die Aufgabenstellung ist einigermaßen klar, und würde mich über Eure Anregungen sehr freuen. Sollte ich das Problem irgendwie lösen können, stelle ich den Baustein natürlich gerne zur Verfügung.

Schönes WE


----------



## Larry Laffer (1 März 2009)

Hallo Markus,
mein pauschaler Ansatz dazu :
Von allen verfügbaren Kompressoren und deren Leistung ein neue Liste erstellen. Diese Liste nach Leistung sortieren (größte Leistung ist oben). Nun diese Liste mit dem Bedarfswert vergleichen und entsprechend Schaltungen auslösen.

Vielleicht ist das ja ein neuer Ansatz für dich ...
Gruß
LL


----------



## Lipperlandstern (1 März 2009)

Larry Laffer schrieb:


> Hallo Markus,
> mein pauschaler Ansatz dazu :
> Von allen verfügbaren Kompressoren und deren Leistung ein neue Liste erstellen. Diese Liste nach Leistung sortieren (größte Leistung ist oben). Nun diese Liste mit dem Bedarfswert vergleichen und entsprechend Schaltungen auslösen.
> 
> ...


 
Stichwort dazu : BubbleSort


----------



## MarkusP (1 März 2009)

Danke ihr fleißigen und lieben Leute,

diesen Ansatz habe ich heute morgen kurz gehabt, habe mich aber für einen anderen Lösungsansatz entschieden. War wohl ein Fehler...

Danke


----------



## Lipperlandstern (1 März 2009)

MarkusP schrieb:


> Danke ihr fleißigen und lieben Leute,
> 
> diesen Ansatz habe ich heute morgen kurz gehabt, habe mich aber für einen anderen Lösungsansatz entschieden. War wohl ein Fehler...
> 
> Danke


 
Viele Wege führen nach Rom.... oder zu der benötigen Menge Druckluft.... Ich denke das du an einer Sortierroutine nicht drum herrum kommst.


----------



## Larry Laffer (1 März 2009)

... wahrscheinlich brauchst du dann zusätzlich noch einen weiteren Algorhythmus - so wie beschrieben würde ich hier allerdings erstmal starten.

Gruß
LL


----------



## MarkusP (1 März 2009)

*...wird nicht einfacher*

Noch ein Gedankenexperiment:

Gruppe 1: 160 kW, 2 Stk. verfügbar
Gruppe 2: 320 kW, 1 Stk. verfügbar
Gruppe 3: 450 kW, 2 Stk. verfügbar
Gruppe 4: nicht vorhanden

Die Ergebnisliste wäre dann in der Form, wenn ich es richtig verstanden habe, so:

160 kW
160 kW
320 kW
450 kW
450 kW

Damit bei einer angeforderten Leistung von 320 kW nicht die beiden 160 kW Kompressoren gestartet werden mache ich was ?

Ich glaube, ich muss für alle Kombinationsmöglichkeiten zusätzliche Listen erstellen..

Ist es wirklich so schwierig? Ich geh' mir jetzt ein Bier holen... 

LG


----------



## Larry Laffer (1 März 2009)

Hallo Markus,
ich hatte doch vorgeschlagen : die größte Leistung nach oben ...
Jetzt würdest du schon etwas passendes fínden. Es wäre m.E. aber noch weiterhin zu berücksichtigen : "Betriebsdauer bis jetzt".

Gruß
LL


----------



## Rainer Hönle (1 März 2009)

Wie wäre es gleich mit einer Liste der Kombinationsmöglichkeiten. Hält sichderzeit ja in Grenzen. Und dazu passend jeweils einer Bitmaske, welche Kompressoren dafür laufen müssen. Dabei sind mehrere gleiche Leistungen mit unterschiedlichen Kompressoren zulässig bzw. notwendig. Wenn nun einer dieser Kopmpressoren nicht laufen darf, kann dies ebenfalls einfach durch Bitmaskierung herausgefunden werden und diese Stufe ausgeschlossen werden.


----------



## Lipperlandstern (1 März 2009)

@ Markus

Ich würde alle verfügbaren Kompressoren in einen DB eintragen. Ist ein Kompressor nicht verfügbar bekommt er als Leistung eine 0 und wandert bei der späteren Sortierung ganz nach unten.
Der grösste Kompressor steht dann ganz oben in der Liste. Kommt jetzt die Anforderung dann wird verglichen. Ist der erste Eintrag in der Liste zu gross springe zum nächsten Eintrag. Ist der kleiner oder gleich der Anforderung dann Einschalten und den Wert des Kompressors von der Anforderung abziehen. Ist die grösser Null dann weiter suchen... Damit hast du Automatisch immer die kleinste Anzahl an Kompressoren am laufen.  Bekommst du die Differenz nicht auf Null laufen automatisch alle Kompressoren.

Die Sache mit der Betriebsdauer macht das ganze natürlich etwas komplizierter .......


----------



## MarkusP (1 März 2009)

*Danke für die vielen Antworten!*



> Wie wäre es gleich mit einer Liste der Kombinationsmöglichkeiten. Hält sich derzeit ja in Grenzen.


Ich bin ja jetzt nicht unbedingt das Mathematikgenie, aber wären alle 16 Kompressoren von unterschiedlicher Leistung, gäbe es 65536 Kombinationsmöglichkeiten.

Da ja die Einschränkung des gleichen Typs pro Gruppe besteht, gibt es innerhalb der Gruppe max. 5 Möglichkeiten. (keiner, einer, zwei, drei, vier) Wie vermehrt sich das nun durch die Tatsache, dass es vier Gruppen gibt? Ich glaube es sind 5 hoch 4 (=625) Möglichkeiten. Diese Anzahl übersteigt leicht meine gedankliche Vorstellungskraft für einen Lösungsansatz.

Gruß


----------



## MarkusP (1 März 2009)

*grübel, grübel und studier'*



> Ist ein Kompressor nicht verfügbar bekommt er als Leistung eine 0 und wandert bei der späteren Sortierung ganz nach unten. Der grösste Kompressor steht dann ganz oben in der Liste.


Genau das sollte die Liste in meinem vorigen mail darstellen, die bereits aussortierte List.



> Kommt jetzt die Anforderung dann wird verglichen. Ist der erste Eintrag in der Liste zu gross springe zum nächsten Eintrag. Ist der kleiner oder gleich der Anforderung dann Einschalten und den Wert des Kompressors von der Anforderung abziehen. Ist die grösser Null dann weiter suchen... Damit hast du Automatisch immer die kleinste Anzahl an Kompressoren am laufen.  Bekommst du die Differenz nicht auf Null laufen automatisch alle Kompressoren.


Soweit war ich schon mal, es wird jedoch nicht berücksichtigt, wenn ein Kompressor gleich groß ist, wie z.B. zwei andere gemeinsam.



> Die Sache mit der Betriebsdauer macht das ganze natürlich etwas komplizierter .......


Das klammere ich derzeit hier aus, ist so schon kompliziert genug. Wird derzeit jedoch von einem nachfolgenden Baustein innerhalb der einzelnen Gruppen berücksichtigt.

Ich glaube, ich hole mir noch ein Bier :sm19: 

Danke auch Dir, für Dein Hirnschmalz und Deine Freizeit am Sonntag Nachmittag


----------



## Lipperlandstern (1 März 2009)

MarkusP schrieb:


> .....
> 
> Soweit war ich schon mal, es wird jedoch nicht berücksichtigt, wenn ein Kompressor gleich groß ist, wie z.B. zwei andere gemeinsam.
> ...


 
Wieso nicht ??? Die grösste Leistung steht OBEN in der Liste.... deine Liste war verkehrtrum sortiert

450KW
450KW
320KW
160KW
160KW

Lautet die Anforderung jetzt 320KW wird nur der Kompressor an der 3. Stelle eingeschaltet. Alle anderen bleiben aus.

Ich würde von der Betrachtung der einzelnen Gruppen Abstand nehmen und alle 16 Kompressoren als eine Einheit betrachten.


----------



## Sockenralf (1 März 2009)

Hallo,

vergiss deine CPU
vergiss es, das selber zu programmieren --> das wird nur Flickwerk


Jetzt nicht gleich maulen, aber bei den jährlichen Energiekosten dieser Kompressorstation lohnt es sich, um 1/10% in den Last- und Leerlaufstunden zu feilschen und zu optimieren.

Ich würde folgende Steuerung empfehlen: http://www.airleader.com/



Wir haben seit über 10 Jahren ein Vorgänger-Modell der neuen Steuerung im Einsatz.

Vor 2 Jahren kam Kaeser mit seiner neuen Steuerung zu uns, und war fest davon überzeugt, daß die NEUE Kaeser-Steuerung für einen wirtschaftlicheren Kompressorlauf sorgen würde, als unsere alte Airleader-Steuerung.
Wir haben die Kaeser-Steuerung montiert und von Kaeser in Betrieb nehmen lassen.

Nach 4 Wochen --> unsere Kompressoren waren schlechter ausgelastet als vorher
Also hat Kaeser die Parameter optimiert
Wieder nach 4 Wochen --> Auslastung war leicht besser als vorher, aber immer noch weit von den Airleader-Daten weg
Kaeser hat Parameter optimiert
Nochmals 4 Wochen: Kaeser hat die Steuerung wieder mitgenommen (O-Ton: an die Airleadersteuerung kommen wir nicht hin) *ROFL*


Und sowas willst du selber-stricken (bei Energiekosten in 6- oder 7-stelliger Höhe)?????

M. M. nach hat die Airleader-Steuerung bei dir einen ROI von ein paar Monaten!!!!



MfG


----------



## Larry Laffer (1 März 2009)

Das du das mit der Sortier-Reihenfolge nun schon 2 Mal überlesen hast ...

Ich denke auch, dass sich aus Axels und meinem Ansatz in Kombination (sogar ohne großen Aufwand) dein Problem erschlagen läßt. 
Möchtest du zusätzlich die Laufzeit (Betriebsdauer) mit dort Einbeziehen, so wäre das an dieser Stelle der richtige Ansatz. Hat ein Kompressor ein größere Laufzeit als ein anderer so kommt er automatisch ans Ende der Liste. Werden alle benötigt, so hat er dann immer noch seine Chance ...


----------



## Larry Laffer (1 März 2009)

@Sockenralf:
Ich kenne nun weder Kaeser noch Airleader ... ich habe allerdings bislang festgestellt, dass man ALLES (wenn man will) mindestens genausogut hinbekommen kann wie die Anderen - gleicher Aufwand möglicherweise vorausgesetzt ...
Ich kann mich aber in diesem Fall täuschen ...


----------



## MarkusP (1 März 2009)

> Und sowas willst du selber-stricken (bei Energiekosten in 6- oder 7-stelliger Höhe)?????


Wir haben insgesamt ca. 5 MW Anschlussleistung der Kompressoren. Die ganze Anlage braucht an die 10 MW. Da die Kompressoren insgesamt nur ca. 300 Stunden im Jahr in Betrieb sind, sind (zumindest) mir ev. Einsparungen durch ev. Last- und Leerläufe egal. Und wenn ein Kompressor einmal läuft, dann wird Luft gebraucht, die Applikation braucht davon mehr als genug.

Trotzdem Danke für Deine Info, ich muss jedoch bis morgen eine Lösung bieten können. 

LG


----------



## Lipperlandstern (1 März 2009)

MarkusP schrieb:


> Wir haben insgesamt ca. 5 MW Anschlussleistung der Kompressoren. Die ganze Anlage braucht an die 10 MW. Da die Kompressoren insgesamt nur ca. 300 Stunden im Jahr in Betrieb sind, sind (zumindest) mir ev. Einsparungen durch ev. Last- und Leerläufe egal. Und wenn ein Kompressor einmal läuft, dann wird Luft gebraucht, die Applikation braucht davon mehr als genug.
> 
> Trotzdem Danke für Deine Info, ich muss jedoch bis morgen eine Lösung bieten können.
> 
> LG


 
Bis morgen ist ja noch viel Zeit.... aber kannst du uns mal verraten was das für eine Anlage ist ??????


----------



## MarkusP (1 März 2009)

Anlage zur Erzeugung von Technischen Schnee.

LG


----------



## Larry Laffer (1 März 2009)

OK ...
wie bekommen wir nun deine Kuh vom Schneeberg herunter ?
Kommst du mit den Vorschlägen weiter ?


----------



## MarkusP (1 März 2009)

Im Prinzip schon, doch nehmen wir Deine und die Vorschläge von Lipperlandstern zu einem weiteren Gedankenexperiment:

450 kW
450 kW
320 kW
160 kW
160 kW

Bei Anforderung von 320 kW und Abarbeitung von oben nach unten, ist es klar und richtig, dass der 320 kW Kompressor angefordert wird.

Bei Anforderung von z.B. 410 kW, würden nach der Beschreibung von Lipperlandstern, so wie ich es verstanden habe, jedoch der 320 kW und der 160 kW Kompressor angefordert werden, was aber nicht richtig ist, da sollte auch der 450 kW Kompressor starten.

Bei Anforderung von 70 kW, würde gar keiner mehr starten.

Wie gesagt, es ist nicht so einfach, wie es aussieht.

Aber vielen Dank für Eure Anregungen, ich werde mir alles noch einmal durch den Kopf gehen lassen, sonst kann ich immer noch dem Kunden den Airleader empfehlen. Der scheint ja wirklich sehr gut zu sein.

Was mein Kunde dazu sagen wird, weiß ich jetzt schon.

Aber bis morgen ist noch viel Zeit...

LG


----------



## Larry Laffer (1 März 2009)

MarkusP schrieb:


> Bei Anforderung von z.B. 410 kW, würden nach der Beschreibung von Lipperlandstern, so wie ich es verstanden habe, jedoch der 320 kW und der 160 kW Kompressor angefordert werden, was aber nicht richtig ist, da sollte auch der 450 kW Kompressor starten.
> 
> Bei Anforderung von 70 kW, würde gar keiner mehr starten.



Ich würde bei einer Summenbildung prüfen, welcher Wert am nächsten an meinem Wunschziel dran ist. Im konkreten Fall vorheriger Wert kontra Summe der folgenden. Damit hättest du dann auch das 70kW-Thema erschlagen.

Aber du hast schon recht. Einfach ist es nicht ... das sagt ja auch schon die Überschrift dieses Thread aus ...


----------



## Lipperlandstern (1 März 2009)

Um die 70kW zu Erfüllen ist ja nun wirklich nur eine Bedingung zu erfüllen.... ist der kleinste Kompressor zu klein dann starte den kleinsten Kompressor...

aber mit der anderen Bedingungen hast du schon recht... da wäre schon noch einiges an Aufwand zu betrieben... aber unlösbar ist es nicht.

Viel Spass beim basteln.....


----------



## MarkusP (1 März 2009)

*Vielen Dank an Alle*

Recht herzlichen Dank an Alle nochmal!

Mich beruhigt es, dass wir offenbar einer Meinung sind, dass es eben nicht ganz einfach ist. Hier ist es eben immer dann, wenn man glaubt eine Lösung zu haben, dies dann testet, und dann draufkommt, dass es bei irgendeinem Fall wieder nicht klappt.

Schönen Abend, ich muss mir noch für morgen eine gute Ausrede einfallen lassen.

Liebe Grüße


----------



## argv_user (1 März 2009)

Das ist das klassische Rucksackproblem, und das ist NP-vollständig.
Schau mal mit diesem Stichwort in die Wikipedia. Dann kommst Du
eventuell auch auf ein Argument, warum es mit der SPS nicht unbedingt
machbar ist (zumindest nicht in einem Zyklus).

Ich könnte mir denken, dass in den Geräten von Airleader die dynamische
Programmierung werkelt...


----------



## MarkusP (1 März 2009)

*...vielleicht doch nicht so dumm bin*



> Das ist das klassische Rucksackproblem, und das ist NP-vollständig.
> Schau mal mit diesem Stichwort in die Wikipedia. Dann kommst Du
> eventuell auch auf ein Argument, warum es mit der SPS nicht unbedingt
> machbar ist (zumindest nicht in einem Zyklus).


 
Danke für Deine Anregung. Wenn ich nun so meinen vor ca. 2 Stunden begonnen Code so betrachte, ähnelt der sehr dem von Wikipidea. Zumdindest bin ich wieder bei meinen verschachtelten Schleifen gelandet und mehrdimensionalen Array. Ich wollte eben das Problem nicht ausprogrammieren, sondern irgendwie mathematisch lösen.



> ... Dann kommst Du eventuell auch auf ein Argument, warum es mit der SPS nicht unbedingt machbar ist (zumindest nicht in einem Zyklus).


 
Dürfte mit Codesys kein Problem sein, und die SPS ist schnell genug.

Also zurük zum Start.


Dynamische Programmierung, Sachen gibt's...

LG


----------



## argv_user (1 März 2009)

Ja richtig, mit 16 Kompressoren müsste es noch gehen.
Wünsche Dir noch viel Spaß, ich darf jetzt zum Abendessen.


----------



## MarkusP (1 März 2009)

Für all' jene Tüftler die das Thema rein prinzipiell weiter interessiert, hier dazu ein interessanter Link: http://www-i1.informatik.rwth-aachen.de/~algorithmus/algo15.php 

Das selbige Thema müsste jeder, der mit Verpackungsmaschinen o.ä. arbeitet, schon mal gestreift haben.

Nun muss ich es "nur" noch umsetzen.

LG


----------



## bike (1 März 2009)

Also ich habe so etwas einmal für Verdichter- und Vakuummaschinen gemacht.
Ich habe einen Faktor mir gebildet, der in allen Kopressoren entahlten ist. 
Nicht u klein, damit die Multiplikation und das Suchen nicht zu aufwendig wird.
Also in deinem Fall würde ich den Faktor  8 zunext annehmen.
Die notwendige Anforderung durch den Faktor teilen und dann schauen wieviele Teile du brauchst..
Mit diesem Multiplikator dann aus der Lister der vorhandenen Maschinen aussuchen. Werden 320 kw gebraucht werden, dann kann ggF 2X160kW oder einer mit 320 kW zugeschalten werden.
In einem DB steht drin welche Kompressoren verfügbar sind mit deren Faktor.
Dann abwechselnd entsprechend zuschalten.

Vielleicht hilft es

bike


----------



## zotos (1 März 2009)

Schöne Aufgabe!
Erinnert mich an die Aufgabe die Steve81 bewältigt hat.
http://sps-forum.de/showthread.php?t=16981

Bis auf die Zeitvorgabe (MORGEN!) finde ich das nicht weiter schwer.


----------



## MarkusP (1 März 2009)

Ja, ich hätte vielleicht einmal die Suchfunktion bemühen sollen. Aber ich wusste nicht, wonach ich suchen hätte sollen...

Bis morgen schaffe ich das locker, ich habe mir nun nämlich einen Zettel geschrieben, bis wann ich das Problem gelöst haben muss, und da steht als Termin: Morgen *ROFL*(so ist das halt, nach der angekündigten Menge Bier)

Nochmal vielen Dank für Eure Hilfe,

Ihr seid SUPER.


----------



## zotos (2 März 2009)

MarkusP schrieb:


> Ja, ich hätte vielleicht einmal die Suchfunktion bemühen sollen. Aber ich wusste nicht, wonach ich suchen hätte sollen...
> 
> Bis morgen schaffe ich das locker, ich habe mir nun nämlich einen Zettel geschrieben, bis wann ich das Problem gelöst haben muss, und da steht als Termin: Morgen *ROFL*(so ist das halt, nach der angekündigten Menge Bier)
> 
> ...



So jetzt ist quasi morgen und ich geh ins Bett. Im Anhang findest Du eine Quick and Dirty Lösung (der Code ist extrem Lang und viel Copy Paste).

Sind auch sicher noch einige Käfer drin.


----------



## MarkusP (2 März 2009)

*D a n k e*

Zotos, Du bist der Wahnsinn. Da Dank Dir nun heute morgen ist, werde ich das beim Kunden gleich austesten.
:TOOL:

Ich werde Dir Bescheid geben.

Schlaf' Dich schön aus,

LG


----------



## zotos (2 März 2009)

Ich finde die Umsetzung ja noch nicht so prickelnd. Das ganze basiert auf dem Code aus dem Thread von Steve81 da ging es aber um die Kombination 2..4 Bits von 20 und nicht wie hier 1..16 von 16.

Der Grundgedanke ist das man zu erst alle Kombinationen mit 1Bit aus 16Bits ausprobiert (sprich jeder Kompressor alleine) dann 2Bits aus 16Bits (immer zwei Kompressoren) usw. Somit bekommt man automatisch den Vorrang von wenigen Kompressoren gegenüber mehreren Kompressoren bei gleicher Gesamtleistung. 
Ich hatte gestern keinen Bock mehr was zu Böcken im Quellcode geführt hat. 

Min- und Max-Leistung berücksichtigen (weniger gefordert als der kleinste Kompressor und mehr Leistung als alle zusammen).
Auch die Abbruchbedingung wenn man im Toleranzfenster ist war schludrig. Ich hab die Sachen mal ausgebügelt und diesem Thread angehängt. Ich war und bin auch zufaul um die Kommentare anzupassen ich habe mich darauf beschränkt die Bitübergänge richtig zu bezeichnen (von 1zu2 Bits usw.)

Der Code basiert aber immer noch auf der Abfrage einzellner Bits was den Code fürchterlich aufbläht. Vielleicht hat einer in Mathe besser aufgepasst und kann mir mal einen Tipp geben:
Wie kann ich noch nacheinander erst alle Kombinationen aus einem dann aus zwei und dann aus drei Bits in einem WORD durchspielen?


----------



## MarkusP (2 März 2009)

@Zotos

Ich bin zurück vom Kunden, und habe Dein Programm so wie es ist, nach einigen Vorabtest's im Büro, einfach mal so implementiert. Im Prinzip schaut es ganz gut aus, speziell von der Inbetriebnahme-Visu bin ich hin und weg. Ich habe gestern auch noch den von Dir genannten Thread überflogen, um Eure ursprüngliche Aufgabe zu verstehen. Beim jetzigen Code besteht nun folgendes Problem: Wird eine Leistung angefordert, die kleiner als die Hälfte der geringsten zur Verfügung stehenden ist, wird gar keine Leistung mehr angefordert. Aber, keinen Kompressor zu starten, macht sich nicht so gut.. Da aber je nach Vergügbarkeit von Kompressoren sich die kleinste Leistung ändern kann, habe ich mein herumgebastele an Deinem Code sehr schnell wieder beendet. Wäre diese Änderung für Dich viel Arbeit? Muss natürlich nicht umsonst sein!
So weit ich Deinen Code durchschaue, werden nun alle Möglichkeiten "durchprobiert", bewertet und davon das Ergebnis abgeleitet. Ist natürlich Zykluszeit raubend, wobei ich bei Ausführung des Codes eine lächerliche Erhöhung der Zykluszeit von ca. 0,6 ms auf max. 1,5 ms feststellen konnte! Hast Du "hobbymäßig" schon einmal über die Lösung über dynamische Programmierung unter Verwendung des Algorithmus von Nemhauser und Ullmann nachgedacht? (wurde bereits 1969 erfunden) Was ich u.a. bei Einsatz eines solchen Algorythmus sowieso nicht verstehe, ist die zweite Liste mit der Bewertung der Kombinationen. Aber ist nur so ein Gedanke...

Während ich das hier schreibe, habe ich gerade gesehen, daß Du einen weiteren Beitrag erstellt hast.

Danke nochmal inzwischen, vielleicht kann ich mich ja irgendwie revanchieren?

Liebe Grüße


----------



## Jodokus (2 März 2009)

Was ist denn eigentlich das Entscheidungskriterium, wenn kein Wert so richtig passt? Ich mein wenn eine Kombination von zweien um 20 daneben liegt eine Kombination aus dreien um 15. Welche soll dann genonmmen werden?


----------



## Oberchefe (2 März 2009)

> Was ist denn eigentlich das Entscheidungskriterium, wenn kein Wert so richtig passt?



Das sollte der Parameter mit der Toleranz machen wenn ich das Programm richtig verstanden habe.


----------



## zotos (3 März 2009)

Jodokus schrieb:


> Was ist denn eigentlich das Entscheidungskriterium, wenn kein Wert so richtig passt? Ich mein wenn eine Kombination von zweien um 20 daneben liegt eine Kombination aus dreien um 15. Welche soll dann genonmmen werden?



Wie der Oberchefe bereits angemerkt hat erledigt das der Parameter mit der Toleranz. Wenn die Toleranz in dem Beispiel >= 20 ist werden zwei Kompressoren angeworfen, wenn die Toleranz kleiner ist werden die drei verwendet. Wenn die zwei Kompressoren bereits im Toleranzbereich liegen wird auch nicht weiter gesucht ob man mit 3,4,5... ein besseres Ergebnis erreichen könnte (die Suche bricht dann ab).


----------



## Jodokus (5 März 2009)

OK, ich habe mir das Programm nicht angesehn (mea culpa), liegt aber vielleicht daran, dass ich nicht recht weiß mit welchem Werkzeug ich Dateien mit der Endung .pro zu öffnen habe.

OK, noch ne Zusatzfrage: Wenn ich es recht verstanden habe werden bis zu vier Ausgänge (Pneumatikanschlüsse) bedient. Werden alle mit einem mal angesteuert oder kann sich der Solldruck auch mit der Zeit ändern. D.h. Anschluss A gibt 430, nach 3 Stunden wird er auf 350 reduziert, die anderen Sollwerte bleiben aber so wie sie waren. Dann müsste man doch entweder alles komplett neu berechnen oder von der verbleibenden Kompressoren die passenden Auswählen.


----------



## Oberchefe (6 März 2009)

> liegt aber vielleicht daran, dass ich nicht recht weiß mit welchem Werkzeug ich Dateien mit der Endung .pro zu öffnen habe.



CoDeSys (Werbebanner ganz rechts oben) wird dafür verwendet.


----------



## Jodokus (7 März 2009)

Oberchefe schrieb:


> CoDeSys (Werbebanner ganz rechts oben) wird dafür verwendet.



Hm, ich habe CoDeSys V3.1 SP 3 Patch 1, aber damit lässt es ich nicht öffnen. Was mach ich falsch?


----------



## MSB (7 März 2009)

In diesem Sinne nur, das dies eine Software für Codesys V2.3 ist.

V3 ist momentan in der Praxis noch eher selten anzutreffen.

Mfg
Manuel


----------



## Jodokus (7 März 2009)

MSB schrieb:


> In diesem Sinne nur, das dies eine Software für Codesys V2.3 ist.
> 
> V3 ist momentan in der Praxis noch eher selten anzutreffen.
> 
> ...



Danke!, damit geht es. Jetzt werde ich mein erstes SPS-Programm analysieren.

Jodokus


----------



## Jodokus (8 März 2009)

MarkusP schrieb:


> Ich bin ja jetzt nicht unbedingt das Mathematikgenie, aber wären alle 16 Kompressoren von unterschiedlicher Leistung, gäbe es 65536 Kombinationsmöglichkeiten.
> 
> Da ja die Einschränkung des gleichen Typs pro Gruppe besteht, gibt es innerhalb der Gruppe max. 5 Möglichkeiten. (keiner, einer, zwei, drei, vier) Wie vermehrt sich das nun durch die Tatsache, dass es vier Gruppen gibt? Ich glaube es sind 5 hoch 4 (=625) Möglichkeiten. Diese Anzahl übersteigt leicht meine gedankliche Vorstellungskraft für einen Lösungsansatz.
> 
> Gruß




So, ich denke das dieser Ansatz ganz richtig ist. Ich habe das mal umgesetzt und ein Tabelle mit den 624 Möglichkeiten (alle 'aus' ist keine wirkliche Möglichkeit!) zusammen gestellt. Noch eine Funktion zur Berechnung des Luftdrucks geschrieben und kommen dann mit ein paar Zeilen Code aus. Muss das jetzt noch irgendwo hochladen.

Jodokus


----------



## zotos (8 März 2009)

Jodokus schrieb:


> ...Muss das jetzt noch irgendwo hochladen.



Das Hochladen von Dateien ist hier im Forum möglich siehe: 
Zusätzliche Einstellungen -> Dateien anhängen

---

Ich habe den Gedanken mit den Betriebsstunden mal in das Programm aufgenommen siehe Anhang.


----------



## Jodokus (8 März 2009)

OK, dann ist sie hier Angehängt. Eine Suche hat maximal 624 Durchläufe. Das ist weniger als 1/100 der bisherigen Lösung.

Jodokus


----------

