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

Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 35

Thema: Wert formatunabhängig an FC übergeben

  1. #21
    Registriert seit
    29.03.2007
    Beiträge
    123
    Danke
    17
    Erhielt 9 Danke für 9 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Leider nicht!
    Aber Danke schonmal!!

    L DBD [hPointer] // hPointer wäre hier ein DWORD aus dem TEMP-Bereich
    Aber mit DBD lade ich ja aus Datenbaustein, nicht aus Temporär, oder???



    Was ich mit meinem vorrigen Beitrag meinte: Ich sehe keinen Unterschied zwischen den beiden Befehlen:

    AUF DB1
    L P#DBX0.0
    LAR1
    L D [AR1,P#0.0]
    So, nun lade ich DB1.DBD0, richtig?

    Jetzt der zweite Fall
    L P##ANYPOINTER // Eingansvariable, als ANY deklariert
    LAR1
    L D [AR1,P#0.0]
    Hier, lade ich nun aus dem Adressregister, das erste Doppelwort vom Anypointer. Oder nicht?

    Gruß
    Jordy

  2. #22
    Registriert seit
    06.10.2003
    Beiträge
    3.411
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... da könnte tatsächlich ein Fehler in Volkers Beitrag sein ...
    Versuch mal :
    Code:
    L  P##myAny
    LAR1
    Ein Fehler in Volkers Beitrag ist es nicht. Es ist ganz einfach ein Unterschied zwischen FC und FB. In einem von beiden geht nur eins von beiden .


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  3. Folgender Benutzer sagt Danke zu Onkel Dagobert für den nützlichen Beitrag:

    Larry Laffer (24.01.2008)

  4. #23
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    @Onkel:
    Das habe ich nun wieder nicht gewußt ...
    Da kann man mal sehen ... man wir alt wie eine Kuh und lernt immer noch dazu ...

    was besseres fiel mir jetzt nicht ein ...

    @Jordy:
    Ich denke, du hast es ...

    Gruß
    LL

  5. #24
    Registriert seit
    29.03.2007
    Beiträge
    123
    Danke
    17
    Erhielt 9 Danke für 9 Beiträge

    Standard

    Ne, eben nicht.

    Warum greift er bei demselben Befehl, einmal auf ein DB zu und einmal auf das Adressregister?

  6. #25
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    ...?
    Du hast in das Adressregister (AR1) den "Offset" deiner Zieladresse geladen. Darauf greifst du dann zu ...
    Du kannst den Offset auch noch weiter erhöhen :
    L DBD [AR1,P#4.0] // <- noch 4 Byte weiter oben ...

    DBD bezieht sich auf Datenbaustein ...
    usw.
    wie schon geschrieben ...

    Der ANY-Pointer kommt m.E. nicht über einen DB sondern über den Lokal-Bereich (kann ich jetzt aber nicht gegenchecken - aus dem Handgelenk weiß ich das nicht, ich mache so etwas lieber mit SCL).
    Vielleicht hängt sich Onkel Dagobert hier nochmal dran ...

    ... oder Ralle ... ich hatte nicht gesehen, dass du auch Online bist ...


    Gruß
    LL
    Geändert von Larry Laffer (24.01.2008 um 19:25 Uhr)

  7. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Jordy (24.01.2008)

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

    Standard

    Any ist ein Parametertyp (suche das mal in der Step7-Hilfe). Es wird also nicht die Variable selbst übergeben, sondern 5 Wörter (wie der Any ebend definiert ist), z.Bsp. P#M50.0 BYTE 10. Wenn du nun L P## My_Any und LAR1 aufrufst, dann zeigt LAR 1 auf den Any, also kannst du dessen 5 Wörter adressieren und manipulieren.
    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

  9. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Jordy (24.01.2008)

  10. #27
    Registriert seit
    29.03.2007
    Beiträge
    123
    Danke
    17
    Erhielt 9 Danke für 9 Beiträge

    Standard

    DAAAAANKE!!!!

    DAS war das woran ich zu knacken hatte! Klasse! Dann ist es klar. Und so ist es dann wohl auch wenn ich einen STRUCT an einen FC übergebe. Nur das es dann kein ANY-POinter ist, sondern normaler Pointer, ne?

    Ja, das meinte ich. Hatte immer gedacht das die Variable selbst übergeben wird.


    Suuuper, bin begeistert!!

    Schönen Dank euch allen!!!!

  11. #28
    Isha ist offline Benutzer
    Themenstarter
    Registriert seit
    28.11.2007
    Beiträge
    51
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Nun wurde schon viel diskutiert. Nur viel schlauer bin ich immer noch nicht.

    Wäre schön wenn jemand einfach kurz die paar Zeilen Code posten könnte um den an die Funktion übergebenen any-Pointer zu zerlegen. Mich interessiert folgendes:
    Wie komme ich an den Datentyp ran, und wie an die eigentlichen Daten.
    Ich kriege den richtigen Syntax einfach nicht auf die Reihe.

    Warum ich das überhaupt so machen möchte:
    Ich möchte eine Funktion machen in der etwas berechnet wird und mehrere Variablen übergeben werden. Ich könnte nun für jeden Datentyp eine eigene Funktion schreiben oder für jeden Datentyp Eingangsvariablen definieren oder vor dem FC Aufruf die Variablen ins richtige Format wandeln. Doch dies sind alles nicht sehr elegante Lösungen.

    Gruss
    Isha

  12. #29
    Registriert seit
    29.03.2007
    Beiträge
    123
    Danke
    17
    Erhielt 9 Danke für 9 Beiträge

    Standard

    Soll ich mich ma trauen Jungs?

    Also, so müsste es dann gehen!


    // Any-Pointer aufsplitten
    -------------------------------------
    L P##IN_Any // IN-Variable
    LAR1

    L B [AR1,P#1.0]
    T #Datentyp

    L W [AR1,P#4.0]
    T #DB_Nummer

    L D [AR1,P#6.0]
    T #Bereichszeiger

    //; Auswerten
    ------------------------------
    L #Datentyp
    L B#16#5
    ==I
    R #IST_Real // Out-Variable
    S #IST_Int
    R #IST_Dint

    L #Datentyp
    L B#16#8
    ==I
    S #IST_Real
    R #IST_Int
    R #IST_Dint

    L #Datentyp
    L B#16#7
    ==I
    R #IST_Real
    R #IST_Int
    S #IST_Dint
    Was du dann nachher mit der Auswertung machst, musste natürlich ändern. Ich habe jetzt einfach mal ein Bit...


    Gruß
    Jordy

  13. #30
    Registriert seit
    29.03.2007
    Beiträge
    123
    Danke
    17
    Erhielt 9 Danke für 9 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn du z.B. immer einen Datenbaustein anbindest, kannst es nachher so machen:


    AUF DB [#DB_Nummer]

    L #Bereichszeiger
    LAR1

    U #IST_Real
    SPB REAL

    U #IST_Dint
    SPB DINT

    U #IST_Int
    SPB INT

    REAL: L DBD [AR1,P#0.0]
    T #Istwert_Real
    BEA

    DINT: L DBD [AR1,P#0.0]
    T #Istwert_DINT
    BEA

    INT: L DBW [AR1,P#0.0]
    T #Istwert_INT
    BEA

  14. Folgender Benutzer sagt Danke zu Jordy für den nützlichen Beitrag:

    Isha (25.01.2008)

Ähnliche Themen

  1. Antworten: 19
    Letzter Beitrag: 09.11.2010, 13:58
  2. Timernummer und -wert in Funktion übergeben
    Von KingShango im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 29.09.2009, 15:09
  3. Antworten: 0
    Letzter Beitrag: 04.06.2009, 11:26
  4. Antworten: 6
    Letzter Beitrag: 06.07.2008, 13:59
  5. INTEGER Wert per Enter übergeben
    Von Fireball im Forum HMI
    Antworten: 0
    Letzter Beitrag: 22.01.2007, 16:06

Lesezeichen

Berechtigungen

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