AUF DB - und was geht jetzt alles damit ?

Zuviel Werbung?
-> Hier kostenlos registrieren
Hier ein kurzes Beispiel (*.awl):
Code:
ORGANIZATION_BLOCK OB 1
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1
 
VAR_TEMP
  OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
  OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
  OB1_PRIORITY : BYTE ; //Priority of OB Execution
  OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
  OB1_RESERVED_1 : BYTE ; //Reserved for system
  OB1_RESERVED_2 : BYTE ; //Reserved for system
  OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
  OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
  OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
  OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
END_VAR
BEGIN
NETWORK
TITLE =
      L     DB10.DBW    0; 
 
      CALL FB     1 , DB     1 (
           DB_Nr                    := 10,
           Bit0                     := DB10.DBX    0.0,
           Bit1                     := DB10.DBX    0.1,
           Bit2                     := DB10.DBX    0.2,
           Bit3                     := DB10.DBX    0.3,
           Bit4                     := DB10.DBX    0.4,
           Bit5                     := DB10.DBX    0.5,
           Bit6                     := DB10.DBX    0.6,
           Bit7                     := DB10.DBX    0.7,
           Bit8                     := DB10.DBX    1.0,
           Bit9                     := DB10.DBX    1.1,
           Bit10                    := DB10.DBX    1.2,
           Bit11                    := DB10.DBX    1.3,
           Bit12                    := DB10.DBX    1.4,
           Bit13                    := DB10.DBX    1.5,
           Bit14                    := DB10.DBX    1.6,
           Bit15                    := DB10.DBX    1.7);
      L     DB10.DBW    0; 
 
END_ORGANIZATION_BLOCK
FUNCTION_BLOCK FB 1
TITLE =
VERSION : 0.1
 
VAR_INPUT
  DB_Nr : INT ; 
END_VAR
VAR_IN_OUT
  Bit0 : BOOL ; 
  Bit1 : BOOL ; 
  Bit2 : BOOL ; 
  Bit3 : BOOL ; 
  Bit4 : BOOL ; 
  Bit5 : BOOL ; 
  Bit6 : BOOL ; 
  Bit7 : BOOL ; 
  Bit8 : BOOL ; 
  Bit9 : BOOL ; 
  Bit10 : BOOL ; 
  Bit11 : BOOL ; 
  Bit12 : BOOL ; 
  Bit13 : BOOL ; 
  Bit14 : BOOL ; 
  Bit15 : BOOL ; 
END_VAR
VAR_TEMP
  DB_Nr_Int : INT ; 
END_VAR
BEGIN
NETWORK
TITLE =
      SET   ; 
      S     #Bit1; 
      S     #Bit3; 
      S     #Bit5; 
      S     #Bit7; 
      S     #Bit11; 
 
