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

Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 32

Thema: [Problem] 5-stellige Zahl auf 5 Bytes verteilen (1er/10er/100er/1000er/10000er)

  1. #21
    Avatar von diabolo150973
    diabolo150973 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.10.2004
    Ort
    zu Hause
    Beiträge
    1.041
    Danke
    370
    Erhielt 406 Danke für 274 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier könnte Ihre Werbung stehen...
    Angehängte Grafiken Angehängte Grafiken
    Geändert von diabolo150973 (22.02.2012 um 10:44 Uhr) Grund: Schwachsinn!!!
    Diese Signatur enthält Inhalte von WTF und ist in Deinem Land nicht verfügbar!

  2. #22
    Registriert seit
    15.04.2011
    Beiträge
    1.122
    Danke
    229
    Erhielt 208 Danke für 176 Beiträge

    Standard

    Ich habe es mal auf die ganz einfache Tour gelöst.

    Code:
    DATA_BLOCK DB 2
    TITLE =
    VERSION : 0.1
    
      STRUCT  
       Anfangszahl : DINT ; //Aufzuteilende Zahl
       Zehntausender : INT ; //Zehntausender Zahl
       Tausender : INT ; //Tausender Zahl
       Hunderter : INT ; //Hundert Zahl
       Zehner : INT ; //Zehner Zahl
       Einer : INT ; //Einer Zahl
      END_STRUCT ; 
    BEGIN
       Anfangszahl := L#6001; 
       Zehntausender := 0; 
       Tausender := 0; 
       Hunderter := 0; 
       Zehner := 0; 
       Einer := 0; 
    END_DATA_BLOCK
    FUNCTION FC 2 : VOID
    TITLE =
    VERSION : 0.1
    
    VAR_INPUT
      Anfangszahl : DINT ; //Aufzusplittende Zahl
    END_VAR
    VAR_OUTPUT
      Zehntausend : INT ; //Zehntausender Stelle
      Tausend : INT ; //Tausender Stelle
      Hundert : INT ; //Hunderter Stelle
      Zehner : INT ; //Zehner Stelle
      Einer : INT ; //Einer Stelle
    END_VAR
    VAR_TEMP
      Zwischenspeicher : DINT ; //Zwischenspeicher
    END_VAR
    BEGIN
    NETWORK
    TITLE =Initialisieren
          L     L#0; 
          T     #Zehntausend; 
          T     #Tausend; 
          T     #Hundert; 
          T     #Zehner; 
          T     #Einer; 
    NETWORK
    TITLE =Zehntausender Stelle ermitteln
          U(    ; 
          L     #Anfangszahl; 
          L     L#9999; 
          >D    ; 
          )     ; 
          SPBNB M001; 
          L     #Anfangszahl; 
          L     L#10000; 
          /D    ; 
          T     #Zehntausend; 
    M001: U(    ; 
          L     #Zehntausend; 
          L     L#0; 
          >D    ; 
          )     ; 
          SPBNB M002; 
          L     #Zehntausend; 
          L     L#10000; 
          *D    ; 
          T     #Zwischenspeicher; 
    M002: U(    ; 
          L     #Zehntausend; 
          L     L#0; 
          >D    ; 
          )     ; 
          SPBNB M003; 
          L     #Anfangszahl; 
          L     #Zwischenspeicher; 
          -D    ; 
          T     #Anfangszahl; 
    M003: NOP   0; 
    NETWORK
    TITLE =Tausender Stelle ermitteln
          U(    ; 
          L     #Anfangszahl; 
          L     L#999; 
          >D    ; 
          )     ; 
          SPBNB M004; 
          L     #Anfangszahl; 
          L     L#1000; 
          /D    ; 
          T     #Tausend; 
    M004: U(    ; 
          L     #Tausend; 
          L     L#0; 
          >D    ; 
          )     ; 
          SPBNB M005; 
          L     #Tausend; 
          L     L#1000; 
          *D    ; 
          T     #Zwischenspeicher; 
    M005: U(    ; 
          L     #Tausend; 
          L     L#0; 
          >D    ; 
          )     ; 
          SPBNB M006; 
          L     #Anfangszahl; 
          L     #Zwischenspeicher; 
          -D    ; 
          T     #Anfangszahl; 
    M006: NOP   0; 
    NETWORK
    TITLE =Hunderter Stelle ermitteln
          U(    ; 
          L     #Anfangszahl; 
          L     L#99; 
          >D    ; 
          )     ; 
          SPBNB M007; 
          L     #Anfangszahl; 
          L     L#100; 
          /D    ; 
          T     #Hundert; 
    M007: U(    ; 
          L     #Hundert; 
          L     L#0; 
          >D    ; 
          )     ; 
          SPBNB M008; 
          L     #Hundert; 
          L     L#100; 
          *D    ; 
          T     #Zwischenspeicher; 
    M008: U(    ; 
          L     #Hundert; 
          L     L#0; 
          >D    ; 
          )     ; 
          SPBNB M009; 
          L     #Anfangszahl; 
          L     #Zwischenspeicher; 
          -D    ; 
          T     #Anfangszahl; 
    M009: NOP   0; 
    NETWORK
    TITLE =Zehner Stelle ermitteln
          U(    ; 
          L     #Anfangszahl; 
          L     L#9; 
          >D    ; 
          )     ; 
          SPBNB M010; 
          L     #Anfangszahl; 
          L     L#10; 
          /D    ; 
          T     #Zehner; 
    M010: U(    ; 
          L     #Zehner; 
          L     L#0; 
          >D    ; 
          )     ; 
          SPBNB M011; 
          L     #Zehner; 
          L     L#10; 
          *D    ; 
          T     #Zwischenspeicher; 
    M011: U(    ; 
          L     #Zehner; 
          L     L#0; 
          >D    ; 
          )     ; 
          SPBNB M012; 
          L     #Anfangszahl; 
          L     #Zwischenspeicher; 
          -D    ; 
          T     #Anfangszahl; 
    M012: NOP   0; 
    NETWORK
    TITLE =Einer Stelle ermitteln
     
          L     #Anfangszahl; 
          T     #Einer; 
    END_FUNCTION
    Vielleicht ist es ja so für Dich verständlicher.
    Gruß
    190B

  3. Folgender Benutzer sagt Danke zu 190B für den nützlichen Beitrag:

    diabolo150973 (22.02.2012)

  4. #23
    Registriert seit
    28.02.2006
    Ort
    Ostsee 5 min zum Strand
    Beiträge
    780
    Danke
    92
    Erhielt 110 Danke für 98 Beiträge

    Standard

    Moin,

    Lipperlandstern hat es dir doch schon geschrieben, ohne +I

    Code:
    
          L     #Deine Eingangszahl  // INT       
          L     1000       
          MOD          
          T     #MOD_100      
          L     100       
          MOD          
          T     #MOD_10     
          L     10        
          MOD          
          T     #MOD_1        
    
          L     #Deine Eingangszahl       
          L     1000       
          /I            
          T     #Byte_1_Stelle  // 1. Stelle      
         
          L     #MOD_100      
          L     100       
          /I             
          T     #Byte_2_Stelle   // 2. Stelle       
    
          L     #MOD_10       
          L     10       
          /I            
          T     #Byte_3_Stelle   // 3. Stelle        
    
          L     #MOD_1  // 4. Stelle         
          T     #Byte_4_Stelle   // 4. Stelle
    Geändert von Nordischerjung (22.02.2012 um 12:03 Uhr) Grund: Ups, Fehler in der letzten Zeile
    Gruß von der Ostsee

    Nordischerjung
    _____________________

    Wenn man seinem Paßbild ähnlich zu sehen beginnt, sollte man schleunigst Urlaub machen. (Vico Torriani, schw. Entertainer)

    Ich habe eine Diät gemacht und fettem Essen und Alkohol abgeschworen - in zwei Wochen verlor ich 14 Tage. (Joe E. Lewis)

  5. Folgender Benutzer sagt Danke zu Nordischerjung für den nützlichen Beitrag:

    diabolo150973 (22.02.2012)

  6. #24
    Avatar von diabolo150973
    diabolo150973 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.10.2004
    Ort
    zu Hause
    Beiträge
    1.041
    Danke
    370
    Erhielt 406 Danke für 274 Beiträge

    Standard

    Zitat Zitat von Nordischerjung Beitrag anzeigen
    Moin,

    Lipperlandstern hat es dir doch schon geschrieben, ohne +I

    Hallo,

    ich habe doch gar kein "+I" drin...oder?

    Aber ich komme irgendwie nicht über 255 hinweg... ab 256 schreibt er mir eine 0 in die Hunderter.
    Wenn ich dann statt BYTE ein WORD nehme, klappt gar nix mehr.

    @190B: So einfach finde ich das gar nicht...

    Ich muss auch leider zugeben, dass Ihr wahrscheinlich einiges an Grundwissen voraussetzt, dass bei mir teilweise nicht gegeben ist. Ich wurde mit dem Ding hier im wahrsten Sinne des Wortes ins kalte Wasser geschmissen und muss jetzt zusehen, wie ich damit klarkomme. Ich weiß Eure Hilfe und Geduld sehr zu schätzen und freue mich über jeden Tipp, der mich in die richtige Richtung treibt, aber für mich ist das hier fast alles Neuland!


    Gruß,

    dia
    Diese Signatur enthält Inhalte von WTF und ist in Deinem Land nicht verfügbar!

  7. #25
    Avatar von diabolo150973
    diabolo150973 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.10.2004
    Ort
    zu Hause
    Beiträge
    1.041
    Danke
    370
    Erhielt 406 Danke für 274 Beiträge

    Standard

    Ich hab's!!!

    Ich hatte einen kleinen Fehler drin...
    Nun haut es hin!!!

    Meine Fresse, war das eine schwere Geburt!!!

    Danke, danke, danke!!!

    Gruß,

    dia
    Diese Signatur enthält Inhalte von WTF und ist in Deinem Land nicht verfügbar!

  8. #26
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.202
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Eigentlich ist das Zerlegen einer Zahl in seine Dezimalziffern nur ein bißchen Bit-"geschubse".
    Dafür gibt es verschiedene bewährte und effiziente Verfahren. Und viele weitere Lösungen, wie man es auch noch machen kann, wenn die Verständlichkeit des Algorithmus wichtiger ist als seine Effizienz.

    1. bietet sich das Verfahren der Ziffern-Abspaltung von hinten nach vorn durch fortwährende Division mit 10 an (ähnlich Lipperlandstern). Der Divisionsrest (MOD) ist die abgespaltene hinterste Ziffer, mit dem Quotient wird weitergerechnet. Dieses Verfahren eignet sich ganz allgemein gut zur Zerlegung von Zahlen aus Stellenwert-Zahlensystemen mit verschiedener Basis.

    2. kann man die Zahl in BCD umwandeln und danach die 4-Bit-Nibbles auf je 8 Bit erweitern (ähnlich Larry Laffer).
    Hier mal eine Zerlegung einer 5-stelligen Zahl (DINT) in 5 Dezimalziffern:
    Code:
          L     #DINT_Zahl                  // 0 ... 12345 ... 99999
          DTB
          RLD   16
          T     #Byte_Stelle_1
    
          SLW   4
          RLD   4
          T     #Byte_Stelle_2
    
          SLW   4
          RLD   4
          T     #Byte_Stelle_3
    
          SLW   4
          RLD   4
          T     #Byte_Stelle_4
    
          SLW   4
          RLD   4
          T     #Byte_Stelle_5
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    diabolo150973 (22.02.2012)

  10. #27
    Registriert seit
    08.08.2007
    Ort
    Süd-Süd-Deutschland (CH)
    Beiträge
    220
    Danke
    29
    Erhielt 27 Danke für 21 Beiträge

    Standard

    Wie wärs mal mit:

    - Zahl in String wandeln....
    - String in einzelne Zeichen aufteilen....
    - Zeichen zurück wandeln....
    - In Bytes schreiben....

    Achja, bevor mir jemand an die Grugel will...


    </Ironiemodus>
    "Hätte ich das gewusst, hätte ich einen anderen Beruf gelernt." - "Hast Du gelernt diese Scheisse?"
    (Zitat aus Knockin' on Heaven's Door)

    "Kommentare? Wieso? Steht doch alles im Code..!"

    Avatar erstellt auf www.sp-studio.de

  11. #28
    Avatar von diabolo150973
    diabolo150973 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.10.2004
    Ort
    zu Hause
    Beiträge
    1.041
    Danke
    370
    Erhielt 406 Danke für 274 Beiträge

    Standard

    Zitat Zitat von Schnick und Schnack Beitrag anzeigen
    Wie wärs mal mit:

    - Zahl in String wandeln....
    - String in einzelne Zeichen aufteilen....
    - Zeichen zurück wandeln....
    - In Bytes schreiben....

    Achja, bevor mir jemand an die Grugel will...


    </Ironiemodus>
    Die Idee hatte meine kleine Tochter auch... aber wir haben es dann verworfen...
    Diese Signatur enthält Inhalte von WTF und ist in Deinem Land nicht verfügbar!

  12. #29
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von diabolo150973 Beitrag anzeigen
    Die Idee hatte meine kleine Tochter auch... aber wir haben es dann verworfen...
    Nicht zu vergessen, seine kleine Tochter ist 27 Jahre alt und Informatikerin ... oder wars BWL ????
    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

  13. #30
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @Ralle:
    Ich denke mit den 27 Jahren ist das dann doch eher seine Frau ...

Ähnliche Themen

  1. Antworten: 25
    Letzter Beitrag: 06.07.2010, 23:25
  2. Antworten: 18
    Letzter Beitrag: 17.10.2008, 20:30
  3. AWL: Dez Zahl auf 10er Potenzen Zerlegen
    Von maxi im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 29.01.2008, 22:08
  4. 5-stellige ascii zahl in normale zahl umwandeln
    Von Anonymous im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 04.01.2006, 16:12
  5. Wort-Adressierung in 1er Schritten ?
    Von Lars Weiß im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 24.10.2005, 00:11

Lesezeichen

Berechtigungen

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