elegante Programmierung zum Auslesen von Bits

egger

Level-2
Beiträge
43
Reaktionspunkte
4
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
 
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!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
Kleine Korrektur:

Code:
      L     P#DBX 100.0
      LAR1  
 
      [COLOR=red]L     P#DBX 0.0[/COLOR]
      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
 
Und noch eine kleine Verbesserung:

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

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Man kann auch alternativ schreiben:

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

Gruß Kai
 
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:
      [COLOR=red]L     P#DBX 100.0[/COLOR]
      LAR1  
 
      [COLOR=red]L     P#DBX 0.0[/COLOR]
      LAR2  
 
      [COLOR=red]L     52                    // Anzahl der Schleifendurchläufe[/COLOR] 
SC02: T     #zaehler
 
      AUF   "Quell_DB"
      [COLOR=red]U     DBX [AR1,P#0.5][/COLOR]
      AUF   "Ziel_DB"
      [COLOR=red]=     DBX [AR2,P#0.0][/COLOR]
 
      AUF   "Quell_DB"
      [COLOR=red]U     DBX [AR1,P#0.7][/COLOR]
      AUF   "Ziel_DB"
      [COLOR=red]=     DBX [AR2,P#0.1][/COLOR]
 
      L     P#20.0
      +AR1  
 
      L     P#0.2
      +AR2  
 
      L     #zaehler
      LOOP  SC02

Gruß Kai
 
Zurück
Oben