[VB] wie lege ich die Inhalte eines offenen Array hintereinander?

So eine Tagesproduktion liegt so bei 300-1000 Leisten, gefiltert auf einen
Leistentyp können das schon mal bis zu 50-90 werden. Aber die durchläufe
würden (dürfen) nie die große Anzahl erreichen weil die Werkstücke so zwischen
450-1200mm liegen und die leisten um die 2500mm.

Wenn ich zb 10 x 450mm Werkstücke habe, kann ich ja nur 5 hintereinander
legen, die anderen 5 passen ja nicht mehr. Also hätte ich ja schon von 10
Durchläufen 5 gespart.

Man muss also die Kombinationen aus 2, 3, 4 und 5 Einzelwerten überprüfen.

Bei 90 Werten für die Werkstücke kommt man auf die folgende Anzahl von Kombinationen (Lottoformel):

Code:
Kombinationen 2 Werte aus 90 Werten
 
       90!
K = -------- = 4.005
    88! * 2!
 
Kombinationen 3 Werte aus 90 Werten
 
       90!
K = -------- = 117.480
     87! * 3!
 
Kombinationen 4 Werte aus 90 Werten
 
       90!
K = -------- = 2.555.190
    86! * 4!
 
Kombinationen 5 Werte aus 90 Werten
 
       90!
K = -------- = 43.949.268
    85! * 5!
 
Summer Kombinationen
 
K = 46.625.943

Gruß Kai
 
Hallo Helmut,
jetzt mal ungeachtet der Durchläufe etc.
Nach meiner Meinung muß die Quelle deiner Teile-Liste ja etwas wie eine Datenbank sein. Eine komfortable Bearbeitung dieser Liste ist durch eine (Siemens-) Visu m.E. nicht zu leisten. Dazu kommt dann auch noch, dass es ja sein kann, dass der Bediener einen bestimmten Leistentyp vorrangig gar nicht haben will. Ich könnte mir hier vorstellen, dass der Bediener festlegt, dass er vorrangig 1200er und 900er Leisten haben will und das die anderen aus der Liste quasi als Lückenfüller verwendet werden sollen. Außerdem müßte eine bereits gefertigte Leiste in der Soll-Stückzahl reduziert bzw. ganz aus der Liste ausgetragen werden.

Alles das spricht für mich für ein PC-Programm, dass entsprechend der Vorgabe seine Ergebnisse z.B. in den DB der SPS übermittelt wo sie dann abgearbeitet werden. Das genannte PC-Programm (das könnte dann ja auch in VB erstellt werden) hätte dann auch nicht mehr ganz so große Probleme mit der ggf. exponentiell ansteigenden Anzahl von Schleifendurchläufen und wäre vom Bediener wahrscheinlich auch leichter zu handhaben ...

Gruß
Larry
 
Hallo Helmut,
jetzt mal ungeachtet der Durchläufe etc.
Nach meiner Meinung muß die Quelle deiner Teile-Liste ja etwas wie eine Datenbank sein. Eine komfortable Bearbeitung dieser Liste ist durch eine (Siemens-) Visu m.E. nicht zu leisten. Dazu kommt dann auch noch, dass es ja sein kann, dass der Bediener einen bestimmten Leistentyp vorrangig gar nicht haben will. Ich könnte mir hier vorstellen, dass der Bediener festlegt, dass er vorrangig 1200er und 900er Leisten haben will und das die anderen aus der Liste quasi als Lückenfüller verwendet werden sollen. Außerdem müßte eine bereits gefertigte Leiste in der Soll-Stückzahl reduziert bzw. ganz aus der Liste ausgetragen werden.

Das ist nicht das Problemm oder gerade weil ich das so haben möchte, will
ich das ganze ja aus flexibel raus lösen. Es ist so weit, das der Bediener
sehr konfortabel filtern kann.

So sieht eine komplette Liste aus, da kann er einfach drin scrollen,
das wäre dann die echte Tagesproduktion von 384 Teilen
Pulk_1.JPG

hier als Datei, wie ich die Daten bekomme
Anhang anzeigen RMW_1101_20110104_001.txt

