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

Ergebnis 1 bis 10 von 10

Thema: Parameter als ANY - Boolwert auslesen

  1. #1
    Registriert seit
    29.05.2008
    Beiträge
    9
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe einen FB, bei dem ein Eingangsparameter als ANY definiert ist. Beim Aufruf habe ich z.B. E10.0 angegeben.

    Wie kann ich jetzt den Statuswert des Eingang im FB ermitteln?

    Probiert habe ich folgendes, leider klappt es allerdings nicht:
    Code:
    LAR1  P##E_Z2
    U      [AR1,P#0.0]
    =     #Int_E_Z2
    #Int_E_Z2 ist eine temporäre Variable vom Typ Bool, mit der ich intern dann weiterarbeiten möchte.

    Edit:

    Ok, ich bin schon etwas weiter...

    Code:
    LAR1  P##E_Z2 //ANY-Zeiger laden
    L     D [AR1,P#6.0] //Speicherbereich und Adresse
    LAR1 //in das Adressregister 1
    U      [AR1,P#0.0] 
    =     #Int_E_Z2
    Geändert von guidokk (18.06.2009 um 15:33 Uhr)
    Zitieren Zitieren Parameter als ANY - Boolwert auslesen  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Ist dein Problem nun gelöst oder hast du dazu noch eine Frage ...?

  3. #3
    guidokk ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.05.2008
    Beiträge
    9
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Mein Problem ist hiermit gelöst. Die Lösung, die ich selbst gefunden habe (siehe oben) funktioniert.

    Einzige Frage wäre jetzt: Geht das auch einfacher?

  4. #4
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von guidokk Beitrag anzeigen
    Einzige Frage wäre jetzt: Geht das auch einfacher?
    Nein, das geht leider nicht einfacher.

    Gruß Kai

  5. #5
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.616
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard

    Warum ist der Eingangsparameter ein ANY und nicht ein BOOL ?

    Weill du ein Art Standard-Struktur hast, wo das Erste bit ein BOOL ist ?

    Ich wurde diese Struktur als ein UDT erstellen, mit ein BOOL als erste Parameter usw.
    Dann definier der Eingansparameter als der UDT, anstatt als ANY.
    Du kannst denn komfortabel die Struktur zugreifen in dein Code.

    Es passiert eigentlich dasselbe als mit der ANY, aber ist dann komplett Symbolisch und dadurch 'einfacher'.
    Jesper M. Pedersen

  6. #6
    guidokk ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.05.2008
    Beiträge
    9
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von JesperMP Beitrag anzeigen
    Warum ist der Eingangsparameter ein ANY und nicht ein BOOL ?
    Weil ich die zusätzlichen Informationen, die in einem ANY stecken im FB benötige, d.h. ich muss im FB prüfen, ob ein gültiger Operand am Eingang ist usw.

    Wobei mir grad auffällt, mit einem POINTER müsste das ja auch gehen. Hm.

  7. #7
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.616
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard

    Pack es zusammen in ein UDT.
    Es ist einfacher.
    Jesper M. Pedersen

  8. #8
    guidokk ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.05.2008
    Beiträge
    9
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von JesperMP Beitrag anzeigen
    Pack es zusammen in ein UDT.
    Es ist einfacher.
    Tut mir leid, ich kann da leider nicht folgen, wie du das meinst. Ich sehe nicht, wie mir ein UDT hier helfen soll.

  9. #9
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.616
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard

    Hier ist ein Beispiel.
    Ich weiss nicht genau wie deine Daten sind strukturiert, aber Du siehst was ich meine.
    In mein Beispiel wird getestet ob ein BOOL=TRUE ist und ob ein INT=2 ist.

    (STL Source)
    Code:
    TYPE "My_UDT"
    VERSION : 0.1
    
      STRUCT  
       bi1 : BOOL ; 
       bi2 : BOOL ; 
       in1 : INT ; 
       in2 : INT ; 
      END_STRUCT ; 
    END_TYPE
    DATA_BLOCK "Test_data"
    TITLE =
    VERSION : 0.1
    
      STRUCT  
       set1 : "My_UDT"; 
       set2 : "My_UDT"; 
      END_STRUCT ; 
    BEGIN
       set1.bi1 := FALSE; 
       set1.bi2 := FALSE; 
       set1.in1 := 0; 
       set1.in2 := 0; 
       set2.bi1 := FALSE; 
       set2.bi2 := FALSE; 
       set2.in1 := 0; 
       set2.in2 := 0; 
    END_DATA_BLOCK
    
    FUNCTION "FC_test_udt" : VOID
    VAR_INPUT
      MyData : "My_UDT"; 
    END_VAR
    VAR_OUTPUT
      result : BOOL ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =
          A     #MyData.bi1; 
          A(    ; 
          L     #MyData.in1; 
          L     2; 
          ==I   ; 
          )     ; 
          =     #result; 
    END_FUNCTION
     
    ORGANIZATION_BLOCK OB 1
    BEGIN
    NETWORK
    TITLE =
          CALL "FC_test_udt" (
               MyData                   := "Test_data".set1,
               result                   := M     10.0);
          NOP   0; 
    NETWORK
    TITLE =
          CALL "FC_test_udt" (
               MyData                   := "Test_data".set2,
               result                   := M     10.1);
          NOP   0; 
    END_ORGANIZATION_BLOCK
    Jesper M. Pedersen

  10. #10
    Registriert seit
    27.11.2008
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Und wo ein FB ist, bin ich immer ein wenig vorsichtig mit dem einfachen Laden eines Parameter, da ja so ein FB auch als Multiinstanz verwendet werden kann und somit der Offset des Adressregister 2 addiert werden muss, damit man nicht lediglich die relative sondern die absolute Adresse des Parameters im Instanz-DB erwischt

    Code:
    L  P##E_Z2           //Relative Adresse ANY-Zeiger laden
    UD DW#16#FFFFFF      //Bereichscodierung entfernen
    TAR2                 //AR2 mit Multiinstanz-Offset laden
    UD DW#16#FFFFFF      //Ebenfalls Bereichscodierung entfernen
    +D                   //Adresse des ANY-Zeigers auf Multiinstanz-Adresse addieren
    LAR1                 //Tatsächliche Adresse ANY-Zeiger in AR1 laden 
    L   DID [AR1,P#6.0]  //Bereichscodierung "DID" + bereichsinterner Zeiger in AR1
                         //+ 6 Byte Offset (P#6.0; wg. ANY-Pointer)
                         //= Tatsächliche Adresse in Instanz-DB 
    LAR1                 //Und jetzt wie gehabt weiter...
    U     [AR1,P#0.0] 
    =     #Int_E_Z2

Ähnliche Themen

  1. SFC 102 Parameter auslesen
    Von marsi im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 07.10.2011, 16:17
  2. Wert eines ANY-Parameter in SCL auslesen
    Von U.Schmidt im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.09.2010, 14:37
  3. SINAMICS - beliebigen Parameter auslesen ?
    Von moeins im Forum Antriebstechnik
    Antworten: 5
    Letzter Beitrag: 14.05.2008, 08:00
  4. MM420 Parameter auslesen
    Von Buchholz im Forum Feldbusse
    Antworten: 16
    Letzter Beitrag: 17.11.2006, 13:13
  5. MM420 Parameter auslesen
    Von Buchholz im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 13.11.2006, 13:05

Lesezeichen

Berechtigungen

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