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

Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte
Ergebnis 31 bis 40 von 49

Thema: Addierer

  1. #31
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von _Praktikant_ Beitrag anzeigen
    1. Was ist mit T #Zaehlvar
    passiert bzw. wie/wozu wird die verarbeitet?
    Das war nur ein Anfangsbeispiel mit Zaehlvar als Zwischenmerker

    Statt

    T #Zahelvar
    L #ZaehlVar
    +AR1

    gleich

    +AR1

    Zitat Zitat von _Praktikant_ Beitrag anzeigen
    2. Ist doch der bitweise durchlauf der zahl (wie die andere möglichkeit von onkel)?
    Ja genau, das hast du richtig erkannt und damit schon mal eine ganze Menge verstanden . Wie ich schon schrieb ist Onkel ein wenig anders herangegangen, das Ergebnis ist das Selbe.
    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. #32
    Avatar von _Praktikant_
    _Praktikant_ ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.08.2007
    Ort
    FH
    Beiträge
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    hier mal ein versuch von mir:
    Code:
     L     #Summand_1
          T     #Summand1_t
          L     #Summand_2
          T     #Summand2_t
          L     P##Summand1_t
          LAR1  
          L     P##Summand2_t
          LAR2  
          U     #Uebertrag
          R     #Uebertrag
          L     32
    L001: T     #Schleifenzaehler
    // Binärergebnis unter Berücksichtigung des Übertrag
          X      [AR1,P#0.0]
          X      [AR2,P#0.0]
          X     #Uebertrag
          =     #Ergebnis_t                 // Ergebnisbit
    // Übertrag
          U      [AR1,P#0.0]
          O      [AR2,P#0.0]
          U     #Uebertrag                  //alter Übertrag
          O(    
          U      [AR1,P#0.0]
          U      [AR2,P#0.0]
          )     
          O(    
          U      [AR1,P#0.0]
          U      [AR2,P#0.0]
          U     #Uebertrag                  //alter Übertrag
          )     
          =     #Uebertrag                  //neuer Übertrag
          U     #Ergebnis_t
          =      [AR2,P#0.0]                // am Ende steht die Summe in AR2
          +AR1  P#0.1
          +AR2  P#0.1
          L     #Schleifenzaehler
          LOOP  L001
          TAR2  
          T     #Ergebnis
    Ok oder nix kapiert?!?
    Das speichern und wiederherstellen des AR hab ich noch nicht rausgefunden bzw. ist mir die funktion noch nicht klar;
    gibt es ein bsp irgendwo?

    @gravieren
    Die anderen Lösungen wären zunächst bestimmt auch ok, aber da ich ind.Adr. weiterhin brauchen werde, sollte ich mich gleich damit befassen.

  3. #33
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Hier mal ein paar Anmerkungen von mir:

    1. Ich würde die Berechnung des Übertrags etwas anders machen, siehe hierzu:

    http://de.wikipedia.org/wiki/Halbaddierer

    http://de.wikipedia.org/wiki/Volladdierer


    2. Deine Programmschleife kann so noch nicht funktionieren.

    Du musst bedenken, wie die einzelnen Bits in einem Doppelwort in STEP 7 addressiert sind:

    Code:
                             MD0
     
               MW0                         MW2
     
        MB0           MB1           MB2           MB3
     
    M0.7 - M0.0   M1.7 - M1.0   M2.7 - M2.0   M3.7 - M3.0
    Gruß Kai

  4. #34
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von _Praktikant_ Beitrag anzeigen
    Hallo,

    hier mal ein versuch von mir:
    Code:
     L     #Summand_1
          T     #Summand1_t
          L     #Summand_2
          T     #Summand2_t
          L     P##Summand1_t
          LAR1  
          L     P##Summand2_t
          LAR2  
          U     #Uebertrag
          R     #Uebertrag
          L     32
    L001: T     #Schleifenzaehler
    // Binärergebnis unter Berücksichtigung des Übertrag
          X      [AR1,P#0.0]
          X      [AR2,P#0.0]
          X     #Uebertrag
          =     #Ergebnis_t                 // Ergebnisbit
    // Übertrag
          U      [AR1,P#0.0]
          O      [AR2,P#0.0]
          U     #Uebertrag                  //alter Übertrag
          O(    
          U      [AR1,P#0.0]
          U      [AR2,P#0.0]
          )     
          O(    
          U      [AR1,P#0.0]
          U      [AR2,P#0.0]
          U     #Uebertrag                  //alter Übertrag
          )     
          =     #Uebertrag                  //neuer Übertrag
          U     #Ergebnis_t
          =      [AR2,P#0.0]                // am Ende steht die Summe in AR2
          +AR1  P#0.1
          +AR2  P#0.1
          L     #Schleifenzaehler
          LOOP  L001
          TAR2  
          T     #Ergebnis
    Ok oder nix kapiert?!?
    Das speichern und wiederherstellen des AR hab ich noch nicht rausgefunden bzw. ist mir die funktion noch nicht klar;
    gibt es ein bsp irgendwo?

    @gravieren
    Die anderen Lösungen wären zunächst bestimmt auch ok, aber da ich ind.Adr. weiterhin brauchen werde, sollte ich mich gleich damit befassen.
    du schreibst ja
    = [AR2,P#0.0] // am Ende steht die Summe in AR2

    TAR2 Brauchst du nicht, würde so ja auch die Adresse von AR2 in dein Ergebnis transferrieren.

    es reicht

    L #P_Summand2_t, da steht ja das Ergebnis
    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

  5. #35
    Avatar von _Praktikant_
    _Praktikant_ ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.08.2007
    Ort
    FH
    Beiträge
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    könnte mir jmd ein beispiel geben oder sagen was genau jetzt noch
    geändert werden muß?!?
    Die adressierung bzw der durchlauf beginnt dann also im "rechten teil"
    der einzelnen doppelwörter (zb S1 -> 3.0);
    dann gäbe es doch nach jedem byte ein rücksprung auf die nächste adresse?
    Ist meine übertrags berechnung dann falsch oder die andere verknüpfung einfach besser?
    Danke schon mal, mfg...

  6. #36
    Registriert seit
    06.10.2003
    Beiträge
    3.411
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Hallo Praktikant,
    • Befehl TAD ansehen - hatte mal einer geschrieben !
    Nun gut, ich denke man sollte dich nicht länger zappeln lassen.

    Code:
     
    FUNCTION FC 1 : VOID
    TITLE =
    VERSION : 0.1
    VAR_INPUT
      SUMMAND_A : DINT ; 
      SUMMAND_B : DINT ; 
    END_VAR
    VAR_OUTPUT
      SUMME : DINT ; 
    END_VAR
    VAR_TEMP
      SAVE_AR1 : DWORD ; 
      SA : DINT ; 
      SB : DINT ; 
      TEMP_INT : INT ; 
      UEBERTRAG : BOOL ; 
      EINS : BOOL ; 
      TEMP : BOOL ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    //
    //    Es gelten folgende Regeln
    //    0+0=0
    //    1+0=1
    //    0+1=1
    //    1+1=0 Übertrag 1
    //
          TAR1  #SAVE_AR1; 
          SET   ; 
          SAVE  ; 
          L     #SUMMAND_A; 
          TAD   ; 
          T     #SA; 
          L     #SUMMAND_B; 
          TAD   ; 
          T     #SB; 
          L     P##SA; 
          LAR1  ; 
          L     P##SB; 
          LAR2  ; 
          CLR   ; 
          =     #UEBERTRAG; 
          L     32; 
    L001: T     #TEMP_INT; 
    //*** Binärergebnis unter Berücksichtigung des Übertrag
          X      [AR1,P#0.0]; 
          X      [AR2,P#0.0]; 
          X     #UEBERTRAG; 
          =     #EINS; // Ergebnisbit
    //*** Übertrag
          U      [AR1,P#0.0]; // wenn beide bits "1"
          U      [AR2,P#0.0]; 
          O     ; 
          U     #UEBERTRAG; // oder wenn Übertrag
          U(    ; // und genau ein bit "1"
          X      [AR1,P#0.0]; 
          X      [AR2,P#0.0]; 
          )     ; 
          =     #UEBERTRAG; 
          U     #EINS; 
          =      [AR2,P#0.0]; // am Ende Summe in AR2
          +AR1  P#0.1; 
          +AR2  P#0.1; 
          L     #TEMP_INT; 
          LOOP  L001; 
          L     #SB; // Summe wurde in AR2 (#SB) geschrieben
          TAD   ; 
          T     #SUMME; 
          LAR1  #SAVE_AR1; 
    END_FUNCTION

    Gruß, Onkel
    Geändert von Onkel Dagobert (19.08.2007 um 19:09 Uhr)
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  7. Folgender Benutzer sagt Danke zu Onkel Dagobert für den nützlichen Beitrag:

    _Praktikant_ (20.08.2007)

  8. #37
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    @Onkel

    Ja, hast Recht.

    @Praktikant

    Ich hab es fast so wie Onkel gemacht, allerdings nur mit AR1. Der Code ist sich natürlich auf Grund der Aufgabe ähnlich. Wenn es dich interessiert, stell ich das auch noch hier ein, ansonsten bleiben wir bei Onkels Version, sonst gibts noch Codesalat .
    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. #38
    Avatar von _Praktikant_
    _Praktikant_ ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.08.2007
    Ort
    FH
    Beiträge
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    vielen dank für die hilfe !!
    Ich habs glaub ich auch soweit kapiert,
    nur die 4 zeilen
    Code:
     
          TAR1  "SAVE_AR1"
          SET   
          SAVE  
             .
             .
             .
          LAR1  "SAVE_AR1"
    sind mir noch unklar?!
    In der hilfe steht nicht viel, für was genau brauche ich die AR-Operationen?

    @Ralle
    Deine Version würd mich auch interessieren und was war jetzt egtl.
    die Siemens-Stolperfalle?!
    Gruß

  10. #39
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Jo dann, hier mal meine Version:

    Code:
    FUNCTION FC 50 : VOID
    TITLE =
    VERSION : 1.0
    AUTHOR : Ralle
    
    VAR_INPUT
      Summand_1 : DWORD ;    
      Summand_2 : DWORD ;    
    END_VAR
    VAR_OUTPUT
      Ergebnis : DWORD ;    
    END_VAR
    VAR_TEMP
      Schleifenzaehler : WORD ;    
      Uebertrag_Temp : BOOL ;    
      SAVE_VKE : BOOL ;    
      Summand_1_Temp : DWORD ;    
      Summand_2_Temp : DWORD ;    
      Ergebnis_Temp : DWORD ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =Sichere VKE im BIE
    
          SET   ; 
          SAVE  ; 
          =     #SAVE_VKE; 
    NETWORK
    TITLE =
    
    // Laden der beiden Doppelwörter      
          L     #Summand_1; 
          TAD   ; //Bytes tauschen
          T     #Summand_1_Temp; 
    
          L     #Summand_2; 
          TAD   ; //Bytes tauschen
          T     #Summand_2_Temp; 
    
          L     0; 
          T     #Ergebnis_Temp; 
    
          CLR   ; 
          =     #Uebertrag_Temp; 
    
          L     L#32; 
    loop: T     #Schleifenzaehler; 
    
          L     P##Summand_1_Temp; 
          LAR1  ; 
    
          L     32; 
          L     #Schleifenzaehler; 
          -I    ; 
          +AR1  ; 
    
    //Ergebnisbit berechnen  
          X      [AR1,P#0.0]; //summand1
          X      [AR1,P#4.0]; //summand2
          X     #Uebertrag_Temp; //übertrag
          =      [AR1,P#8.0]; //ergebnis
    
    //nächsten Übertrag berechnen
          U      [AR1,P#0.0]; //summand1
          U      [AR1,P#4.0]; //summand2
          U     #Uebertrag_Temp; //übertrag
          O     ; 
          U      [AR1,P#0.0]; //summand1
          U      [AR1,P#4.0]; //summand2
          UN    #Uebertrag_Temp; //übertrag
          O     ; 
          U      [AR1,P#0.0]; //summand1
          UN     [AR1,P#4.0]; //summand2
          U     #Uebertrag_Temp; //übertrag
          O     ; 
          UN     [AR1,P#0.0]; //summand1
          U      [AR1,P#4.0]; //summand2
          U     #Uebertrag_Temp; //übertrag
          =     #Uebertrag_Temp; //nächster übertrag
    
          L     #Schleifenzaehler; 
          LOOP  loop; 
    
    //Ergebnis speichern
    
          L     #Ergebnis_Temp; 
          TAD   ; //Bytes zurück tauschen
          T     #Ergebnis; 
    NETWORK
    TITLE =
    
          U     #SAVE_VKE; 
          SAVE  ; 
          BE    ; 
    END_FUNCTION
    Das Berechnen des Übertrages hat Onkel kürzer hinbekommen .

    Die Stolperfalle, war das TAD. Laß mal alle TAD weg, dann funktioniert es, bis man mit seinem Ergebnis eine Bytegrenze überschreitet. Probiers mal aus.

    TAR1 "SAVE_AR1" rettet das AR 1 in einen Zwischenspeicher
    LAR1 "SAVE_AR1" holt das gerettete AR1 wieder zurück

    Mit AR1 muß man das nicht unbedingt machen, bei AR2 ist es aber anzuraten, da das AR2 von Multi-FB genutzt wird.

    SAVE speichert das VKE im BIE-Bit (Siehe dazu ausführlich die Step7-Hilfe)
    Geändert von Ralle (20.08.2007 um 15:38 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

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

    _Praktikant_ (20.08.2007)

  12. #40
    Avatar von _Praktikant_
    _Praktikant_ ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.08.2007
    Ort
    FH
    Beiträge
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ok, alles klar !
    Danke für eure hilfe,
    hab bestimmt mal wieder ne frage...
    Gruß

Ähnliche Themen

  1. Addierer
    Von Xorron im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 17.02.2009, 07:33

Lesezeichen

Berechtigungen

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