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

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

Thema: SCL: Auf Bits eines Word zugreifen.

  1. #1
    Registriert seit
    19.02.2005
    Beiträge
    199
    Danke
    12
    Erhielt 8 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    ich möchte in SCL auf die Bits eines Word zugreifen.
    Die Variable "A" sagt mir, auf welches Bit.
    Das Word heisst MyWord.
    Gibt es da in SCL nicht irgendwie einen eleganten Trick, wie ich
    MyWord[A]:= true;
    machen könnte?
    Linux is like a Wigwam: no Windows, no Gates and Apache inside.
    Zitieren Zitieren SCL: Auf Bits eines Word zugreifen.  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    schau mal z.Bsp. hier: http://www.sps-forum.de/showthread.p...ghlight=AT+SCL

    oder du suchst nach "AT"
    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
    Aksels ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.02.2005
    Beiträge
    199
    Danke
    12
    Erhielt 8 Danke für 6 Beiträge

    Standard

    Das wars. Hab nur um eine falsche Ecke gedacht. Oder gedanklich zu spät abgebogen.

    Danke!
    Linux is like a Wigwam: no Windows, no Gates and Apache inside.
    Zitieren Zitieren Perfekt!  

  4. #4
    Aksels ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.02.2005
    Beiträge
    199
    Danke
    12
    Erhielt 8 Danke für 6 Beiträge

    Standard

    Ich möchte als input 16 bools haben.
    Also als Input fixeinen Array[0..15] of bool deklariert. Der bringt mir aber wenn ich eine Instanz erzeuge tatsächlich einen einzigen Input-Strick vom Typ Array [0..15] of Bool.
    Ich will aber 16 einzelne bools.
    Also habe ich an AT gedacht, die eingänge I_F_00 bis IF_15 als bool deklariert.
    Mit AT bekommen ich aber nur den drüberliegenden eingestellt, also AT "I_F_15".
    Ich brauche aber AT "I_F_00 länge 16Bit" Array [0..15] of Bool.
    Sonst finktioniert in SCL doch meine for-Schleife nicht.
    Wie mache ich das nur?
    Geändert von Aksels (27.10.2011 um 19:30 Uhr)
    Linux is like a Wigwam: no Windows, no Gates and Apache inside.
    Zitieren Zitieren Nochmal was ähnliches:  

  5. #5
    Registriert seit
    27.08.2003
    Ort
    Schweitenkirchen
    Beiträge
    472
    Danke
    101
    Erhielt 73 Danke für 59 Beiträge

    Standard

    Hmm, unter Ralles Link hats doch Larry beschrieben.

    Code:
    myVar1 : WORD ;
    myVar2 AT myVar1 : struct
                                  Byte1 : byte ;
                                  Byte2 : byte ;
                                  end_struct ;
     myVar3 AT myVar1 : array[0..15] of Bool ;  usw.
    Mit myVar3[i]hast du Zugriff auf die einzelnen Bools
    Als INput mit deinen 16Bits dient myVar1 als Wort...
    Geändert von Zefix (28.10.2011 um 02:20 Uhr)
    Wenn ich einen meiner Finger in eines deiner Nasenlöcher stecke, haben wir beide nen Finger in der Nase

  6. #6
    Aksels ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.02.2005
    Beiträge
    199
    Danke
    12
    Erhielt 8 Danke für 6 Beiträge

    Standard

    dieses nicht:
    Input:
    I_F_00 :bool;
    I_F_01 :bool;
    I_F_02 :bool;
    I_F_03 :bool;
    I_F_04 :bool;
    I_F_05 :bool;
    I_F_06 :bool;
    I_F_07 :bool;
    I_F_08 :bool;
    I_F_09 :bool;
    I_F_10 :bool;
    I_F_11 :bool;
    I_F_12 :bool;
    I_F_13 :bool;
    I_F_14 :bool;
    I_F_15 :bool;
    I_F_Arr AT I_F_00 : Array [0..15] of Bool;

    Letzteres brauche ich für meine For-schleife. Die 16 Inputs drüber für das externe Befüttern.
    Aber er nimmt das so nicht an.
    Aber wie verkaufe ich das dem Compiler, daß er ab I_F_00 16 Bits nehmen soll für das AT?
    Linux is like a Wigwam: no Windows, no Gates and Apache inside.
    Zitieren Zitieren Das klappte ja schon, aber....  

  7. #7
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.570
    Danke
    63
    Erhielt 258 Danke für 218 Beiträge

    Standard

    Dann ist Deine Eingangsvariable ja kein WORD sondern 16 einzelne Bits...

    Entweder die Bits liegen (außerhalb) in einem Wortbereich und Du trägst ein WORD an die Eingangsvariable an, oder Du musst Dir die Eingänge umkopieren.

    Code:
    VAR_INPUT
    I_F_00 :bool;
    I_F_01 :bool;
    I_F_02 :bool;
    I_F_03 :bool;
    I_F_04 :bool;
    I_F_05 :bool;
    I_F_06 :bool;
    I_F_07 :bool;
    I_F_08 :bool;
    I_F_09 :bool;
    I_F_10 :bool;
    I_F_11 :bool;
    I_F_12 :bool;
    I_F_13 :bool;
    I_F_14 :bool;
    I_F_15 :bool;
    END_VAR
    
    VAR_TEMP
    I_F : Array [0..15] of Bool;
    END_VAR
    
    BEGIN
    I_F[0]:= I_F_00;
    ...
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  8. Folgender Benutzer sagt Danke zu Tigerente1974 für den nützlichen Beitrag:

    Aksels (28.10.2011)

  9. #8
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    oder über einen Any-Pointer und den SFC20 "BLKMOV".

    Code:
    ...
    VAR_INPUT
      I_F_00 : BOOL;
      I_F_01 : BOOL;
      I_F_02 : BOOL;
      I_F_03 : BOOL;
      I_F_04 : BOOL;
      I_F_05 : BOOL;
      I_F_06 : BOOL;
      I_F_07 : BOOL;
      I_F_08 : BOOL;
      I_F_09 : BOOL;
      I_F_10 : BOOL;
      I_F_11 : BOOL;
      I_F_12 : BOOL;
      I_F_13 : BOOL;
      I_F_14 : BOOL;
      I_F_15 : BOOL;
    END_VAR
    
    VAR_TEMP
      I_F : ARRAY [0..15] OF BOOL;
      tRetVal : INT;
      tANY : ANY;
    END_VAR
    
    BEGIN
    
      tANY := I_F_00;
    
      tRetVal := BLKMOV(SRCBLK := tANY, DSTBLK := I_F);
    ...
    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  10. #9
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    natürlich muss die Länge noch angepasst werden.

    Code:
    ...
    VAR_TEMP
      I_F : ARRAY [0..15] OF BOOL;
      tRetVal : INT;
      tANY : ANY;
      _ANY AT tANY : STRUCT
        id : BYTE;
        DataType : BYTE;
        Lenght : WORD;
        DBNo : WORD;
        BytePointer : DWORD;
      END_STRUCT;
    END_VAR
    
    BEGIN
    
      tANY := I_F_00;
      _ANY.Lenght := W#16#10; //16 Stück
      tRetVal := BLKMOV(SRCBLK := tANY, DSTBLK := I_F);
    ...
    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  11. Folgende 2 Benutzer sagen Danke zu dalbi für den nützlichen Beitrag:

    Aksels (28.10.2011),Tigerente1974 (28.10.2011)

  12. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von dalbi Beitrag anzeigen
    Hi,

    natürlich muss die Länge noch angepasst werden.

    Code:
    ...
    VAR_TEMP
      I_F : ARRAY [0..15] OF BOOL;
      tRetVal : INT;
      tANY : ANY;
      _ANY AT tANY : STRUCT
        id : BYTE;
        DataType : BYTE;
        Lenght : WORD;
        DBNo : WORD;
        BytePointer : DWORD;
      END_STRUCT;
    END_VAR
    
    BEGIN
    
      tANY := I_F_00;
      _ANY.Lenght := W#16#10; //16 Stück
      tRetVal := BLKMOV(SRCBLK := tANY, DSTBLK := I_F);
    ...
    Gruss Daniel
    Bei einem FC in AWL funktionierte ein ähnliches Construct mit dem Any aus der Bool-Adresse nur korrekt, wenn man genau dieses Bool außen auch an der Wortgrenze legt, also z.Bsp. mit M0.0. Bei M0.4 an IN 1 geht die SPS in Stop. Wäre mal zu testen, ob das aus SCL heraus genauso wäre!!!!
    Außerdem muß man die folgenden Bool auch richtig adressieren, weil durch den Any ja faktisch "um die IN herum" gegriffen wird.

    Also

    M0.0
    M1.6
    M10.2
    usw.

    nacheinander an In1, In2 .. wird dann als Ergebnis

    M0.0
    M0.1
    M0.2
    usw.

    in den FC hineinbringen.

    Bei einem FB ist das egal, weil der Any dann über die IDB-Schnittstelle läuft, da darf man auch mit M0.4 beginnen, ohne dass die SPS in Stop geht.
    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. Aus Word BITs rausziehen
    Von mfg_mr.e im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 20.06.2011, 11:02
  2. WORD of BITS - ILC Phönix Contacts
    Von poelli85 im Forum Sonstige Steuerungen
    Antworten: 6
    Letzter Beitrag: 05.09.2010, 22:55
  3. WORD aus einzelnen Bits zusammensetzen
    Von moeins im Forum Simatic
    Antworten: 73
    Letzter Beitrag: 09.12.2007, 20:44
  4. Codesys Bits, Byte, Word und DWord
    Von Znarf im Forum Sonstige Steuerungen
    Antworten: 16
    Letzter Beitrag: 03.05.2007, 13:36
  5. Antworten: 10
    Letzter Beitrag: 28.09.2004, 08:36

Lesezeichen

Berechtigungen

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