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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 29

Thema: Fifo Bit

  1. #1
    Registriert seit
    29.03.2007
    Beiträge
    123
    Danke
    17
    Erhielt 9 Danke für 9 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Kleine Denkaufgabe eher...

    Habe mir einen Fifo Speicher gebaut für Bits. Also, eine Warteschleife für Bits. Nutze ich falls mehrere Sachen auf ein Aggregat zugreifen oder sonstiges, damit sie auch in der richtigen Reihenfolge drankommen.

    Gelöst habe ich es mit einem FB, also in und Out Variablen wo ich jeweils 16 Bits anbinden kann (Struct). Jedem bit ist ein INT im FB zugeordnet wo drin gespeichert ist, an welcher Stelle dieses bit in der Warteschleife steht.

    So... funktioniert auch und so, alles wunderbar.


    Aaaaber, gestern kam mir die Idee, das es doch rein theoretisch auch mit EINEM INT funktionieren müsste. Da ich ja prinzipiell genug werte Speichern kann um jeder möglichen Reihenfolge der Bits einen Wert zuweisen zu können.

    Wäre halt noch schöner, da ich nur einen FC brauche mit einem Speicher.


    Nur... weiß noch nicht wie ichs umsetzen kann, das ich anhand dem Wert im INT dann ableiten kann, welches bit an welcher position ist.

    Ne Idee??
    Zitieren Zitieren Fifo Bit  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    ungetestet, aber könnte funktionieren

    Code:
    *
          L     16                          //16 bits hat ein INT
    next: T     #iLoopCount                 //in Schleifenzähler laden
          L     #iInput                     //die eine INT-Zahl
          L     W#16#1                      //mit einer 0000 0000 0000 0001
          UW                                //UND-Verknüpfen
          L     0                           //auf 0
          ==I                               //vergleichen
          SPBN  bit                         //wenn nicht 0 ist ein bit gefunden wurden
          L     #iInput                     //die eine INT-Zahl
          SRW   1                           //um eine Stelle nach rechts
          T     #iInput                     //speichern
          L     #iLoopCount                 //Schleifenzähler
          LOOP  next                        //dekrementieren und erneut durchlaufen
          SPA   end                         //kein bit gefunden - abbruch
    bit:  L     #iLoopCount                 //nach bit gefunden steht hier die position
          L     -1                          //also fast
          *I                                //y = -1 * x + 17
          +     17
          T     #iBitPosition               //position speichern
    end:  NOP   0
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #3
    Jordy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2007
    Beiträge
    123
    Danke
    17
    Erhielt 9 Danke für 9 Beiträge

    Standard

    Hmm... Nee.

    Wenn ichs richtig sehe, sagt mir das Stück Programm doch nur das wieivelte BIT gerade gesetzt ist, oder?

    Hat ja nichts mit meiner Warteschleife zu tun. Oder guck ich falsch??

    Ich will ja speichern, in welcher Reihenfolge welche bits gesetzt werden.

    Trotzdem danke!

  4. #4
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Jordy Beitrag anzeigen
    Wenn ichs richtig sehe, sagt mir das Stück Programm doch nur das wieivelte BIT gerade gesetzt ist, oder?
    ja, so hatte ich deine ausführungen da oben verstanden

    Zitat Zitat von Jordy Beitrag anzeigen
    Ich will ja speichern, in welcher Reihenfolge welche bits gesetzt werden.
    die reihenfolge, also: 4,8,2,3,9,11,12 ???

    und du das in einem INT ablegen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Zitat Zitat von Jordy Beitrag anzeigen
    Hmm... Nee.
    Ich will ja speichern, in welcher Reihenfolge welche bits gesetzt werden.
    das hat nichts mit einem FIFO zu tun ... oder jedenfalls nicht direkt ...
    Das kann dann dein aktueller Baustein auch nicht.
    Wenn du so etwas machen willst, dann mußt du dir entweder eine Struktur bauen, die die Anzahl deiner insgesamt möglichen Bits enthält und dann daraus ein ARRAY machen (ARRAY of Struct) und dies dann als FIFO verschieben ...
    oder ...
    du machst ein ARRAY of INT und speicherst in jedem neuen Element nicht das echte Bit, sondern dessen Nummer und schaltest diese Nummer hinterher bei der Ausgabe ggf. in deine Maske hinein ...

    Gruß
    LL

  6. #6
    Jordy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2007
    Beiträge
    123
    Danke
    17
    Erhielt 9 Danke für 9 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    ja, so hatte ich deine ausführungen da oben verstanden



    die reihenfolge, also: 4,8,2,3,9,11,12 ???

    und du das in einem INT ablegen

    Korrekt!

    Ja, wa sone Idee gestern, weil es ja reintheoretisch gehen würde. Wenn ich für jede Mögliche Reihenfolge einen Wert zuweise gehts ja. Suche halt ne Lösung wie man es machen könnte. Natürlich ohne alles mit Hand zu schreiben für jeden Wert


    Zitat Zitat von Larry Laffer Beitrag anzeigen
    das hat nichts mit einem FIFO zu tun ... oder jedenfalls nicht direkt ...
    Das kann dann dein aktueller Baustein auch nicht.
    Wenn du so etwas machen willst, dann mußt du dir entweder eine Struktur bauen, die die Anzahl deiner insgesamt möglichen Bits enthält und dann daraus ein ARRAY machen (ARRAY of Struct) und dies dann als FIFO verschieben ...
    oder ...
    du machst ein ARRAY of INT und speicherst in jedem neuen Element nicht das echte Bit, sondern dessen Nummer und schaltest diese Nummer hinterher bei der Ausgabe ggf. in deine Maske hinein ...

    Gruß
    LL
    Klar, kann er. So hab ich es ja gemacht. Sagte ich ja, für jedes Bit ein INT, worin ich die Position des Bits reinschreibe...

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Zitat Zitat von Jordy Beitrag anzeigen
    Klar, kann er. So hab ich es ja gemacht. Sagte ich ja, für jedes Bit ein INT, worin ich die Position des Bits reinschreibe...
    Stimmt ... du hast recht ... ich hatte falsch gelesen.
    In dem Fall ... der von dir beschrittene Weg ist auch der einzige Weg, der mir dazu einfällt (und wie ich es auch machen würde).
    Du kannst (darüber hinaus) auch nicht in einer Variablen mehrere Werte hinterlegen ... Einzige Alternative : STRING - aber das ist ja im Prinzip auch wieder ein ARRAY (of Char) ...

    Gruß
    LL

  8. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Jordy (26.06.2008)

  9. #8
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    die unterschiedlichen reihenfolgen passen definitiv nicht in ein INT, selbst wenn du jeder reihenfolge eine eigene nummer zuweist.

    mathematik -> kombinatorik -> permutation

    wir haben 16 objekte
    also gibt es für das erste objekt 16 möglichkeiten, für das zweite 15, das dritte 14 ....

    also insgesamt n! möglichkeiten

    16! = 2.09227899 × 10^13
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  10. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    Jordy (26.06.2008)

  11. #9
    Jordy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2007
    Beiträge
    123
    Danke
    17
    Erhielt 9 Danke für 9 Beiträge

    Standard

    Ja, vielen Dank euch beiden!! Dann bin ich doch beruhigt!!

    Ja, hast recht vierlagig!!! Wie komm ich eigentlich drauf, das die Werte in EIN INT passen?? Passt ja hinten und vorne nicht! Egal...

  12. #10
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Jordy Beitrag anzeigen
    Wie komm ich eigentlich drauf, das die Werte in EIN INT passen?? Passt ja hinten und vorne nicht! Egal...
    naja, auch wenn ich nicht denke, dass es wirklich komfortabler wird als die lösung, die du jetzt hast:

    wenn du byte-weise auswertest passt es in ein word: 8! = 40320 ...

    wie auch immer ... es ist und bleibt unpraktikabel, dass dann wieder zusammenzusetzen und überhaupt ... nö, nö, nö, das mag nicht gefallen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

Ähnliche Themen

  1. FIFO mit S7 ????
    Von moclam im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 24.10.2013, 10:43
  2. FIFO für Staustrecke
    Von element. im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 20.04.2010, 09:22
  3. Fifo S7
    Von stevexxx im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 18.03.2008, 14:45
  4. Scl-fifo
    Von johnij im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 12.11.2007, 08:16
  5. Fifo
    Von sweber im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 14.06.2007, 15:06

Lesezeichen

Berechtigungen

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