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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: Aus einer FB Struktur ein Wort auslesen

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, ich habe in einem FB eine STAT-Structure angelegt, die über 4Bytes geht. Dabei sind die einzelnen Bits angelegt worden und kommentiert.
    Nun will ich aber nur das erste Word als WORD auslesen. Wie mache ich das, da nur nur Bits projektiert sind?
    Zitieren Zitieren Aus einer FB Struktur ein Wort auslesen  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    Zeiger, indirekte Adressierung
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    ottopaul ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.01.2005
    Beiträge
    160
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Kanst du mir das genauer sagen?
    danke im voraus
    Zitieren Zitieren Aus einer FB Struktur ein Wort auslesen  

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    ... wie Ralle schon gesagt hat :
    im TEMP-Bereich Var hPointer : DWORD anlegen

    L p##erstes_Bit_aus_Structur
    t hPointer

    L DIW [hPointer]

    so ginge es zum Beispiel ...

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    Bei einer Struct ein ganz klein wenig anders:

    Code:
    FUNCTION_BLOCK FB 32
    TITLE =
    VERSION : 0.1
    
    
    VAR_OUTPUT
      Output : WORD ;    
    END_VAR
    VAR
      Otto : STRUCT     
       Bool_1 : BOOL ;    
       Bool_2 : BOOL ;    
       Bool_3 : BOOL ;    
       Bool_4 : BOOL ;    
       Bool_5 : BOOL ;    
       Bool_6 : BOOL ;    
       Bool_7 : BOOL ;    
       Bool_8 : BOOL ;    
       Bool_9 : BOOL ;    
       Bool_10 : BOOL ;    
       Bool_11 : BOOL ;    
       Bool_12 : BOOL ;    
       Bool_13 : BOOL ;    
       Bool_14 : BOOL ;    
       Bool_15 : BOOL ;    
       Bool_16 : BOOL ;    
       Bool_17 : BOOL ;    
       Bool_18 : BOOL ;    
      END_STRUCT ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
          L     P##Otto; 
          LAR1  ; 
    
          L     DIW [AR1,P#0.0]; 
          T     #Output; 
    END_FUNCTION_BLOCK
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. #6
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.811
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... wie Ralle schon gesagt hat :
    im TEMP-Bereich Var hPointer : DWORD anlegen

    L p##erstes_Bit_aus_Structur
    t hPointer

    L DIW [hPointer]

    so ginge es zum Beispiel ...

    l p##stucturname
    lar1

    l diw [ar1,p#0.0]


    zweites wort

    l diw [ar1,p#2.0]


    drittes bit vom zweiten wort

    u dix [ar1,p#2.2]
    Geändert von Markus (10.07.2007 um 17:44 Uhr)
    "Es ist weit besser, große Dinge zu wagen, ruhmreiche Triumphe zu erringen, auch wenn es manchmal bedeutet, Niederlagen einzustecken, als sich zu den Krämerseelen zu gesellen, die weder große Freude noch großen Schmerz empfinden, weil sie im grauen Zwielicht leben, das weder Sieg noch Niederlage kennt." Theodore Roosevelt - President of the United States (1901-1909)

  7. #7
    Registriert seit
    22.11.2005
    Ort
    kl.Odenwald
    Beiträge
    716
    Danke
    111
    Erhielt 85 Danke für 71 Beiträge

    Standard

    Hallo,

    ich hab das mal so gemacht - und ruf seitdem den FC auf:

    Code:
    FUNCTION FC326 : VOID
     
    TITLE = 'BitsToWord'
    //
    // Funktion: 16 Bits werden einem Word zugeordnet.
    //
    VERSION : '1.0'
    AUTHOR  : 'FA/ST'
    FAMILY  : 'CONVERT'
    // Bausteinparameter
    VAR_INPUT
      // Eingangsparameter
    BIT_1    :    BOOL;
    BIT_2    :    BOOL;
    BIT_3    :    BOOL;
    BIT_4    :    BOOL;
    BIT_5    :    BOOL;
    BIT_6    :    BOOL;
    BIT_7    :    BOOL;
    BIT_8    :    BOOL;
    BIT_9    :    BOOL;
    BIT_10    :    BOOL;
    BIT_11    :    BOOL;
    BIT_12    :    BOOL;
    BIT_13    :    BOOL;
    BIT_14    :    BOOL;
    BIT_15    :    BOOL;
    BIT_16    :    BOOL;
     
       END_VAR
    VAR_IN_OUT
      // Durchgangsparameter
    END_VAR
    VAR_OUTPUT
        WORD_OUT : WORD;
    END_VAR
     
    VAR_TEMP
      // temporäre Variablen
        I : INT;
        WORD_TMP : WORD;
        BITS: ARRAY[1..16] OF BOOL;
     
    END_VAR
    BITS[1    ]:=    BIT_1    ;
    BITS[2    ]:=    BIT_2    ;
    BITS[3    ]:=    BIT_3    ;
    BITS[4    ]:=    BIT_4    ;
    BITS[5    ]:=    BIT_5    ;
    BITS[6    ]:=    BIT_6    ;
    BITS[7    ]:=    BIT_7    ;
    BITS[8    ]:=    BIT_8    ;
    BITS[9    ]:=    BIT_9    ;
    BITS[10    ]:=    BIT_10    ;
    BITS[11    ]:=    BIT_11    ;
    BITS[12    ]:=    BIT_12    ;
    BITS[13    ]:=    BIT_13    ;
    BITS[14    ]:=    BIT_14    ;
    BITS[15    ]:=    BIT_15    ;
    BITS[16    ]:=    BIT_16    ;
      // Anweisungsteil
      WORD_TMP := B#16#0;
      FOR I := 0 TO 15  DO 
          WORD_TMP:=SHL(IN:=WORD_TMP,N:=1);    
          IF ((BITS[16-I]) = TRUE) THEN
            WORD_TMP := WORD_TMP OR B#16#01 ;
          ELSE
            WORD_TMP := WORD_TMP OR B#16#00 ;
          END_IF;
      END_FOR;
    // *********************
    //       Ausgabe  
    // *********************
       WORD_OUT :=WORD_TMP;
     
    END_FUNCTION
    hth
    Zitieren Zitieren Noch'n FC  

  8. #8
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.811
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard

    Zitat Zitat von kiestumpe Beitrag anzeigen
    Hallo,

    ich hab das mal so gemacht - und ruf seitdem den FC auf:

    Code:
    FUNCTION FC326 : VOID
     
    TITLE = 'BitsToWord'
    //
    // Funktion: 16 Bits werden einem Word zugeordnet.
    //
    VERSION : '1.0'
    AUTHOR  : 'FA/ST'
    FAMILY  : 'CONVERT'
    // Bausteinparameter
    VAR_INPUT
      // Eingangsparameter
    BIT_1    :    BOOL;
    BIT_2    :    BOOL;
    BIT_3    :    BOOL;
    BIT_4    :    BOOL;
    BIT_5    :    BOOL;
    BIT_6    :    BOOL;
    BIT_7    :    BOOL;
    BIT_8    :    BOOL;
    BIT_9    :    BOOL;
    BIT_10    :    BOOL;
    BIT_11    :    BOOL;
    BIT_12    :    BOOL;
    BIT_13    :    BOOL;
    BIT_14    :    BOOL;
    BIT_15    :    BOOL;
    BIT_16    :    BOOL;
     
       END_VAR
    VAR_IN_OUT
      // Durchgangsparameter
    END_VAR
    VAR_OUTPUT
        WORD_OUT : WORD;
    END_VAR
     
    VAR_TEMP
      // temporäre Variablen
        I : INT;
        WORD_TMP : WORD;
        BITS: ARRAY[1..16] OF BOOL;
     
    END_VAR
    BITS[1    ]:=    BIT_1    ;
    BITS[2    ]:=    BIT_2    ;
    BITS[3    ]:=    BIT_3    ;
    BITS[4    ]:=    BIT_4    ;
    BITS[5    ]:=    BIT_5    ;
    BITS[6    ]:=    BIT_6    ;
    BITS[7    ]:=    BIT_7    ;
    BITS[8    ]:=    BIT_8    ;
    BITS[9    ]:=    BIT_9    ;
    BITS[10    ]:=    BIT_10    ;
    BITS[11    ]:=    BIT_11    ;
    BITS[12    ]:=    BIT_12    ;
    BITS[13    ]:=    BIT_13    ;
    BITS[14    ]:=    BIT_14    ;
    BITS[15    ]:=    BIT_15    ;
    BITS[16    ]:=    BIT_16    ;
      // Anweisungsteil
      WORD_TMP := B#16#0;
      FOR I := 0 TO 15  DO 
          WORD_TMP:=SHL(IN:=WORD_TMP,N:=1);    
          IF ((BITS[16-I]) = TRUE) THEN
            WORD_TMP := WORD_TMP OR B#16#01 ;
          ELSE
            WORD_TMP := WORD_TMP OR B#16#00 ;
          END_IF;
      END_FOR;
    // *********************
    //       Ausgabe  
    // *********************
       WORD_OUT :=WORD_TMP;
     
    END_FUNCTION
    hth

    für meinen geschmack zu kompliziert, zu aufgebalsen und zu langsam...

    abgesehen davon frisst der fc aufruf mehr zeilen als die awl um das über einen pointer zu machen...
    "Es ist weit besser, große Dinge zu wagen, ruhmreiche Triumphe zu erringen, auch wenn es manchmal bedeutet, Niederlagen einzustecken, als sich zu den Krämerseelen zu gesellen, die weder große Freude noch großen Schmerz empfinden, weil sie im grauen Zwielicht leben, das weder Sieg noch Niederlage kennt." Theodore Roosevelt - President of the United States (1901-1909)

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

    Standard

    Zitat Zitat von Markus Beitrag anzeigen

    l p##stucturname
    lar1

    l diw [ar1,p#0.0]


    zweites wort

    l diw [ar1,p#2.0]


    drittes bit vom zweiten wort

    u dix [ar1,p#2.2]
    Bei einer registerindirekten bereichsexternen (bereichsübergreifenden) Adressierung kann man auch schreiben:

    Zitat Zitat von Markus Beitrag anzeigen

    l p##stucturname
    lar1

    l w [ar1,p#0.0]


    zweites wort

    l w [ar1,p#2.0]


    drittes bit vom zweiten wort

    u [ar1,p#2.2]
    Gruß Kai

  10. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Kai Beitrag anzeigen
    Bei einer registerindirekten bereichsexternen (bereichsübergreifenden) Adressierung kann man auch schreiben:

    Gruß Kai
    Ich brüll mich grad fast weg, Markus, uns fehlt noch ein smiliey wo einer mit den Fäusten vor sich auf dem Boden rumdrischt !
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Wort aus SPS mit AGLink auslesen
    Von Sandra im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 12.03.2010, 14:05
  2. Länge einer Struktur im DB ermitteln
    Von Knut333 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 22.01.2009, 18:04
  3. DB Bit aus Wort auslesen
    Von Stromer im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 17.02.2007, 20:43
  4. Daten aus einer S5 auslesen !!!
    Von ZeroCool im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 19.09.2005, 09:46
  5. Betriebsart einer S7 auslesen (Run/Run_P)
    Von Anonymous im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 28.04.2004, 20:32

Lesezeichen

Berechtigungen

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