Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 3 von 3

Thema: DP-Diagnosebaustein FC125 Einsatz in SCL

  1. #1
    Registriert seit
    23.05.2012
    Beiträge
    23
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Liebe Mitglieder des SPS-Forums.

    nachdem ich gestern bereits ein Thema gepostet habe, habe ich schon wieder ein kleineres Problemchen.
    Und zwar möchte ich gerne den FC125 aufrufen und versorgen.
    Ich habe mir dazu Any-Pointer gebastelt und übergebe die Daten an den FC.
    Wenn ich den FC in die CPU lade, bekomme ich an der CPU (CPU319) einen Systemfehler und im Diagnosepuffer die Fehlermeldung "Bereichsfehler beim Schreiben" bzw. "Bereichsfehler beim Lesen".
    Beim klick auf die Hilfe erscheint dann folgender Text:
    Ursache:

    Sie haben bei der bereichsübergreifenden registerindirekten Adressierung einen unzulässigen Operandenbereich verwendet. Die Bereichskennung der Zugriffsadresse (Bit 24 -31) ist unzulässig.

    Behebung:

    Verwenden Sie einen Pointer mit korrekter Bereichskennung.

    Somit liegt der Fehler wohl in einer Definition der Pointer.

    Code:
    //=============================================================================
    //This function will handle the global settings of the plant program.
    //FC7
    FUNCTION CommGeneral : VOID
     TITLE = 'Communication, Visualisizing General'
    // KNOW_HOW_PROTECT
     AUTHOR  :Maier
     FAMILY  :Comm
     NAME    :VisGen
     VERSION :'1.0'
    
      VAR_TEMP
       dummy0      :WORD;
       dummy2      :WORD;                    // do not enter any declaration before
       dummy4      :WORD;
       LedCounter  :DWORD;
       x320        :INT;
       Byteindex   :INT;
       DataField:ANY;  // Symbolischer Name des ANY Pointers
        dwDataField AT DataField: STRUCT  // Mit dem  AT Befehl wird der gleiche Bereich in einer anderen Form définiert
           ID  : WORD;  // ID für ANY (1002 hex = es wird mit Bytes gearbeitet)
           NBR : INT;    // Anzahl Daten
           DBN : INT;   // DB der im ANY Pointer benutzt wird ANY
           PTR : DWORD; // Pointer Doppelwort um den Angfang des Datenbereichs und den Datentyp zu definieren (84hex = DB Datentyp)
        END_STRUCT;
          ListSlavesNotPresent:ANY;  
        dwListSlavesNotPresent AT ListSlavesNotPresent: STRUCT
           ID  : WORD; 
           NBR : INT;
           DBN : INT;
           PTR : DWORD;
        END_STRUCT; 
          ListSlavesError:ANY; 
        dwListSlavesError AT ListSlavesError: STRUCT
           ID  : WORD;
           NBR : INT; 
           DBN : INT; 
           PTR : DWORD;
        END_STRUCT; 
       SumSlavesDiag_I   : INT;    
       RetVal_I    : INT;    
       LedID       :WORD;   
       LedStatus   :BYTE;    
       DummyWord   :INT;  
       SZL_HEADER  :STRUCT     
           LENTHDR :WORD;    
           N_DR    :WORD;    
       END_STRUCT;     
      END_VAR
    
      BEGIN
                                                // Read Profibus mastersystems status info
                                             
      "CommProfibus".x320 := 0;
      x320 := BYTE_TO_INT("CommProfibus".x320);
      
        FOR x320 := 0 TO 96 BY 1 DO
             Byteindex := 700+x320; 
             "CommProfibus".DB[Byteindex] :=0;  // Clear Datafields DB4.DBB700 - DB4.DBB796  
            
        END_FOR;
        
        // Aufbauen des ANY Pointers der Quelle (VON) (z.B. P#DB150.DBX10.0 BYTE 100)
        
        dwDataField.ID  := 16#1002;  // ID 10 et 02 um mit Bytes zu arbeiten
        dwDataField.NBR := 50;  // entspricht BYTE 100. Könnte eine Variable sein.
        dwDataField.DBN := 4; // DB 150
        dwDataField.PTR := 16#2BC; //INT_TO_DWORD (700);// OR 16#8400_0000;  // Pointer zeigt zuf Bit, deshalb 8*Byte Nummer
        
        dwListSlavesNotPresent.ID  := 16#1002;  // ID 10 et 02 um mit Bytes zu arbeiten
        dwListSlavesNotPresent.NBR := 16;  // entspricht BYTE 100. Könnte eine Variable sein.
        dwListSlavesNotPresent.DBN := 4; // DB 150
        dwListSlavesNotPresent.PTR := 16#2BC; //INT_TO_DWORD (760);// OR 16#8400_0000;  // Pointer zeigt zuf Bit, deshalb 8*Byte Nummer
    
        dwListSlavesError.ID  := 16#1002;  // ID 10 et 02 um mit Bytes zu arbeiten
        dwListSlavesError.NBR := 16;  // entspricht BYTE 100. Könnte eine Variable sein.
        dwListSlavesError.DBN := 4; // DB 150
        dwListSlavesError.PTR := 16#2BC; //INT_TO_DWORD (780);// OR 16#8400_0000;  // Pointer zeigt zuf Bit, deshalb 8*Byte Nummer
        
       
       MW5000 := dwDataField.ID;
       MW5002 := INT_TO_WORD(dwDataField.NBR);
       MW5004 := INT_TO_WORD(dwDataField.DBN);
       MD5008 := dwDataField.PTR;
       
        SumSlavesDiag_I:= WORD_TO_INT(DB4.DW752);  
        RetVal_I:= WORD_TO_INT(DB4.DW754);
        
    DP_Diagnose(CHECK_ACTIV := TRUE,            // +++ FC125 DP Diagnose Auslesen
                EXTERNAL_DP_INTERFACE := FALSE,
                DP_MASTERSYSTEM := 1,
                DATA_FIELD := DataField,
                SUM_SLAVES_DIAG := SumSlavesDiag_I,
                LIST_SLAVES_NOT_PRESENT := ListSlavesNotPresent,
                LIST_SLAVES_ERROR := ListSlavesError,
                RETVAL := RetVal_I, 
                BUSY := DB4.DX756.0);
    
    DB4.DW752 := INT_TO_WORD(SumSlavesDiag_I);
    DB4.DW754 := INT_TO_WORD(RetVal_I);
    
    END_FUNCTION
    Ich hoffe es kann mir jemand helfen.

    Gruß
    Zitieren Zitieren DP-Diagnosebaustein FC125 Einsatz in SCL  

  2. #2
    Registriert seit
    07.06.2011
    Beiträge
    117
    Danke
    4
    Erhielt 18 Danke für 18 Beiträge

    Standard

    Hallo,

    der Pointer stimmt nicht:

    Code:
    dwDataField.PTR := 16#2BC; //INT_TO_DWORD (700);// OR 16#8400_0000;  // Pointer zeigt zuf Bit, deshalb 8*Byte Nummer

    Für den Speicherbereich ab DBX700.0 müsste das vermutlich so aussehen:

    Code:
    dwDataField.PTR := 16#8400_15E0; //INT_TO_DWORD (700);// OR 16#8400_0000;  // Pointer zeigt zuf Bit, deshalb 8*Byte Nummer
    Mario

  3. Folgender Benutzer sagt Danke zu MRose für den nützlichen Beitrag:

    bayernburn (13.06.2012)

  4. #3
    bayernburn ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.05.2012
    Beiträge
    23
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Vielen Dank MRose,

    das war das Problem. Anfänger halt!

Ähnliche Themen

  1. Profibusteilnehmer FC125
    Von Pinguino im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 10.05.2010, 15:46
  2. Profibusdiagnose FC125/FB125
    Von Heizerfraktion im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 06.10.2009, 14:01
  3. FC125 Problem
    Von Pikador im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 21.01.2009, 07:53
  4. FC125 Auswertung
    Von moeller im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 13.09.2006, 21:34
  5. Diagnosebaustein für PA?
    Von Mainzl0r im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 30.08.2006, 11:04

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •