Bit zusammenfassen

totalfuchs

Level-1
Beiträge
44
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
kann ich irgendwie einzelne zusammenhängende bits zu "irgendetwas"zusammenfassen um dann darauf direkt eine Zahl zu schreiben?

Bsp. A2.4 bis A3.3 sollen eine Programmnummer für ein externes Gerät sein.
Jetzt könnte ich jedes Bit einzeln beschreiben, oder direkt eine nummer mit Lade/Transfer schreiben.
Das muß doch gehen oder??
 
Hallo!

wenn du kannst verschiebe deine ausgänge auf eine grade zahl A4.0 oder 3.0 und lade das AB oder AW und transferiere es.
andererseits schreib mit einem pointer von deinem ersten bit mit der länge und transferiere es

viel erfolg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also, Manfreds Vorschlag wär für mich auch erste Wahl. Wenn die Belegung denn unbedingt so bleiben soll:
Code:
L MB10      // Programmnummer
SLW 4       // Schieben
T AW2      // und weg damit
So kann man aber die restlichen Ausgänge nicht mehr nutzen, daher:

Code:
L     MB    10   //Programmnummer
SLW   4          // Schieben
T     MW    12 // Merken
L     AW     2   // AW laden
L     W#16#F00F // Maske
UW              // wortweises UND, um A2.0-A2.3 und A3.4-A3.7 zu erhalten
L     MW    12 
OW              // Programmnummer einfügen
T     AW     2 // und weg damit
Ist jetzt nicht getestet, sollte aber so oder so ähnlich funktionieren.

Grüße von HaDi
 
Code:
*
//adressregister sichern

      TAR1  
      T     MD    40
      TAR2  
      T     MD    44

//byte-startadresse quelle
      L     3
      SLD   3
      LAR1  

//byte-startadresse ziel
      L     2
      SLD   3
      LAR2  

      L     8                           //anzahl der zu schreibenden elemente
next: T     MW    20
      U     M [AR1,P#0.0]               //quelle
      =     A [AR2,P#0.4]               //ziel (mit versatz)
      +AR1  P#0.1                       //nächstes element
      +AR2  P#0.1
      L     MW    20
      LOOP  next

//adressregister zurückschreiben
      L     MD    40
      LAR1  
      L     MD    44
      LAR2
 
Code:
*
//adressregister sichern
 
      TAR1  
      T     MD    40
      TAR2  
      T     MD    44
 
//byte-startadresse quelle
      L     3
      SLD   3
      LAR1  
 
//byte-startadresse ziel
      L     2
      SLD   3
      LAR2  
 
      L     8                           //anzahl der zu schreibenden elemente
next: T     MW    20
      U     M [AR1,P#0.0]               //quelle
      =     A [AR2,P#0.4]               //ziel (mit versatz)
      +AR1  P#0.1                       //nächstes element
      +AR2  P#0.1
      L     MW    20
      LOOP  next
 
//adressregister zurückschreiben
      L     MD    40
      LAR1  
      L     MD    44
      LAR2
Hallo 4L,

wenn ich das richtig lese, steht bei dir die Programmnummer in MB 3?
Für MW 20, MD 40 und MD 44 kann man auch lokale Variablen nehmen.

Schöne Routine! :sc5:

MfG
FrankW
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo 4L,

wenn ich das richtig lese, steht bei dir die Programmnummer in MB 3?
Für MW 20, MD 40 und MD 44 kann man auch lokale Variablen nehmen.

Schöne Routine! :sc5:

MfG
FrankW

richtig, die kann man natürlich auch variabel gestalten, als FC z.b.:

Code:
*
FUNCTION "COPY_Memory_to_Output" : VOID
//DATE:     01.10.2008
//AUTHOR:   4lagig
//VERSION:  V0.1 BasicVer
AUTHOR : '4lagig'
FAMILY : BoolGF
VERSION : 0.1

VAR_INPUT
  iSourceByte : INT ;    
  iSourceBit : INT ;    
  iDestinationByte : INT ;    
  iDestinationBit : INT ;    
  iElements : INT ;    
END_VAR
VAR_TEMP
  dAR1Save : DWORD ;    
  dAR2Save : DWORD ;    
  iLoop : INT ;    
END_VAR
BEGIN
NETWORK
TITLE =

//adressregister sichern

      TAR1  ; 
      T     #dAR1Save; 
      TAR2  ; 
      T     #dAR2Save; 

//byte-startadresse quelle
      L     #iSourceByte; 
      SLD   3; 
      L     #iSourceBit; 
      +D    ; 
      LAR1  ; 

//byte-startadresse ziel
      L     #iDestinationByte; 
      SLD   3; 
      L     #iDestinationBit; 
      +D    ; 
      LAR2  ; 

      L     #iElements; //anzahl der zu schreibenden elemente
next: T     #iLoop; 
      U     M [AR1,P#0.0]; //quelle
      =     A [AR2,P#0.0]; //ziel (mit versatz)
      +AR1  P#0.1; //nächstes element
      +AR2  P#0.1; 
      L     #iLoop; 
      LOOP  next; 

//adressregister zurückschreiben
      L     #dAR1Save; 
      LAR1  ; 
      L     #dAR2Save; 
      LAR2  ; 

END_FUNCTION
 
Hallo Totalfuchs,

schau Dir mal die Anlage FC303 an. Mit diesem Baustein kannst Du ganz einfach 16 zusammen gewürfelte Bits zu einem Wort zusammenfassen.
Einfach gemacht, funktioniert prima. Hab das mal gebraucht um Wincc flex
Fehlerwörter zu versorgen.

Ich benütze dafür nur Lokalvariable.

Gruß
 

Anhänge

  • FC303_V1.zip
    554 Bytes · Aufrufe: 30
Zurück
Oben