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

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

Thema: indezierter Bitzugriff

  1. #1
    Registriert seit
    29.06.2008
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Cool


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    bin neu in der Runde und habe ein (kleines?) Problem mit Codsys. Ich verwende im Moment zwar MXPro, müsste aber das Gleiche wie bei TwinCat sein. Also, ich möchte bei einer Variablen einen indizierten Bitzugriff vornemen um die Variable Bit für Bit durch eine Schleife laufen zu lassen. Erlaubt sind leider nur Zugriffe mit Konstanten oder ganzen Zahlen (Variablenname.0) erlaubt zugriff auf das 1. Bit in der Variable. Ich wollte es jetzt in der Form Variablenname.a machen, wobei "a" die Position des Bits ist. Leider bekomme ich wie gesagt immer eine Fehlermeldung. Gibt es eine Möglichkeit per Variable eine Bitposition anzusprechen (ähnlich wie bei Siemens)?
    Zitieren Zitieren indezierter Bitzugriff  

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

    Standard

    Hallo tinosps

    Lade die Oscat.Lib dort findest du viele nützliche funktionen.
    Z.B. für dein Problem Bit_Of_Word.

    Oscat findest du http://www.oscat.de
    Da du Codesys verwendet noch ein zweites intersantes Forum http://forum.3s-software.com/

    mfG Jochen

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Codesys ist zwar nicht meine Welt ...
    aber die Lösung deines Problems müßte der Befehl AT sein. Auf diese Weise kannst du zu deinem WORD eine andere Sicht z.B. als ARRAY [1..16] of BOOL erzeugen. Hier ist dann die gewünschte Indizierung möglich.
    Code:
    Test_WORD : word ;
    Test_Array AT Test_Word : ARRAY[1..16] of Bool ;
    Gruß
    LL

  4. #4
    Registriert seit
    30.08.2005
    Beiträge
    280
    Danke
    41
    Erhielt 96 Danke für 66 Beiträge

    Standard

    Lieber Larry,

    das ist in mehrfacher Hinsicht nicht richtig.
    Erstens kann man mit AT eine Variable nur auf eine direkte Adresse legen (%IX0.0)
    Zweitens ist ein Array von BOOL kein Bitfeld (in CoDeSys). Jedes BOOL ist ein Byte gross. Das Array wäre also nicht 16 Bit sondern 16 Byte gross.
    Es ist schon richtig, das Bit über einen Funktionsaufruf zu ermitteln.

    Bernhard

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Zitat Zitat von Werner29 Beitrag anzeigen
    ... das ist in mehrfacher Hinsicht nicht richtig.
    Erstens kann man mit AT eine Variable nur auf eine direkte Adresse legen (%IX0.0)
    Zweitens ist ein Array von BOOL kein Bitfeld (in CoDeSys). Jedes BOOL ist ein Byte gross. Das Array wäre also nicht 16 Bit sondern 16 Byte gross.
    Es ist schon richtig, das Bit über einen Funktionsaufruf zu ermitteln.
    ... wenn du da Recht hast (was ich nicht überprüfen kannst, da CoDeSys nicht meine Welt ist), dann könnte SCL an dieser Stelle mehr als CoDeSys. In SCL wäre das so überhaupt kein Problem ...

    Vielleicht stellt mal einer diese Sache klar ... würde mich interessieren ...

    Gruß
    LL

  6. #6
    Registriert seit
    30.08.2005
    Beiträge
    280
    Danke
    41
    Erhielt 96 Danke für 66 Beiträge

    Standard

    Hallo Larry,

    da ich wesentliche Teile von CoDeSys selber geschrieben habe, ist das hiermit klargestellt .
    Es kann schon sein, dass man das in SCL so hinschreiben kann, das ist wiederum nicht meine Welt. Aber erstmal richten wir uns ja nach der IEC und nicht nach Siemens und die sieht überhaupt keine Bitzugriffe vor, der Bitzugriff mit Konstanten ist eine Erweiterung von uns und Bitzugriff mit Variablen müsste man einfach mal machen (wie so oft: es geht ja auch anders und ist daher nicht dringend und fällt daher immer hinten runter).
    Der Grund warum bei CoDeSys (und allen gängigen Hochsprachen) BOOL nicht als Bit sondern als Byte (oder grösser) gehandhabt wird ist ganz einfach: Es gibt keinen Prozessor mit dem man direkt Bits im Speicher adressieren kann.
    Ein Bitzugriff braucht daher um ein Vielfaches mehr Zeit als ein Bytezugriff.
    (Trotzdem sollte man Bitfelder auch mal implementieren, aber: siehe oben).

    Ab Version 3 gibt es übrigens den Datentyp BIT allerdings nur in Strukturen und es gibt auch UNION. Damit kann man ähnlich wie in deinem Beispiel Variablen auf dieselbe Adresse legen.

    Grüße, Bernhard

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    ... dann sage ich mal Dankeschön für den Hinweis.

    Wie schon gesagt, hatte ich auf die Frage geantwortet in der bisherigen Erkenntnis, das Codesys alles das was Siemens kann auch kann ... Jetzt bin ich ein bißchen enttäuscht ...

    Es war für mich allerdings auch nicht unlogisch, dass das gehen könnte, da ich auf der AWL-Seite das ja auch machen kann.

    Wie auch immer - wieder etwas gelernt ...

    Gruß
    LL

  8. #8
    Registriert seit
    30.08.2005
    Beiträge
    280
    Danke
    41
    Erhielt 96 Danke für 66 Beiträge

    Standard

    nicht enttäuscht sein, Siemens kann dafür auch nicht alles, was CoDeSys kann.
    In mancher Hinsicht tut sich Siemens leichter, weil sie die Hardware auch völlig in der Hand haben. Dafür tun sie sich schwerer wenn sie die Hardware wechseln wollen. Zum Beispiel auf einen PC.

  9. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Ich finds auch etwas schade, daß eine SPS, die sich zu großen Teilen ja mit Bitverarbeitung befaßt, gerade auf diesem Gebiet zu Umwegen zwingt. Wie Werner29 ja sagte, betrifft das auch die IEC, was zu der Frage führt, ob man das vergessen hat oder einfach aus der falschen Branche kam?
    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

  10. #10
    Registriert seit
    30.08.2005
    Beiträge
    280
    Danke
    41
    Erhielt 96 Danke für 66 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Damals war ich noch nicht auf der Automatisierungswelt. Ich tippe mal ein eine Mischung aus beidem. Es ist ja so viel vergessen worden.
    Ausserdem war der Ansatz ja, dass man von der Hardware-Ebene abstrahieren wollte. An sich nicht unvernünftig, wo es geht sollte man das tun. Aber wo es nicht geht, sollte man es trotzdem können.

    Ich finde im Übrigen, falls es jemand interessiert, auch unseren Bitzugriff nicht sonderlich glücklich, weil er syntaktisch mit dem Komponentenzugriff kollidiert:

    a.b : soll das jetzt eine Komponente einer struktur sein, oder ein Bit in einer Variablen? Hätte man sich eine eigene Syntax überlegt: a:b oder b@a oder was auch immer, dann hätte man dieses Problem nicht.

Ähnliche Themen

  1. Speicher indirekter Bitzugriff?
    Von rerdma3s im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 17.03.2010, 09:18
  2. LibNoDave Bitzugriff...
    Von Jochen Kühner im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 28.03.2008, 09:29
  3. Bitzugriff in WinCC VBS
    Von Anfängerproggi im Forum HMI
    Antworten: 9
    Letzter Beitrag: 30.07.2007, 10:51

Stichworte

Lesezeichen

Berechtigungen

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