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

Ergebnis 1 bis 7 von 7

Thema: elegante Programmierung zum Auslesen von Bits

  1. #1
    Registriert seit
    09.06.2007
    Beiträge
    40
    Danke
    10
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Gemeinde,

    ich muss aus einem DB Bitsignale auslesen und in einen anderen DB zusammenhängend übertragen (2x52 Bit an Signalen).

    Normale Programmierung wäre dann so:

    u db100.dbx100.5
    = db60.dbx0.0
    u db100.dbx100.7
    = db60.dbx0.1

    u db100.dbx120.5
    = db60.dbx0.2
    u db100.dbx120.7
    = db60.dbx0.3

    u db100.dbx140.5
    = db60.dbx0.4
    u db100.dbx140.7
    = db60.dbx0.5
    usw..

    Die Programmierung wäre zwar kein Problem doch ein wenig aufwändig weil 104 Bit zu schreiben sind.

    Da die Bits immer .5 und .7 sind und sich alle 20 Byte wiederholen (52mal) könnte es doch was eleganteres geben um alle 20 Byte diese 2 Bits auszulesen?
    In dieser Zeit in der ich hier auf eine Antwort warte hätte ich wahrscheinlich den Programmcode schon geschrieben aber es interessiert mich mal wie ihr das lösen würdet.

    MfG Egger
    Zitieren Zitieren elegante Programmierung zum Auslesen von Bits  

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

    Standard

    Wird das ein Programmierwettbewerb?
    #zaehler: Int

    Code:
       
          L     P#DBX 100.0
          LAR1  
    
          L     P#DBX 60.0
          LAR2  
    
          L     52  //oder 51, wird ja bis Null gezählt, probiers mal  :-))  Ist jetzt zu spät für mich! 
    SC02: T     #zaehler
    
          AUF   "Quell_DB"
          U     DBX [AR1,P#0.5]
          AUF   "Ziel_DB"
          =     DBX [AR2,P#0.0]
    
          AUF   "Quell_DB"
          U     DBX [AR1,P#0.7]
          AUF   "Ziel_DB"
          =     DBX [AR2,P#0.1]
    
          L     P#20.0
          +AR1  
    
          L     P#0.2
          +AR2  
    
          L     #zaehler
          LOOP  SC02                        // Schleife solange, bis #zaehler auf 0
    Nicht vergessen, in einem FB zuerst AR1 und AR2 retten und am Ende wieder restaurieren!
    Geändert von Ralle (09.07.2007 um 23:53 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

  3. #3
    egger ist offline Benutzer
    Themenstarter
    Registriert seit
    09.06.2007
    Beiträge
    40
    Danke
    10
    Erhielt 4 Danke für 4 Beiträge

    Standard

    danke für die späte Antwort noch zu dieser Zeit.

    sieht sehr gut aus deine Lösung, wusste doch dass sich so etwas einfacher lösen lässt als auf die konventionelle Weise.

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

    Standard

    Kleine Korrektur:

    Code:
       
          L     P#DBX 100.0
          LAR1  
     
          L     P#DBX 0.0
          LAR2  
     
          L     52  //oder 51, wird ja bis Null gezählt, probiers mal  :-))  
    SC02: T     #zaehler
     
          AUF   "Quell_DB"
          U     DBX [AR1,P#0.5]
          AUF   "Ziel_DB"
          =     DBX [AR2,P#0.0]
     
          AUF   "Quell_DB"
          U     DBX [AR1,P#0.7]
          AUF   "Ziel_DB"
          =     DBX [AR2,P#0.1]
     
          L     P#20.0
          +AR1  
     
          L     P#0.2
          +AR2  
     
          L     #zaehler
          LOOP  SC02                        // Schleife solange, bis #zaehler auf 0
    Gruß Kai

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

    Standard

    Und noch eine kleine Verbesserung:

    Code:
       
          L     P#DBX 100.0
          LAR1  
     
          L     P#DBX 0.0
          LAR2  
     
          L     52                    // Anzahl der Schleifendurchläufe 
    SC02: T     #zaehler
     
          AUF   "Quell_DB"
          U     [AR1,P#0.5]
          AUF   "Ziel_DB"
          =     [AR2,P#0.0]
     
          AUF   "Quell_DB"
          U     [AR1,P#0.7]
          AUF   "Ziel_DB"
          =     [AR2,P#0.1]
     
          L     P#20.0
          +AR1  
     
          L     P#0.2
          +AR2  
     
          L     #zaehler
          LOOP  SC02
    Gruß Kai

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

    Standard

    Man kann auch alternativ schreiben:

    Code:
       
          L     P#100.0
          LAR1  
     
          L     P#0.0
          LAR2  
     
          L     52                    // Anzahl der Schleifendurchläufe 
    SC02: T     #zaehler
     
          AUF   "Quell_DB"
          U     DBX [AR1,P#0.5]
          AUF   "Ziel_DB"
          =     DBX [AR2,P#0.0]
     
          AUF   "Quell_DB"
          U     DBX [AR1,P#0.7]
          AUF   "Ziel_DB"
          =     DBX [AR2,P#0.1]
     
          L     P#20.0
          +AR1  
     
          L     P#0.2
          +AR2  
     
          L     #zaehler
          LOOP  SC02
    Gruß Kai

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ist der Operandenbereich (DBX) im Zeiger enthalten (L P#DBX100.0) und wird bei der Anweisung angegeben (U DBX[AR1,P#0.5]), gilt der in der Anweisung angegebene Operandenbereich. Der Operandenbereich im Zeiger wird dann ignoriert.

    Code:
       
          L     P#DBX 100.0
          LAR1  
     
          L     P#DBX 0.0
          LAR2  
     
          L     52                    // Anzahl der Schleifendurchläufe 
    SC02: T     #zaehler
     
          AUF   "Quell_DB"
          U     DBX [AR1,P#0.5]
          AUF   "Ziel_DB"
          =     DBX [AR2,P#0.0]
     
          AUF   "Quell_DB"
          U     DBX [AR1,P#0.7]
          AUF   "Ziel_DB"
          =     DBX [AR2,P#0.1]
     
          L     P#20.0
          +AR1  
     
          L     P#0.2
          +AR2  
     
          L     #zaehler
          LOOP  SC02
    Gruß Kai

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

    vollmi (10.07.2007)

Ähnliche Themen

  1. Bits auslesen aus UINT
    Von Cococabana im Forum CODESYS und IEC61131
    Antworten: 11
    Letzter Beitrag: 02.12.2011, 11:51
  2. Auslesen der Programmierung?
    Von blimaa im Forum CODESYS und IEC61131
    Antworten: 11
    Letzter Beitrag: 04.04.2011, 20:37
  3. S7-200 Unterprogramme und Bits setzen/auslesen
    Von D0m1n1k im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 02.06.2010, 19:47
  4. Libnodave, VBA und Auslesen von Bits
    Von Fluffi im Forum Hochsprachen - OPC
    Antworten: 3
    Letzter Beitrag: 24.07.2009, 14:09
  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
  •