FB als Multiinstanz funk. nicht

xvitali

Level-2
Beiträge
28
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum funktioniert dieser Baustein als Multiinstanz nicht? Ich bekomme immer am Ausgang Level 0
Nur wenn ich diesen FB mit Instanz DB aufrufe dann Funk. dieser Baustein.



Code:
FUNCTION_BLOCK "Hebepumpe2"TITLE =
VERSION : 0.1

VAR_INPUT
  Bit_1 : BOOL ;  //Füllstand bit 0
   Bit_2 : BOOL ;  //Füllstand bit 1
  Bit_3 : BOOL ;  //Füllstand bit 2
    Bit_4 : BOOL ;  //Füllstand bit 3
  END_VAR
  VAR_OUTPUT
    Level: REAL;     //Aktueller Füllstand
    wRetVal : WORD ;         // status
  END_VAR
  VAR
    levelakt : WORD ;          
  END_VAR
    VAR_TEMP     
        dAR1Save : INT ;            
    dAR2Save : INT ;            
  END_VAR
        TAR1  ; 
        T     #dAR1Save; 
        TAR2  ; 
        T     #dAR2Save; 
   
      LAR1  P##levelakt;    
        U     #Bit_1; 
        =      [AR1,P#1.0]; 
        U     #Bit_2; 
        =      [AR1,P#1.1]; 
        U     #Bit_3; 
        =      [AR1,P#1.2]; 
        U     #Bit_4; 
        =      [AR1,P#1.3]; 
   
        L     #dAR1Save; // Adressregiester wiederherstellen 
        LAR1  ; 
        L     #dAR2Save; 
        LAR2  ; 



      L     #levelakt; 

        ITD   ; 
        DTR   ; 
        L     6.666667e+000; 
        *R    ; 
        T     #Level; // Füllstand 0-100 Prozent

END_FUNCTION_BLOCK
 
Hallo,

Code:
VAR_TEMP     
dAR1Save : [COLOR="Red"]DWORD[/COLOR] ;            
dAR2Save : [COLOR="#ff0000"]DWORD[/COLOR] ;

probiers mal mit Doppelword
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Code:
VAR_TEMP     
dAR1Save : [COLOR="Red"]DWORD[/COLOR] ;            
dAR2Save : [COLOR="#ff0000"]DWORD[/COLOR] ;

probiers mal mit Doppelword

reicht aber noch nicht.
für den multiinstanzzugriff ist es notwendig zum AR1 das aktuelle AR2 zu addieren
 
Offset

Hallo,

Code:
VAR_TEMP     
dAR1Save : [COLOR=red]DWORD[/COLOR] ;            
dAR2Save : [COLOR=#ff0000]DWORD[/COLOR] ;

probiers mal mit Doppelword

Hallo,

das ist zwar auch nicht richtig, jedoch ist es nicht der gesuchte Fehler. Das Stichwort heisst Offset für Multiinstanzaufruf.

Code:
      TAR2                              // AR2 in Akku
      UD    DW#16#FFFFFF                // Bereichscodierung ausblenden
      T     #OFFS_MU                    // Offset fuer Multiinstanzaufruf
 
      L     P##SAVE                     // Pointer auf Altwertspeicher
      L     #OFFS_MU                    // Offset fuer Multiinstanzaufruf 
      +D    
      T     #PNT_SAVE

André
 
wobei ich die erfahrung gemacht habe, dass das ausblenden der bereichscodierung nicht notwendig ist

Wenn man die Befehle +AR1/+AR2 verwendet nicht, denn diese blenden die Bereichskennung selber aus.
Dann hat man aber die Beschränkung auf die maximale Adresse 32767. Bei größeren Bausteinen muss man dann eben selber ausmaskieren und addieren.

Oder meinst du dass sich die SPS nachher um die Bereichskennung garnicht mehr kümmert? Denn wenn ich nicht ausmaskiere stehen nach der Addition doch ungültige Werte für die Bereichskennung im Adressregister.
 
Wenn man die Befehle +AR1/+AR2 verwendet nicht, denn diese blenden die Bereichskennung selber aus.
Dann hat man aber die Beschränkung auf die maximale Adresse 32767. Bei größeren Bausteinen muss man dann eben selber ausmaskieren und addieren.

Oder meinst du dass sich die SPS nachher um die Bereichskennung garnicht mehr kümmert? Denn wenn ich nicht ausmaskiere stehen nach der Addition doch ungültige Werte für die Bereichskennung im Adressregister.

ich meine schon die benutzung +ARx ...dafür ist es ja da :)
und einen adressüberlauf hab ich noch nicht produziert...32767 ist schon mächtig weit draußen, wie muß man da "strukturieren"? :confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich meine schon die benutzung +ARx ...dafür ist es ja da :)
und einen adressüberlauf hab ich noch nicht produziert...32767 ist schon mächtig weit draußen, wie muß man da "strukturieren"? :confused:

In 1981, Bill Gates said that "640 k ought to be enough for anyone"
 
Zurück
Oben