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

Ergebnis 1 bis 5 von 5

Thema: CFC / SCL - Nummer des Instanz-DB ermitteln?

  1. #1
    Registriert seit
    05.06.2007
    Beiträge
    1
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi ich habe folgendes Problem, bzw. Frage:
    Im CFC werden nach dem Generieren die Instanz-DB's zu vorhandenen FB's automatisch erzeugt.
    Nun bräuchte ich die Adresse bzw. Nummer des Instanz-DB's von einem gewählten FB, um diese in einem anderen Baustein auslesen zu können.
    Gibt es eine Funktion, mit der man die Nummer eines Instanz-DBs ermitteln kann?
    Der Zweck ist einfach, eine automatische Verbindung zwischen 2 fixen FBs herzustellen, ohne dass ein Anwender überhaupt eine Verbindung dazwischen herstellen muss und auch die Schnittstellenparameter nicht sieht und somit nicht verändern kann.
    Zitieren Zitieren CFC / SCL - Nummer des Instanz-DB ermitteln?  

  2. #2
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Ich habe dieses Problem auch gehabt....
    bei fertigen FB's konnte ich es nicht lösen, glaube auch nicht dass es lösbar ist.....

    Aber wenn Du selber einen FB schreibst müsste es mit:

    L DINO
    T OUT- Wert gehen

    diesen kann man dann mit einem passenden Eingang des nächsten CFC- Bausteines (auch selbergeschrieben) verschalten.... denke ich mal so.....

  3. #3
    Registriert seit
    11.10.2006
    Ort
    Verden (Aller)
    Beiträge
    532
    Danke
    31
    Erhielt 58 Danke für 49 Beiträge

    Standard

    Für SCL hab' ichs mal so gelöst:

    AuftragfachNr := SCL_DINO() - 131;


    und der SCL_DINO ist ein FC in dem bloß das folgende steht:

    L DINO
    T #RET_VAL

    RET_VAL ist vom Datentyp INT.
    "Ein lahmer Drecksplanet ist das, ich habe nicht das geringste Mitleid" (Prostetnik Vogon Jeltz)

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    ... es geht auch direkt im SCL-Code - allerdings ein bißchen umständlich ...
    Code:
    FUNCTION_BLOCK FB430    
    TITLE   = 'UP Get-I-DB-Nummer'   // UP Get-I-DB-Nummer
    AUTHOR  : 'LL'
    VERSION : '0.1' 
    //KNOW_HOW_PROTECT
     
    VAR_OUTPUT
       DB_Nummer : INT ;   // Nummer des I-DB
       DB_Offset : INT ;   // Offset-Adresse für den Begin des Datenbereichs
    END_VAR
    VAR
       Test_Var  : INT ; 
    END_VAR
    VAR_TEMP
       xAnyPointer : STRUCT
             ID_Code     : BYTE ;
             DataTyp     : BYTE ;
             Anzahl      : WORD ;
             DB_Nr       : WORD ;
             SpeicherPtr : DWORD ;
       END_STRUCT ;
       hAny AT xAnyPointer : ANY ;
    END_VAR
     
    BEGIN
    // Adresse des Datenbausteins für FB430 aufbereiten
       hAny := Test_Var ;
       DB_Offset := DWORD_TO_INT (SHR (IN:=(xAnyPointer.SpeicherPtr AND dw#16#00FF_FFFF) , N:=3)) ;
       DB_Nummer := WORD_TO_INT (xAnyPointer.DB_Nr) ;
     
    END_FUNCTION_BLOCK
    In meinem Beispiel wird die Offset-Adresse (Byte-Nummer) von der deklarierten "Test_Var" und die zugehörige DB-Nummer ausgegeben. Das kann man natürlich auch genauso gut intern weiter verwursten ...

    Gruß
    LL

  5. Folgende 2 Benutzer sagen Danke zu Larry Laffer für den nützlichen Beitrag:

    -ASDF- (04.12.2015),derwestermann (17.06.2008)

  6. #5
    Registriert seit
    08.08.2011
    Beiträge
    227
    Danke
    44
    Erhielt 8 Danke für 8 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... es geht auch direkt im SCL-Code - allerdings ein bißchen umständlich ...
    Code:
    FUNCTION_BLOCK FB430    
    TITLE   = 'UP Get-I-DB-Nummer'   // UP Get-I-DB-Nummer
    AUTHOR  : 'LL'
    VERSION : '0.1' 
    //KNOW_HOW_PROTECT
     
    VAR_OUTPUT
       DB_Nummer : INT ;   // Nummer des I-DB
       DB_Offset : INT ;   // Offset-Adresse für den Begin des Datenbereichs
    END_VAR
    VAR
       Test_Var  : INT ; 
    END_VAR
    VAR_TEMP
       xAnyPointer : STRUCT
             ID_Code     : BYTE ;
             DataTyp     : BYTE ;
             Anzahl      : WORD ;
             DB_Nr       : WORD ;
             SpeicherPtr : DWORD ;
       END_STRUCT ;
       hAny AT xAnyPointer : ANY ;
    END_VAR
     
    BEGIN
    // Adresse des Datenbausteins für FB430 aufbereiten
       hAny := Test_Var ;
       DB_Offset := DWORD_TO_INT (SHR (IN:=(xAnyPointer.SpeicherPtr AND dw#16#00FF_FFFF) , N:=3)) ;
       DB_Nummer := WORD_TO_INT (xAnyPointer.DB_Nr) ;
     
    END_FUNCTION_BLOCK
    In meinem Beispiel wird die Offset-Adresse (Byte-Nummer) von der deklarierten "Test_Var" und die zugehörige DB-Nummer ausgegeben. Das kann man natürlich auch genauso gut intern weiter verwursten ...

    Gruß
    LL
    Selbst nach über 7 Jahren noch nützlich!
    Wer Rechtschreibfehler findet, darf sie behalten!

Ähnliche Themen

  1. DB-Nummer in FB übergeben in SCL
    Von Der Bithirte im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 10.08.2010, 13:15
  2. DP/AS-I Link - Nummer
    Von rkoe1 im Forum Feldbusse
    Antworten: 1
    Letzter Beitrag: 04.01.2010, 08:03
  3. Im FB die Instanz-DB Nummer ermitteln
    Von Dotzi im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 13.02.2008, 11:33
  4. Antworten: 13
    Letzter Beitrag: 18.01.2008, 12:47
  5. Re: Nummer des Instanz- DB's ermitteln?
    Von Cliff im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 01.03.2007, 10:49

Lesezeichen

Berechtigungen

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