Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: Lagersystem

  1. #11
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Statt einer Integer-Variablen, wie im Beispiel, kannst du z.Bsp. eine Struct je Etagenplatz definieren. Darin gibts dann eine Variable für Belegt, Inhalt etc.
    Das ist die schönste, aber auch komplexeste Variante, die ist dann tatsächlich am Besten in SCL zu programmieren.

    Aber selbst mit der, im Moment abgespeicherten, Integer-Variablen, kann man ja schon so einiges anstellen. Du könntest 1 Byte für den Füllstand nutzen (falls mehrere Teile hineingelegt werden können) und 1 Byte für eine Teileinfo. Nimmst du eine DWord statt Int, hast du 4 Byte zur Vergügung.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  2. #12
    Registriert seit
    19.01.2007
    Beiträge
    69
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Standard

    An die Int Lösung wollte ich auch gerne ran! Nur mir fehlt noch die Umsetzung! Ich habe mal eine Zeichnung zum anschauen! In dem Beispiel ist z.b Zeile 2 Spalte 2 mit dem Wert 100 beschrieben! Ich dachte nun daran, den Wert mal zehn zu multiplizieren auf 1000 und somit ist sie leer!
    Würde sie den Wert 0 haben, würde es ja nicht gehen, weil die Fächer bestimmt seien sollen! Beim beschrieben würde sie dann wieder auf 100 dividiert und ist somit wieder belegt! Ich finde die Lösung aber selber sehr unelegant und da würde ich mich über einen andere Lösung freuen, um von meiner weg zu kommen oder ist das der richtige Weg so?

    Gruß
    Angehängte Grafiken Angehängte Grafiken

  3. #13
    Registriert seit
    19.01.2007
    Beiträge
    69
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Standard

    So nun habe ich mit einem DB und UDT rumprobiert und bin zu diesem Ergebnis gekommen!

    Wie kann ich den DB denn beschreiben! Der "Wert" sind ja feste definierte Werte die ich nur einmal eintragen muss! Und dann müsste ich in SCL ja nur nach den Werten suchen und den Wert "Belegt" verändern (True/False)! Wie macht man so eine suche in SCL, habe da sehr wenig mit gearbeitet, aber würde das gerne lernen!

    PS: Nur kurze Frage nebenbei, wofür steht := immer ? (IST GLEICH ???)

    Freue mich auf Antworten!
    Geändert von sr-83 (09.10.2007 um 18:31 Uhr)

  4. #14
    Registriert seit
    19.01.2007
    Beiträge
    69
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Standard

    mal wieder vergessen, den Anhang !
    Angehängte Grafiken Angehängte Grafiken

  5. #15
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von sr-83 Beitrag anzeigen
    So nun habe ich mit einem DB und UDT rumprobiert und bin zu diesem Ergebnis gekommen!

    Wie kann ich den DB denn beschreiben! Der "Wert" sind ja feste definierte Werte die ich nur einmal eintragen muss! Und dann müsste ich in SCL ja nur nach den Werten suchen und den Wert "Belegt" verändern (True/False)! Wie macht man so eine suche in SCL, habe da sehr wenig mit gearbeitet, aber würde das gerne lernen!

    PS: Nur kurze Frage nebenbei, wofür steht := immer ? (IST GLEICH ???)

    Freue mich auf Antworten!
    Korrekt, "Ist Gleich" als Zuweisung!

    Ich würde die UDT anders organisieren. Die Int für Zeile und Spalte brauchst du ja eigentlich gar nicht, die stecken doch in den Indizes schon drin.

    Ich würde es etwa so probieren:

    AWL-Quelle für DB12 (Name "Lager")
    Code:
    DATA_BLOCK DB 12
    TITLE =
    VERSION : 0.1
    
    
      STRUCT     
       Etage : ARRAY  [1 .. 10 ] OF STRUCT     
        Etagenplatz : ARRAY  [1 .. 10 ] OF STRUCT     
         belegt : BOOL ;    
         Inhalt : INT ;    
         Anzahl : INT ;    
        END_STRUCT ;    
       END_STRUCT ;    
      END_STRUCT ;    
    begin
    END_DATA_BLOCK
    SCL-Quelle für FC12 um mal den Zugriff zu zeigen:

    Code:
    FUNCTION FC12 : INT
    
    VAR_INPUT
       
    END_VAR
    
    VAR_TEMP
      // temporäre Variablen
      I,K: INT;
    END_VAR
    
    VAR_IN_OUT  
      
    END_VAR
    
      // Anweisungsteil
             
       I := 1;
       K := 1;
       
       "Lager".Etage[i].Etagenplatz[K].Belegt := True;
       "Lager".Etage[i].Etagenplatz[K].Inhalt := 100;
       "Lager".Etage[i].Etagenplatz[K].Anzahl := 3;
      ;
      FC12 := 100;
    END_FUNCTION
    Du kannst nun ein zwei ineinandergeschachtelten Schleifen, das gesamte "Lager" durchsuchen, indem die die Indizes I und K jeweils von 1 bis 10 laufen läßt.

    PS: Ich habs mal ohne UDT gemacht, die Struct kannst du natürlich auch als UDT verpacken.
    Geändert von Ralle (09.10.2007 um 19:09 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    sr-83 (09.10.2007)

  7. #16
    Registriert seit
    19.01.2007
    Beiträge
    69
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja die Struktur ist doch noch sehr viel besser.. EIN Danke...


    Ich möchte jetzt gerne ein Schleife starten und nach einen Wert suchen! Das ist doch sicherlich mit einer FOR-Anweisung relativ einfach oder? Mach ich dann einen Adressendurchlauf im DB bis der Wert gefunden ist! Ich kann ja immer paar Zeilen überspringen, weil ich ja nur nach den .Inhalt suche! Wie sieht dann die Abfrage in der Anweisung aus ?

  8. #17
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Code:
       FOR I := 1 TO 10 BY 1 DO
            FOR K := 1 TO 10 BY 1 DO
            // Anweisungsteil
                IF NOT "Lager".Etage[I].Etagenplatz[K].Belegt THEN
                    TOut := I;
                    KOut := K;
                END_IF;            
            END_FOR;
        END_FOR;
    Bringt dir zum Bsp. in TOut und KOut die Indizes des 1. unbelegten Faches, jeweils von 1 an gesucht.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  9. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    sr-83 (09.10.2007)

  10. #18
    Registriert seit
    19.01.2007
    Beiträge
    69
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke, nu ist mir das alles wesentlich klarer geworden! Vielen Dank

    Was ist denn genau ein UDT im Vergleich zum DB ?

  11. #19
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Hinter UDT steht im Step7-Manager "Datentyp".
    Im Grunde ist das ein Container für beliebige Daten. Diesen Container kann man in FB/FC-Variablendefinitionen und in DB einsetzen. Sie verhalten sich dann dort wie eine Struct, haben aber den Vorteil, daß man sie beliebig oft verwenden kann, also Schreibarbeit spart. Aber Vorsicht, wenn man später an der UDT rumfummelt, ändern sich die DB, und auch die Instanz-DB von FB, welche diese UDT verwenden. Diese müssen dann alle neu übersetzt werden.

    PS: Das mit dem Ändern, kann man natürlich auch als Vorteil sehen, je nach Anwendungsfall.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  12. #20
    Registriert seit
    19.01.2007
    Beiträge
    69
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das mit dem Array und der neuen Struktur hat mir ja schon sehr viel weitergeholfen und habe sehr viel draus gelernt ! Ich möchte das Lagersystem gerne auch visualisieren! Ich hatte das schon mal angesprochen in diesem Forum! Leider bin ich da noch nicht weiter gekommen!
    Ich möchte gerne mit einem TP 270 über eine Schaltfläche was aus dem Lager bekommen! Nur die Schaltflächen sollen anwählbar sein und über ein Start befehl nacheinander ausgegeben werden (Siehe bild).
    Nächstes Problem, mein Lager hat aber für ein und das gleiche Teil (mit gleichen Wert) 2-3 Plätze -> (3 mal das gleiche vorhanden in 3 einzelnen Fächern)! Der Button sollte grau hinterlegt werden, wenn kein einziges Teil mit dem Wert im Lager ist!

    Wie realisiere ich möglichst einfach so eine Routine?

    PS: Das blau hinterlegte, die sollen ausgegeben werden!
    Angehängte Grafiken Angehängte Grafiken

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •