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

Ergebnis 1 bis 4 von 4

Thema: [ ST - Structured Text ] Pointer Casten

  1. #1
    Registriert seit
    29.07.2005
    Beiträge
    82
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Kann man in ST eigentlich Pointer Casten?

    Folgendes Beispiel:
    ptrVoid:POINTER TO T_VOID;
    fbMyFb:FB_MY_FB;

    ptrVoid:=ADR(fbMyFb);
    T_VOID ist ein beliebiger selbst definierter Typ. ptrVoid kann ich nun zwar über ^ Operator dereferenzieren, aber natürlich nur in den Typ T_VOID. Klar ist jedoch, dass ich irgendwann aber auch in den Typ FB_MY_FB dereferenzieren will. Bisher gefundene Lösung:
    ptrMyFb:POINTER TO FB_MY_FB;

    ptrMyFb:=ptrVoid;
    Das funktioniert zwar (Pointer werden intern ja ALLE nur als DWORD gehandelt), ist aber eine umständliche Methode, da ich eine Zwischenvariable verwende. Ich bräuchte
    eine CAST Operation wie sie in Hochsprachen üblich ist.
    Mal am C, bzw. C++ angelehnt, so etwas wie: (POINTER TO FB_MY_FB) ptrVoid
    Zitieren Zitieren [ ST - Structured Text ] Pointer Casten  

  2. #2
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 63 Danke für 62 Beiträge

    Standard

    Der Adress Operatio ist

    ptrVoid^

    in ST und äquivalent zu

    ptrVoid->

    in C++.


    http://infosys.beckhoff.com/index.ph...rl_pointer.htm

  3. #3
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    Zitat Zitat von caret Beitrag anzeigen
    Kann man in ST eigentlich Pointer Casten?

    Folgendes Beispiel:
    ptrVoid:POINTER TO T_VOID;
    fbMyFb:FB_MY_FB;

    ptrVoid:=ADR(fbMyFb);
    T_VOID ist ein beliebiger selbst definierter Typ. ptrVoid kann ich nun zwar über ^ Operator dereferenzieren, aber natürlich nur in den Typ T_VOID. Klar ist jedoch, dass ich irgendwann aber auch in den Typ FB_MY_FB dereferenzieren will. Bisher gefundene Lösung:
    ptrMyFb:POINTER TO FB_MY_FB;

    ptrMyFb:=ptrVoid;
    Das funktioniert zwar (Pointer werden intern ja ALLE nur als DWORD gehandelt), ist aber eine umständliche Methode, da ich eine Zwischenvariable verwende. Ich bräuchte
    eine CAST Operation wie sie in Hochsprachen üblich ist.
    Mal am C, bzw. C++ angelehnt, so etwas wie: (POINTER TO FB_MY_FB) ptrVoid
    Ich habe mich mal zu dieser Problematik mit den Entwicklern von CoDeSys unterhalten. Aussage ist, dass in der Norm zwar Pointer angedacht sind aber nicht einheitlich von den Herstellen implementiert werden. DWORD ist also, sagen wir mal im speziellen Fall so, aber nicht garantiert. (Es hat auch in der Sprache C dieses Problem gegeben und mit der Einführung der neueren Prozessoren war das dann plötzlich nicht mehr so.)

    Was fehlt, ist insbesondere die Pointer Arithmetik, was bedeutet :
    intPtr := intPrt+1? Zeigt der Pointer jetzt ein Byte oder ein Int weiter?

    Ausprobieren und hoffen, das nächste Update macht es ganauso! Die Norm gibt es nicht her.

    Das Casten wird übrigens auch sonst in CoDeSys durch Funktionsaufrufe gemacht, so einen Aufruf könnte man sich dann für seinen eigenen Datentyp selber schreiben.
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Pointer  

  4. #4
    caret ist offline Benutzer
    Themenstarter
    Registriert seit
    29.07.2005
    Beiträge
    82
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von RobiHerb Beitrag anzeigen
    Was fehlt, ist insbesondere die Pointer Arithmetik, was bedeutet :
    intPtr := intPrt+1? Zeigt der Pointer jetzt ein Byte oder ein Int weiter?
    Wobei ich in meinem Beispiel keine Arithmetik verwende und damit auch auf der sicheren Seite bin, wenn mal auf 64Bit gewechselt werden sollte. Ich weise ja nur einer Adressvariable eine andere Adresse zu. Ob die Adressen 32Bit oder 64Bit oder was auch immer für ein Datentyp haben ist unerheblich. Generell stimmt es aber natürlich schon, dass Zeigerarithmetik wünschenswert wäre.

    Zitat Zitat von RobiHerb Beitrag anzeigen
    Das Casten wird übrigens auch sonst in CoDeSys durch Funktionsaufrufe gemacht, so einen Aufruf könnte man sich dann für seinen eigenen Datentyp selber schreiben.
    Allerdings lässt sich der Rückgabewert einer Funktion auch nicht wieder direkt per ^ dereferenzieren, d.h. ich muss den wieder in eine Variable speichern und diese dereferenzieren. Da spare ich mir also leider auch nichts ein.

Ähnliche Themen

  1. Com-text
    Von c.wehn im Forum HMI
    Antworten: 0
    Letzter Beitrag: 26.03.2010, 14:05
  2. Suche Buch zu "Structured Text"
    Von MaxHeadroom im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 18.01.2010, 10:26
  3. Structured Text (ST)
    Von nourdine im Forum PC- und Netzwerktechnik
    Antworten: 6
    Letzter Beitrag: 29.11.2009, 17:13
  4. Structured Text RSLogix
    Von kammi-kaze im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 20.07.2009, 15:01
  5. COM TEXT
    Von Tappes im Forum Suche - Biete
    Antworten: 6
    Letzter Beitrag: 29.09.2005, 21:15

Lesezeichen

Berechtigungen

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