möchte er Filtern kann er die auswählen und somit sagen ich möchte jetzt
die Sorte Leisten schneiden weil ich sie gerade an der Maschine habe oder
er möchte einen bestimmten Auftrag vorziehen.
Pulk_4.JPG

Hier wird jetzt mal der Filter ausgewählt, für Profil "28", Variante "KB" und
"nicht geschnitene Leisten", da die Leisten die geschnitten wurden ab-
gehackt werden und nicht merh Optimiert werden. Den Hacken kann der
Bediener wieder raus nehmen, falls er die Leiste nocheinmal schneiden
muss (ist halt runtergefallen). Welcher Filter gesetzt ist sieht er an den
kleinen grünen Dreiecken in der Spaltenüberschrift, wenn ein Filter nichts
gefunden hat wird das Dreieck rot.
Pulk_5.JPG


Ich möchte folgendes erreichen:
  • Es soll alles aus flexibel heraus laufen, da ich den Bediener da nicht
    rauslassen möchte und er in der Windowsebene rumpflückt.
  • Eine externe Optimierung würde ja die ganze Tagesproduktion
    Optimieren und die müsste dann wahrscheinlich so ablaufen, er
    kann dann nicht während der Produktion mal eben schnell auf
    wünsche aus der Fertigung reagieren ohne erneut mit dem Fremd-
    programm zu Optimieren.
  • Wenn eine Leiste mal wirklich neu geschnitten werden muss, kann
    er das sofort machen und dann ganz normal weiter produzieren
    oder diese Leiste einfach erneut, durch die flexibel Optimierung
    laufen lassen.
Zur Zeit kämpfe ich damit erstmal den Code von Tom in VB umzuwandeln,
ich komme nicht ganz mit dem Syntax klar.
 
Hallo Helmut,
hier mal der Code von Thomas in VB :
Code:
Sub printArr(int *arr, int len)

    for i = 1 to len
        printf("%d ", arr[i])  // gibt das Ergebnis aus
    next 
    printf("\n")
end sub

Sub main

    dim len as Integer
    const anzahl as Integer = 5
    dim i as integer = 1
    dim brk as integer = 0 

    /* Array muss so groß wie die Anzahl der Zahlen+1 sein, Index 0 nicht belegt */
    dim num[anzahl+1] as integer 
    /* erster Wert muss so ausgegeben werden */
    num[1] = 1
    len = 1
    printArr(num, len)  
    repeat 
        if (num[len] >= anzahl) then
            len=len-1
            num[len]=num[len]+1
        else 
            len=len+1
            num[len] = num[len-1] + 1
        end if

        if (num[2] >= anzahl) then brk = 1
        
        printArr(num, len);  
    until brk<>0  
      
    end sub
}
Ob dir das aber hilft weiß ich nicht ...

Gruß
Larry

Nachsatz:
Ich weiß jetzt nicht, ob Repeat-Until in Flex machbar ist - aber ich glaube, du erkennst, wo es hingehen soll ...
Es gibt auf jeden Fall etwas äquivalentes ...
 
Zuletzt bearbeitet:
... wenn du das alles in Flex löst, gelöst hast oder lösen willst - Hut ab ...!!!

Ich wollte noch mal ein kleines Feedback geben und für die Hilfestellung
bedanken. Also ich habe das Projekt abgeschlossen und es funktioniert gut.
Die Reaktionszeiten bzw die Antwortzeit der Optiemierung ist wirklich sehr
schnell und mehr als zufriedenstellend. Obwohl der Rechner pro sec. so ca.
500 Möglichkeiten schafft dh bei 30 Werkstücken müsste man 12 Tage warten,
habe ich es so hinbekommen das die Optimierung, selbst bei über 100 Werkstücken
in der Praxis wirklich nur 1-2 sec läuft, genauso habe ich es mir vorgestellt.
Der anfangs sehr skeptische Maschinbediener, ist sehr zufrieden, da er sehr
Komfortabel auf Produktionsanforderungen reagieren kann.
 
Zurück
Oben