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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 22

Thema: IEC-61131 Pointer mit Index auf BOOL Variable

  1. #11
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ergänzend:
    Die Problematik bei Bits ist das in CoDeSys ein BOOL (Speicher intern) als Byte gehandhabt wird. Sonst könnte man ganz einfach mit Pointern arbeiten:
    Code:
    (* Dieser Code kann nicht gehen!!! *)
    VAR
      myByte  : BYTE;
      pMyByte : POINTER TO ARRAY[0..7] OF BOOL;
      aBool   : ARRAY [0..7] OF BOOL;
    END_VAR
    
    pMyByte := ADR(myByte);
    aBool   := pMyByte^;
    (* usw. *)
    Zitat Zitat von Stussi Beitrag anzeigen
    Schade, wollte mal ein bisschen mit diesem IEC spielen, muß dann wohl mal umdenken und anders programmieren.
    ...
    Ja da würde sich ein Umdenken Lohnen ;o) ich brauch die Funktion ein Bit n einer Variable zu manipulieren so gut wie nicht. Man arbeitet mit den Variablen und Strukturen. In speziellen Fällen kann man auch noch auf Merker zurückgreifen also die Variable mit "AT" in einem Merkerbereich speichern.

    Für welche Anwendung musst Du denn mit Byte Variablen arbeiten wo man einzelne Bits drin ändert?
    If you open your Mind too much, your Brain will fall out.

  2. #12
    Registriert seit
    27.04.2006
    Ort
    Sauerland
    Beiträge
    626
    Danke
    183
    Erhielt 88 Danke für 81 Beiträge

    Standard

    Ich meine bei codesys gibts eine EXTRACT (so od. ähnlich) - Funktion. da kann mann dann einfach die Bit-Nummer angeben und schon ist das fertig.
    Die Kunst in der Personalführung ist es
    die Mitarbeiter so über den Tisch zu ziehen,
    dass sie die Reibungshitze als Nestwärme empfinden.
    Zitieren Zitieren Extract  

  3. Folgender Benutzer sagt Danke zu repök für den nützlichen Beitrag:

    zotos (09.08.2007)

  4. #13
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Code:
    EXTRACT Eingänge dieser Funktion (util.lib) sind ein DWORD X, sowie ein BYTE N.  Ausgegeben wird ein BOOL-Wert, der den Inhalt des N-ten Bits der Eingabe X  enthält, wobei mit dem nullten Bit zu zählen begonnen wird.
     Beispiele in ST:
     FLAG:=EXTRACT(X:=81, N:=4); 
      (* Ergebnis : TRUE, weil 81 ist binär 1010001, das 4. Bit also 1 *)
     FLAG:=EXTRACT(X:=33, N:=0); 
      (* Ergebnis : TRUE, weil 33 ist binär 100001, das 0. Bit also 1 *)
    Aber das setzen geht so nicht.
    If you open your Mind too much, your Brain will fall out.

  5. #14
    Registriert seit
    27.04.2006
    Ort
    Sauerland
    Beiträge
    626
    Danke
    183
    Erhielt 88 Danke für 81 Beiträge

    Standard

    Fürs setzen haben die auch eine funktion, ich meine PUT oder so??
    Die Kunst in der Personalführung ist es
    die Mitarbeiter so über den Tisch zu ziehen,
    dass sie die Reibungshitze als Nestwärme empfinden.

  6. #15
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Zitat Zitat von repök Beitrag anzeigen
    Fürs setzen haben die auch eine funktion, ich meine PUT oder so??
    Ich lerne jeden Tag was neues ;o) beides habe ich noch nie benutzt.

    Code:
    PUTBIT Die Eingabe dieser Funktion (util.lib) besteht aus einem DWORD X, einem BYTE N und  einem BOOLschen Wert B.
     PUTBIT setzt das N-te Bit von X auf den Wert B, wobei mit dem  nullten Bit zu zählen begonnen wird
     Beispiel in ST:
     var1:=38;   (* binär 100110 *)
     var2:=PUTBIT(A,4,TRUE); (* Ergebnis: 54 = 2#110110 *)
     var3:=PUTBIT(A,1,FALSE); (* Ergebnis: 36 =  2#100100 *)
    If you open your Mind too much, your Brain will fall out.

  7. #16
    Registriert seit
    27.04.2006
    Ort
    Sauerland
    Beiträge
    626
    Danke
    183
    Erhielt 88 Danke für 81 Beiträge

    Standard

    schön das ich dem 61131-fönig auch mal was zeigen konnte
    Die Kunst in der Personalführung ist es
    die Mitarbeiter so über den Tisch zu ziehen,
    dass sie die Reibungshitze als Nestwärme empfinden.

  8. #17
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard

    Mit SHL und OR bzw. AND kann man auch die Bits setzen oder auslesen, was anderes steckt warscheinlich in den util.lib auch nicht drin.

  9. #18
    Avatar von Stussi
    Stussi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.03.2006
    Beiträge
    21
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank erstmal an dieser Stelle für Eure Mühen.
    Sagte ja bereits, das Sinn oder Unsinn mal beiseite geschoben werden sollte. Es ging nur um die Frage, wie man in IEC einen Pointer manipulieren kann.
    Die Sache mit dem schieben der einzelnen Bits auf die letzte Stelle zur Auswertung, hatt ich auch schon versucht aber fuer zu aufwendig befunden.
    Das mit PUTBIT usw. muß ich mir mal genauer anschauen.
    Warum sowas mal nötig wäre?
    Na ja wenn ich von einem Byte, das fest auf den Merkerbereich gelegt ist, nur einzelne BIT's beschreiben will (z.B. Modbus komm oder was ähnliches) dann müßte ich bei der indirekten Bearbeitung 8 BIT-Variablen im Merkerbereich anlegen und um mit dem ARRAY Index zu arbeiten, eine ARRAY-Variable, die dann ebenfalls diesen Bereich beschreibt. Geht ja auch finde ich aber nicht so gelungen. Es schein aber so zu sein, das ich mich wohl an eine solche Vorgehensweise gewöhnen muß.
    Zitieren Zitieren Schiebung und Stoßung :)  

  10. #19
    Registriert seit
    13.12.2007
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von zotos Beitrag anzeigen
    Ergänzend:
    Die Problematik bei Bits ist das in CoDeSys ein BOOL (Speicher intern) als Byte gehandhabt wird. Sonst könnte man ganz einfach mit Pointern arbeiten:
    ....
    In diesem Zusammenhang würde mich interessieren ob ich besispielsweise so adressieren könnte:

    Code:
    FUNCTION fClear :VOID                     
    VAR_INPUT
        Adress_1        : POINTER TO BYTE;    (* Adresse Variable 1 (ADR) *)
        Size               : DINT;                (* Größe Variable 1    (SIZEOF) *)
    END_VAR
    VAR
        i                : DINT;                (* Schleifenzähler *)
    END_VAR
    
    
    fClear:=FALSE;
    IF Size >0 THEN (* Überprüfen ob Variable mindestens 1 Byte groß *)
        FOR i:=1 TO Size DO
            Adress_1^:=0;
            Adress_1:= Adress_1 + 1;
        END_FOR
        fClear:=TRUE;
    END_IF
    .. reine Spielerei soweit, aber wenn ich beispielsweise auf eine Struktur zugreifen möchte, die ich im Vorfeld nicht kenne, die aber möglicher Weise so aussieht:
    Code:
       
    TYPE strTestVar :
     STRUCT
            T_Var_1            :DINT;
            T_Var_2            :DINT;
            T_Var_3            :UDINT;
            T_VAR_4            :ARRAY[1..3] OF BOOL;
        END_STRUCT
    dann kann ich leider nicht Pointer to strTestVar nutzen, da ich den Namen im Vorfeld nicht kenne wenn ich ein universelles Tool schreiben will.
    Wenn ich stattdessen Pointer to Byte nehme, läuft der Vorgang dann in einen ungewünschten Speicherbereich oder ist die Struktur grundsätzlich in Bytegröße? Auch wenn ich nur ein einzelnes Bit als Struktur habe?

  11. #20
    Registriert seit
    01.06.2007
    Beiträge
    56
    Danke
    0
    Erhielt 20 Danke für 20 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    läuft der Vorgang dann in einen ungewünschten Speicherbereich oder ist die Struktur grundsätzlich in Bytegröße? Auch wenn ich nur ein einzelnes Bit als Struktur habe?
    Ein BOOL in Codesys hat immer die Länge eines Byte!
    ( nur mit AT x.x zugewiesene BOOl nicht )

    also
    T_VAR_4 :ARRAY[1..3] OF BOOL;
    benötigt z.B. 3 Byte

    mfG Jochen

Ähnliche Themen

  1. Abfrage Bool und Integer via FC mit Pointer
    Von Waelder im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 24.03.2011, 16:28
  2. C-Script aus Index in Variable schreiben
    Von WendeMarkus im Forum HMI
    Antworten: 0
    Letzter Beitrag: 23.08.2010, 05:34
  3. Bool-Variable zählen Wie ???
    Von Golf2 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 23.09.2008, 15:18
  4. Bool-Variable setzen/rücksetzen
    Von Supervisor im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 18.07.2006, 12:29
  5. Antworten: 27
    Letzter Beitrag: 17.07.2006, 22:20

Lesezeichen

Berechtigungen

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