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

Ergebnis 1 bis 5 von 5

Thema: Bytenummer herausfinden von Bit?

  1. #1
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi

    Ich würde gerne an einen SCL Baustein einen Eingang anhängen vom Format Bool. Hier wird dann z.B. DB10.dbx10.4 angeschlossen.

    Ist es möglich das ich da irgendwie im Baustein herausfinden kann aus welchem Byte diese Adresse ist?

    Also ich schliese db10.dbx 10.4 an und im Baustein kriege ich dann einen Int von 10.

    mfG René
    Zitieren Zitieren Bytenummer herausfinden von Bit?  

  2. #2
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Rausgriegen kannst du es nur wenn der Eingang vom Typ Pointer ist und nicht Bool, das mich Ich auch in einem Projekt so (in AWL)

    Ob es allerdings in SCL überhaupt möglich ist, weiss ich nicht, glaube es aber nicht!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  3. #3
    Registriert seit
    30.06.2007
    Ort
    Minden (Westf.)
    Beiträge
    178
    Danke
    42
    Erhielt 21 Danke für 21 Beiträge

    Standard

    Hallo, das geht auch in SCL. Ich habe neulich etwas ähnliches gemacht:

    Als IN- Variable ein Pointer (an dem im Aufruf dann ein BOOL steht):
    Code:
    // Bausteinparameter
    VAR_INPUT
        // Eingangsparameter
        i_bo1AST : POINTER;
        ibo1AST AT i_bo1AST :                //Pointer in seine Struktur auflösen.
            STRUCT
                DBNr: WORD;
                Adr: DWORD;                     //Adresse des Eingangs
            END_STRUCT;
    END_VAR
    und so bekommt man die Infos aus dem Zeiger:
    Code:
    (* Speicherbereich bestimmen *)
        Area := DWORD_TO_INT( SHR(IN := ibo1AST.Adr, N := 24) );
        (* Bits rausschieben, Speicherbereich wird durch DWORD_TO_INT ausmaskiert *)
        byteAdr := DWORD_TO_INT( SHR(IN := ibo1AST.Adr, N := 3) );
        bitAdr := DWORD_TO_INT (ibo1AST.Adr AND 16#00000007);
        CASE (Area) OF
            16#81:
                xTest := E[byteAdr, bitAdr];
                s_Adr := 'E';
            16#82:
                xTest := A[byteAdr, bitAdr];
                s_Adr := 'A';
            16#83:
                xTest := M[byteAdr, bitAdr];
                s_Adr := 'M';
        (* hier andere Fälle abfangen.... *)
        END_CASE;
    Area ist ein INT.

    Folgende Speicherbereiche können in "Area" auftauchen:

    80: Peripherie
    81: Eingänge
    82: Ausgänge
    83: Merker
    84: Datenbaustein
    85: Instanzdatenbaustein
    86: Lokaldaten (L-Stack)
    87: Vorherige Lokaldaten

    Die eigentliche Kernfunktion habe ich übrigens hier im Forum gefunden.

    Gruß
    Stefan


    Zitieren Zitieren doch, doch...  

  4. Folgender Benutzer sagt Danke zu StefanK für den nützlichen Beitrag:

    vollmi (18.01.2011)

  5. #4
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Wenn Du nur das Byte willst, geht es auch kürzer:
    Code:
    // Bausteinparameter
    VAR_INPUT
        // Eingangsparameter
        i_Eingang : POINTER;
        t_Eingang AT i_Eingang :          //Pointer in seine Struktur auflösen.
            STRUCT
                DBNr: WORD;
                Adr: DWORD;               //Byte Adresse des Eingangs
            END_STRUCT;
    END_VAR
     
    VAR_OUTPUT
       o_Byte : INT;
    END_VAR
     
       Adr := DWORD_TO_INT(SHR(IN:=SHL(IN:=t_Eingang.Adr,N:=8),N:=11));
     
       o_Byte := Adr;
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  6. Folgender Benutzer sagt Danke zu Paule für den nützlichen Beitrag:

    vollmi (18.01.2011)

  7. #5
    Avatar von vollmi
    vollmi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Super Danke euch. So funktionierts. Das man die DB Nummer für Block_DB so auch gleich hat ist noch ein nettes Gimmick

Ähnliche Themen

  1. Belegung SSNR herausfinden
    Von GertL im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 24.10.2011, 21:19
  2. DB Datentyp herausfinden
    Von The-Cook im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 04.06.2009, 15:20
  3. Herausfinden, wann ein programm installiert wurde
    Von olitheis im Forum PC- und Netzwerktechnik
    Antworten: 3
    Letzter Beitrag: 24.03.2009, 14:34
  4. Adresse herausfinden
    Von Knoll im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 07.09.2006, 10:02

Lesezeichen

Berechtigungen

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