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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Int-Wert aus Bits bilden

  1. #1
    Registriert seit
    23.05.2008
    Beiträge
    131
    Danke
    59
    Erhielt 11 Danke für 10 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ich programmiere zur zeit eine paternoster-steuerung. diese soll am anfang nur einen paternoster steuern, aber erweiterbar sein (über profibus mit et200-modulen). jeder paternoster wird gleich aufgebaut sein, in diesen liegen wellen (jeweils 15 stück) mit gewickeltem material drauf. diese wellen sind binär codiert (4bit).

    soweit kein problem. wenn ich es als fc programmiere geht alles (wird zur zeit nur über plcsim simuliert). da es nun aber erweiterbar sein soll, habe ich mir gedacht es als fb zumachen. habe mir als in-variblen 4 bool eingänge für die codierung der wellen gemacht und ein statische variabe pos_ist als int. diese will ich nun mit den 4 bits die werte 1..15 als istposition zuweisen. über
    Code:
    U #welle_bit0
    = L7.0  //lowbyte(?!?)
    
    U #welle_bit1
    = L7.1
    
    U #welle_bit2
    = L7.2
    
    U #welle_bit3
    = L7.3
    funktioniert es leider nicht. kann mir jemand evtl einen tipp geben?!?
    Zitieren Zitieren Int-Wert aus Bits bilden  

  2. #2
    Registriert seit
    21.12.2006
    Ort
    Wiener Neustadt
    Beiträge
    931
    Danke
    154
    Erhielt 169 Danke für 127 Beiträge

    Standard

    Hallo!
    Sinngemässes Zitat
    Lokaldaten sind eine scheissgefährliche Sache. Alle Bausteine greifen darauf zu. Die Anzahl der Lokaldaten sind CPU abhängig begrenzt, wenn man die Lokaldaten überschreitet, geht die CPU in Stop. Selbst wenn man im FC1 L0.0 setzt, und dies im FC2 zufällig das gleiche Bit ist, hatt man Probleme, wenn zwischendurch ein OB aufgerufen wird, der auch dieses Bit benutzt. Ich bevorzuge die Programmierung von FBs und Multiinstanzen. Man sollte auch wissen, dass S7 bei graphischer Programmierung auch auf die Lokaldaten greift ohne das dies deklariert wird
    Am Rande:

    Vertrau der Sim NICHT bedingungslos!

    Ich hab schon erlebt, dass eine FC sich Sachen merkt, die sie sich "im wirklichen Leben" nicht merkt!
    eben wegen dem Unterschied FC - FB!!

    viel Erfolg
    Geändert von Manfred Stangl (08.10.2008 um 10:51 Uhr)
    Gruß
    M

    Handbook not read error...
    Klare Frage - klare Antwort

  3. Folgender Benutzer sagt Danke zu Manfred Stangl für den nützlichen Beitrag:

    testuser (08.10.2008)

  4. #3
    Registriert seit
    08.11.2006
    Ort
    Uckermark
    Beiträge
    903
    Danke
    201
    Erhielt 256 Danke für 208 Beiträge

    Standard

    Zitat Zitat von testuser Beitrag anzeigen
    ich programmiere zur zeit eine paternoster-steuerung. diese soll am anfang nur einen paternoster steuern, aber erweiterbar sein (über profibus mit et200-modulen). jeder paternoster wird gleich aufgebaut sein, in diesen liegen wellen (jeweils 15 stück) mit gewickeltem material drauf. diese wellen sind binär codiert (4bit).

    soweit kein problem. wenn ich es als fc programmiere geht alles (wird zur zeit nur über plcsim simuliert). da es nun aber erweiterbar sein soll, habe ich mir gedacht es als fb zumachen. habe mir als in-variblen 4 bool eingänge für die codierung der wellen gemacht und ein statische variabe pos_ist als int. diese will ich nun mit den 4 bits die werte 1..15 als istposition zuweisen. über
    Code:
    U #welle_bit0
    = L7.0  //lowbyte(?!?)
     
    U #welle_bit1
    = L7.1
     
    U #welle_bit2
    = L7.2
     
    U #welle_bit3
    = L7.3
    funktioniert es leider nicht. kann mir jemand evtl einen tipp geben?!?
    Ob das hier schön ist oder nicht sei mal dahingestellt.
    Funktionieren sollte es eigentlich so.
    Du müsstest aber Deinem Codeschnippsel noch hinzufügen:
    Code:
    L  LW6
    T #pos_ist
    Neue Ideen begeistern jene am meisten, die auch mit den alten nichts anzufangen wussten.
    Karl Heinrich Waggerl (1897-1973)

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

    testuser (08.10.2008)

  6. #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

    Code:
    *
    //adressregister sichern
    
          TAR1  
          T     #dAR1Save
          TAR2  
          T     #dAR2Save
    
    //nummer schreiben
          L     P##welle_bit0
          LAR1  
          L     P##nummer
          LAR2  
    
          L     4
    next: T     #loop_count
          U      [AR1,P#0.0]
          =      [AR2,P#1.0]
          +AR1  P#0.1
          +AR2  P#0.1
          L     #loop_count
          LOOP  next
    
    //adressregister zurückschreiben
          L     #dAR1Save
          LAR1  
          L     #dAR2Save
          LAR2
    Geändert von vierlagig (08.10.2008 um 11:43 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    testuser (08.10.2008)

  8. #5
    Registriert seit
    25.09.2008
    Ort
    Wiesenbach, Baden
    Beiträge
    21
    Danke
    3
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo Testuser

    Die vier Bits stehen also als Inparameter direkt hintereinander. Auch wenn nur vier Bits als In-Parameter definiert sind, so werden immer 16 Bit durch S7 reserveiert.

    Diese vier Bits stellen nun eine Zahl von 0 bis 15 dar. OK. Die Statische Variable pos_ist soll diesen Wert aufnehmen.

    Folgende Programmzeilen im FB liefern die Lösung:

    LAR1 P#w1 // Adressregister auf erstes Eingangsbit
    L B[AR1,P#0.0] // Alle Bits laden
    T pos_ist

    Wenn am FBEingang nach den vier Bits noch weitere anders benutzte Bits kommen, dann vor den Transferbefehl diese Bits ausmaskieren mit

    UW W#16#F

    Das wars.

    Gruß Puddl
    Zitieren Zitieren Int-Wert aus Bits  

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

    testuser (08.10.2008)

  10. #6
    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

    Puddls Lösung setzt aber vorraus, dass die erste bit-adresse Lx.0 ist ansonsten kommt beim laden des bytes ein ausrichtungsfehlerchen und der OB 121 wird aufgerufen oder, wenn nicht vorhanden, die CPU geht in stop

    bei meiner lösung ist das nicht so
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  11. #7
    Avatar von testuser
    testuser ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.05.2008
    Beiträge
    131
    Danke
    59
    Erhielt 11 Danke für 10 Beiträge

    Standard

    danke an alle für die umgehenden antworten. habe mich für die variante von OHGN entschieden. funktioniert so wie ich es mir (zur zeit) vorstelle.

    Zitat Zitat von OHGN
    ..
    Ob das hier schön ist oder nicht sei mal dahingestellt.
    ..
    da ich in der programmierung noch voll im lernen bin, würde ich gerne mal wissen was du damit meinst! sicherlich gibt es elegantere wege (siehe 4L).

  12. #8
    Registriert seit
    25.09.2008
    Ort
    Wiesenbach, Baden
    Beiträge
    21
    Danke
    3
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Dann programmiert man halt noch einen SRW x nach dem Laden der Bits.
    Zitieren Zitieren Int-Werte...  

  13. #9
    Registriert seit
    08.11.2006
    Ort
    Uckermark
    Beiträge
    903
    Danke
    201
    Erhielt 256 Danke für 208 Beiträge

    Standard

    Zitat Zitat von testuser Beitrag anzeigen
    ....
    da ich in der programmierung noch voll im lernen bin, würde ich gerne mal wissen was du damit meinst! sicherlich gibt es elegantere wege (siehe 4L).
    Naja, ich finde der Kollege vierlagig neigt mittlerweile ein bischen zum verkomplizieren...

    Ich persönlich würde es so machen:
    Code:
          L     P##pos_ist
          LAR1 
     
          U     #welle_bit0
          =     [AR1,P#1.0]
          U     #welle_bit1
          =     [AR1,P#1.1]
          U     #welle_bit2
          =     [AR1,P#1.2]
          U     #welle_bit3
          =     [AR1,P#1.3]
    Neue Ideen begeistern jene am meisten, die auch mit den alten nichts anzufangen wussten.
    Karl Heinrich Waggerl (1897-1973)

  14. #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 Puddl Beitrag anzeigen
    Dann programmiert man halt noch einen SRW x nach dem Laden der Bits.
    Code:
    *
          LAR1  P##welle_bit0
          L     B [AR1,P#0.0]
          T     #nummer
    an welcher stelle willst du schieben, der fehler kommt beim lesen!

    @OHGN:

    ja, bißchen verkompliziert ist es, aber es ist auch eine grundtechnik um größere zahlen umzuwandeln, weil 32 mal deinen zweizeiler wäre mir zuviel tipparbeit

    ABER: schön ist deine lösung!

    @testuser:

    das absolute adressieren von lokaldaten gilt gemeinhin als unsauber, da man sich den auswirkungen nicht immer bewußt sein kann und aber auch eine kleine änderung der schnittstelle sehr viel tipparbeit bedeuten kann - nämlich dann, wenn sich die adressen verschieben.
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    testuser (08.10.2008)

Ähnliche Themen

  1. Eingangsadresse aus Variablen bilden
    Von Okoshi im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 21.03.2011, 16:58
  2. verzögerung zeit bilden
    Von zigelei im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 15.01.2010, 13:00
  3. Mittelwert bilden (von zb 5 SPS-Zyklen)
    Von Matthias O. im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 05.01.2007, 14:21
  4. S7 - Checksummen bilden
    Von seeba im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 31.01.2006, 06:24
  5. Bits in temporäres Byte mappen und gesetzte Bits zählen
    Von yetibrain im Forum PC- und Netzwerktechnik
    Antworten: 3
    Letzter Beitrag: 19.02.2005, 16:31

Lesezeichen

Berechtigungen

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