NETWORK
TITLE =
      L     #DB_Nr; 
      T     #DB_Nr_Int; 
      AUF   DB [#DB_Nr_Int]; 
      L     0; 
      T     DBW    0; 
 
NETWORK
TITLE =
      L     DBW    0; 
      U     #Bit0; 
      U     #Bit1; 
      U     #Bit2; 
      U     #Bit3; 
      U     #Bit4; 
      U     #Bit5; 
      U     #Bit6; 
      U     #Bit7; 
      U     #Bit8; 
      U     #Bit9; 
      U     #Bit10; 
      U     #Bit11; 
      U     #Bit12; 
      U     #Bit13; 
      U     #Bit14; 
      U     #Bit15; 
 
END_FUNCTION_BLOCK
DATA_BLOCK DB 1
TITLE =
VERSION : 0.0
 FB 1
BEGIN
   DB_Nr := 0; 
   Bit0 := FALSE; 
   Bit1 := FALSE; 
   Bit2 := FALSE; 
   Bit3 := FALSE; 
   Bit4 := FALSE; 
   Bit5 := FALSE; 
   Bit6 := FALSE; 
   Bit7 := FALSE; 
   Bit8 := FALSE; 
   Bit9 := FALSE; 
   Bit10 := FALSE; 
   Bit11 := FALSE; 
   Bit12 := FALSE; 
   Bit13 := FALSE; 
   Bit14 := FALSE; 
   Bit15 := FALSE; 
END_DATA_BLOCK

Wenn man den Status beobachtet sieht man daß zunächst im Baustein das Löschen geklappt hat und anschließed im OB sieht man dann daß das Bitmuster wieder im DB steckt...
 
Ich habe das selbe Problem:

Code:
      U     #SET
      S     #BIT00
      S     #BIT04
      S     #BIT10
      S     #BIT14
 
      U     #RESET01
[COLOR=blue]      R     #BIT00 - Funktioniert, Bits werden zurückgesetzt[/COLOR]
[COLOR=blue]      R     #BIT04[/COLOR]
[COLOR=blue]      R     #BIT10[/COLOR]
[COLOR=blue]      R     #BIT14[/COLOR]
 
      UN    #RESET02
      SPB   M01
[COLOR=red]      L     #DBNR - Funktioniert nicht, Bits bleiben gesetzt[/COLOR]
[COLOR=red]      T     #DBNRW[/COLOR]
[COLOR=red]      AUF   DB [#DBNRW][/COLOR]
[COLOR=red]      L     W#16#0[/COLOR]
[COLOR=red]      T     DBW    0[/COLOR]
M01:  NOP   0

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier noch mein Programm (*.awl):

Code:
DATA_BLOCK DB 2
TITLE =
VERSION : 0.1

  STRUCT    
   BIT00 : BOOL ;   
   BIT01 : BOOL ;   
   BIT02 : BOOL ;   
   BIT03 : BOOL ;   
   BIT04 : BOOL ;   
   BIT05 : BOOL ;   
   BIT06 : BOOL ;   
   BIT07 : BOOL ;   
   BIT10 : BOOL ;   
   BIT11 : BOOL ;   
   BIT12 : BOOL ;   
   BIT13 : BOOL ;   
   BIT14 : BOOL ;   
   BIT15 : BOOL ;   
   BIT16 : BOOL ;   
   BIT17 : BOOL ;   
  END_STRUCT ;  
BEGIN
   BIT00 := FALSE; 
   BIT01 := FALSE; 
   BIT02 := FALSE; 
   BIT03 := FALSE; 
   BIT04 := FALSE; 
   BIT05 := FALSE; 
   BIT06 := FALSE; 
   BIT07 := FALSE; 
   BIT10 := FALSE; 
   BIT11 := FALSE; 
   BIT12 := FALSE; 
   BIT13 := FALSE; 
   BIT14 := FALSE; 
   BIT15 := FALSE; 
   BIT16 := FALSE; 
   BIT17 := FALSE; 
END_DATA_BLOCK
FUNCTION_BLOCK FB 1
TITLE =
VERSION : 0.1

VAR_INPUT
  DBNR : INT ;  
  SET01 : BOOL ;    
  RESET01 : BOOL ;  
  RESET02 : BOOL ;  
END_VAR
VAR_IN_OUT
  BIT00 : BOOL ;    
  BIT01 : BOOL ;    
  BIT02 : BOOL ;    
  BIT03 : BOOL ;    
  BIT04 : BOOL ;    
  BIT05 : BOOL ; 
  BIT06 : BOOL ;    
  BIT07 : BOOL ;    
  BIT10 : BOOL ;    
  BIT11 : BOOL ;    
  BIT12 : BOOL ;    
  BIT13 : BOOL ;    
  BIT14 : BOOL ;    
  BIT15 : BOOL ;    
  BIT16 : BOOL ;    
  BIT17 : BOOL ;    
END_VAR
VAR_TEMP
  DBNRW : WORD ;    
END_VAR
BEGIN
NETWORK
TITLE =

      U     #SET01; 
      S     #BIT00; 
      S     #BIT04; 
      S     #BIT10; 
      S     #BIT14; 
 
      U     #RESET01; 
      R     #BIT00; 
      R     #BIT04; 
      R     #BIT10; 
      R     #BIT14; 
 
      UN    #RESET02; 
      SPB   M01; 
      L     #DBNR; 
      T     #DBNRW; 
      AUF   DB [#DBNRW]; 
      L     W#16#0; 
      T     DBW    0; 
M01:  NOP   0; 

END_FUNCTION_BLOCK
DATA_BLOCK DB 1
TITLE =
VERSION : 0.0
 FB 1
BEGIN
   DBNR := 0; 
   SET01 := FALSE; 
   RESET01 := FALSE; 
   RESET02 := FALSE; 
   BIT00 := FALSE; 
   BIT01 := FALSE; 
   BIT02 := FALSE; 
   BIT03 := FALSE; 
   BIT04 := FALSE; 
   BIT05 := FALSE; 
   BIT06 := FALSE; 
   BIT07 := FALSE; 
   BIT10 := FALSE; 
   BIT11 := FALSE; 
   BIT12 := FALSE; 
   BIT13 := FALSE; 
   BIT14 := FALSE; 
   BIT15 := FALSE; 
   BIT16 := FALSE; 
   BIT17 := FALSE; 
END_DATA_BLOCK
ORGANIZATION_BLOCK "HAUPTPROGRAMM"
TITLE = Hauptprogramm
AUTHOR : KAI
FAMILY : SPSFORUM
NAME : AUFDB
VERSION : 1.0

VAR_TEMP
  OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
  OB1_SCAN_1 : BYTE ;   //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
  OB1_PRIORITY : BYTE ; //Priority of OB Execution
  OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
  OB1_RESERVED_1 : BYTE ;   //Reserved for system
  OB1_RESERVED_2 : BYTE ;   //Reserved for system
  OB1_PREV_CYCLE : INT ;    //Cycle time of previous OB1 scan (milliseconds)
  OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
  OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
  OB1_DATE_TIME : DATE_AND_TIME ;   //Date and time OB1 started
END_VAR
BEGIN
NETWORK
TITLE =
      L     DB2.DBW    0; 
      T     MW    10; 
      CALL FB     1 , DB     1 (
           DBNR                     := 2,
           SET01                    := E      0.0,
           RESET01                  := E      0.1,
           RESET02                  := E      0.2,
           BIT00                    := DB2.DBX    0.0,
           BIT01                    := DB2.DBX    0.1,
           BIT02                    := DB2.DBX    0.2,
           BIT03                    := DB2.DBX    0.3,
           BIT04                    := DB2.DBX    0.4,
           BIT05                    := DB2.DBX    0.5,
           BIT06                    := DB2.DBX    0.6,
           BIT07                    := DB2.DBX    0.7,
           BIT10                    := DB2.DBX    1.0,
           BIT11                    := DB2.DBX    1.1,
           BIT12                    := DB2.DBX    1.2,
           BIT13                    := DB2.DBX    1.3,
           BIT14                    := DB2.DBX    1.4,
           BIT15                    := DB2.DBX    1.5,
           BIT16                    := DB2.DBX    1.6,
           BIT17                    := DB2.DBX    1.7);
      L     DB2.DBW    0; 
      T     MW    12; 
END_ORGANIZATION_BLOCK

Gruß Kai
 
Das Rücksetzen scheint zu funktionieren, wenn man im FB1 das ensprechende DW (DW4) im Instanz-DB (DB1) zurücksetzt.

Code:
Organisationsbaustein OB1
 
      CALL  FB     1 , DB1
       DBNR   :=1
       SET01  :=E0.0
       RESET01:=E0.1
       RESET02:=E0.2
       BIT00  :=DB2.DBX0.0
       BIT01  :=DB2.DBX0.1
       BIT02  :=DB2.DBX0.2
       BIT03  :=DB2.DBX0.3
       BIT04  :=DB2.DBX0.4
       BIT05  :=DB2.DBX0.5
       BIT06  :=DB2.DBX0.6
       BIT07  :=DB2.DBX0.7
       BIT10  :=DB2.DBX1.0
       BIT11  :=DB2.DBX1.1
       BIT12  :=DB2.DBX1.2
       BIT13  :=DB2.DBX1.3
       BIT14  :=DB2.DBX1.4
       BIT15  :=DB2.DBX1.5
       BIT16  :=DB2.DBX1.6
       BIT17  :=DB2.DBX1.7
Code:
Funktionsbaustein FB1
 
      UN    #RESET02
      SPB   M01
      L     #DBNR
      T     #DBNRW
      AUF   DB [#DBNRW]
      L     W#16#0
      T     DBW    4
M01:  NOP   0

Gruß Kai
 

Anhänge

  • OB1.pdf
    3,2 KB · Aufrufe: 5
  • FB1.pdf
    4,1 KB · Aufrufe: 3
  • DB1.pdf
    3,1 KB · Aufrufe: 4
  • DB2.pdf
    3,5 KB · Aufrufe: 2
Innerhalb eines FB ist der Instanz-DB über das DI-Register aufgeschlagen.

Man kann also im FB1 mit DIW direkt das entsprechende DW (DW4) im Instanz-DB (DW1) zurücksetzen:

Code:
Funktionsbaustein FB1
 
      UN    #RESET02
      SPB   M01
      L     W#16#0
      T     DIW    4
M01:  NOP   0

Gruß Kai
 

Anhänge

  • FB1_01.pdf
    4,1 KB · Aufrufe: 0
Zuviel Werbung?
-> Hier kostenlos registrieren
Tja, die Idee es im Instanzdatenbaustein zu machen hatte ich auch, nur daß es 1.) keine wirklich saubere Lösung ist und 2.) ich z.B. auch noch Bits des DBs ansprechen muss die gar nicht im FB deklariert sind.

Ich müsste also beides tun - den ganzen Bereich + die lokal verwendeten im DI ...

Das ist halt wieder so ne sache wo sich gerne Fehler einschleichen die man u.U. ewig suchen muss.

Ach ja, ich wollte mit der Thematik wieder die Kurve in diesen Thread http://www.sps-forum.de/showthread.php?p=78121#post78121 bekommen, sonst läuft das zu sehr auseinander...
 
Zurück
Oben