TIA Block_DB bei einer 1200er

Manfred Stangl

Level-1
Beiträge
944
Reaktionspunkte
174
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen Kollegen!

TIA V12
CPU 1212

Ich hab bei einer 300er den unten stehenden Code für eine Summenstörmeldung geschrieben. Unter anderem den Meldungs DB als Input Block_DB.
Jetzt kann die 1200er aber keinen Block_DB sondern nur DB_ANY
Zitat aus der TIA Portal Hilfe:
DB_ANY UINT Identifikation (Nummer) eines beliebigen DBs
.
So, nun deklariere ich anstatt Block_DB einen DB_Any, aber dann mag er den rot markierten Teil nicht mehr:

Code:
FUNCTION FC95 : VOID             // check if 1 bit true
TITLE   = '"Common Alarm"'       // check if 1 bit true
AUTHOR  : 'MS'
VERSION : '2.0'                  // 18.11.2011
//KNOW_HOW_PROTECT
   
// --------------------------------------------------------------------------------------
//    Baustein-Parameter
// --------------------------------------------------------------------------------------
VAR_INPUT
  Reset             : BOOL ;        // Reset Commomn_Alarm
  Message_DB        : BLOCK_DB ;    // Number of DB where the messages are generated
  Alarm_begin       : INT ;         // DB_Word where the messages are starting
  Alarm_end         : INT ;         // DB_Word where the messages are ending
END_VAR
VAR_IN_OUT
  Common_Alarm      : BOOL ;        // Common Alarm of the area
END_VAR
VAR_OUTPUT
END_VAR
VAR_TEMP
  Length            : INT ;         // Length of the area in the DB
  actual_bit        : BOOL ;        // Actual bit of searching
  i                 : INT ;         // loop variable
  j                 : INT ;         // loop variable
END_VAR  
// -----------------------------------------------------------------------------------------------------------------------
BEGIN
// -----------------------------------------------------------------------------------------------------------------------
Length := Alarm_end - Alarm_begin ;
        
IF Reset THEN
    Common_Alarm := false ;
END_IF ;
        
FOR i := Alarm_begin TO Alarm_end BY 1 DO 
    FOR j := 0 TO 15 BY 1 DO
        actual_bit := [COLOR=#ff0000]Message_DB.DX[i, j] ;[/COLOR]
        IF actual_bit THEN 
            Common_Alarm := true ;
        END_IF ;
    END_FOR ;
END_FOR ;
// -----------------------------------------------------------------------------------------------------------------------
END_FUNCTION
// -----------------------------------------------------------------------------------------------------------------------

Kann mir jemand helfen?
 
1. MessageDB mal als "DB_Any" deklarieren.
2. Die Zeile mit actual_bit= ersetzen durch:

#actual_bit:=PEEK_BOOL(area:=16#84, dbNumber:=#Message_DB, byteOffset:=#i, bitOffset:=#j);

Das übersetzt der Compiler zumindest mal.
 
Zurück
Oben