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

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

Thema: Datenwort durch Variable zuweisen?

  1. #11
    Registriert seit
    07.05.2004
    Ort
    Campbelltown
    Beiträge
    2.437
    Danke
    131
    Erhielt 276 Danke für 86 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Probier mal noch
    Code:
    L DBW[#m]
    Gegen Schwachsinn, Schwachköpfe und armselige Trittbrettfahrer kann man nicht argumentieren.

    Gott sieht alles, auch Signaturen in Geheimschrift,,... aber er petzt nicht.

  2. #12
    Registriert seit
    13.09.2005
    Beiträge
    19
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Dazu kann ich nur Hilfe sagen und indirekte Adressierung eingeben...

    Zu AWL Zeiten habe ich das auch so gemacht...
    L zz
    T MDxxx
    AUF DByy
    L DBW[xxx]

    Beispiel für einen Pointer im Wortformat:
    L 5 //Lade den Wert des Pointers in AKKU 1.
    T MW2 //Transferiere den Pointer nach MW2.
    L T [MW2] //Lade den aktuellen Wert der Zeit T5 in AKKU 1.

    Beispiel für einen Pointer im Doppelwortformat:
    L P#8.7 //Lade den Wert des Pointers in AKKU 1.
    T MD2 //Transferiere den Pointer nach MD2.
    U E [MD2] //Frage den Signalzustand an Eingang E 8.7 ab
    = A [MD2] //und weise den Signalzustand Ausgang A 8.7 zu.
    Beispiele für speicherindirekte Adressierung Beschreibung
    U E [MD 2] Führe eine UND-Verknüpfung mit dem Eingangsbit aus. Die Adresse befindet sich in Merkerdoppelwort MD2.
    = DIX [DBD 2] Weise den Signalzustand des VKE-Bits dem Instanz-Datenbit zu. Die Adresse befindet sich im Datendoppelwort DBD2.
    L EB [DID 4] Lade das Eingangsbyte in AKKU 1. Die Adresse befindet sich im Instanzdoppelwort DID4.
    AUF DB [LW 2] Öffne den Datenbaustein. Die Nummer des Datenbausteins befindet sich im Lokaldatenwort LW2.

  3. #13
    Avatar von Tigerkroete
    Tigerkroete ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.05.2006
    Beiträge
    245
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Tippser. Ja, das funktioniert.
    Mit dem "m" funktioniert es nun auch. Habe folgendes geändert:
    Die Variable "m" war zuvor oben im Interface meiner Funktion unter Temp deklariert. Nun habe ich sie in meiner Symboltabelle deklariert und schwupps geht es.
    Wo deklariert man denn für welchen Fall am besten seine Variablen?
    Und warum muss "m" ein DINT sein?

    Vielen Dank,
    Tigerkroete

    Hinzugefügt:

    Mit #m geht es auch nicht, hatte ich schon versucht.

  4. #14
    Registriert seit
    07.05.2004
    Ort
    Campbelltown
    Beiträge
    2.437
    Danke
    131
    Erhielt 276 Danke für 86 Beiträge

    Standard

    In der Symboltabelle ist das m global, unter Temp ist es Lokal. Nimm mal einen längeren Namen Bsp. Idx := DINT.

    Dint, weil 32 Bit Adresse. Die letzten 3 Bits geben die Bitadresse an.

    Gruß, pt
    Gegen Schwachsinn, Schwachköpfe und armselige Trittbrettfahrer kann man nicht argumentieren.

    Gott sieht alles, auch Signaturen in Geheimschrift,,... aber er petzt nicht.

  5. #15
    Avatar von Tigerkroete
    Tigerkroete ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.05.2006
    Beiträge
    245
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja, ein längerer Name geht, wow. Warum nur das?

    Auf jeden Fall schonmal 1000 Dank!!!

  6. #16
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.862
    Danke
    78
    Erhielt 805 Danke für 548 Beiträge

    Standard

    ist halt so.

    das was du schreibst wird aber nicht funktionieren, auch wenn die syntax nun stimmt.

    um auf ein bestimmtes dw zugreifen zu können, benötigst du einen pointer.

    Code:
    L #wert //dieses dw willst du laden
    SLD 3 //pointer erzeugen
    LAR1
    AUF   DB   10
    L     DBW [AR1,P#0.0]
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  7. #17
    Avatar von Tigerkroete
    Tigerkroete ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.05.2006
    Beiträge
    245
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Uijuijui, Pointer?
    O.K. dann muss ich mich da mal schlau machen. Kenne Pointer nur aus C und C++, wusste gar nicht, dass es die auch bei S7 gibt. Immer wenn ich eine Sache verstanden habe, kommen drei neue Probleme dazu .

    Ich bin wirklich froh, dass es dieses Forum gibt, denn da mir mein Betreuer der Diplomarbeit in Bezug auf SPS nicht helfen kann, wäre ich ansonsten teilweise verloren.

    Aber wieso brauche ich nun einen Pointer?

    Wenn ich den Wert von DBW20 in den DBW22 laden will, schreibe ich das ja so:
    Code:
    AUF   DB10
    L   DBW20
    T   DBW22
    Ich sehe da nicht den Unterschied, wenn meine DINT-Variable "xyz" den Wert 20 enthält und meine DINT-Variable "lmn" den Wert 22 und es so schreibe:
    Code:
    AUF   DB10
    L   DBW[xyz]
    T   DBW[lmn]
    Sorry, dass ich da echt ´nen Hänger habe.

    Aber vielen Dank schonmal.

  8. #18
    Registriert seit
    07.05.2004
    Ort
    Campbelltown
    Beiträge
    2.437
    Danke
    131
    Erhielt 276 Danke für 86 Beiträge

    Standard

    Das liegt an dem von mir oben erwähnten Format: die letzten 3 Bits geben die Bitadresse an. Deshalb musst du zumindest das SLD 3 ausführen.

    pt
    Gegen Schwachsinn, Schwachköpfe und armselige Trittbrettfahrer kann man nicht argumentieren.

    Gott sieht alles, auch Signaturen in Geheimschrift,,... aber er petzt nicht.

  9. #19
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.862
    Danke
    78
    Erhielt 805 Danke für 548 Beiträge

    Standard

    tja wäre schön. ist es aber leider nicht. warum weiss ich nicht wirklich. s7 erwartet dort nun mal einen zeiger in der form byteadresse.bitadresse
    wobei die bitadresse durch 3 bit gebildet wird

    also z.b. so
    L P#30.0
    T MD10
    L MW[MD10]
    läd das mw30

    so hast du aber keine möglichkeit in einer schleife zu arbeiten. also must du das registerindirekt machen.

    L 30
    SLD 3
    LAR1
    ergibt einen pointer von P#30.0 in adressregister1
    L MW[ar1,p#0.0]
    läd das mw30

    nun gibt es noch den versatz (p#0.0)
    L MW[ar1,p#2.0]
    läd das mw32 (30 + 2.0)

    U M[ar1,p#4.4]
    fragt M 34.4 ab

    Grob verstanden ?
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  10. #20
    Avatar von Tigerkroete
    Tigerkroete ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.05.2006
    Beiträge
    245
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ja so zu 85%.
    Das war heute ziemlich viel Neues. Mir qualmt der Kopf. Ich glaube ich mach für heute Schluss und lass das erstmal Sacken. Gleich ist ja auch Fußball .
    Ich muss mich echt bei Euch bedanken.

    Viele Grüße,
    Tigerkroete

Ähnliche Themen

  1. Bild aufrufen durch PLC-Variable?
    Von D4K!ZZ4 im Forum HMI
    Antworten: 1
    Letzter Beitrag: 21.10.2011, 13:27
  2. Antworten: 8
    Letzter Beitrag: 10.02.2011, 12:28
  3. Arraybereich durch Variable bestimmen
    Von boggle im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 21.09.2009, 07:39
  4. Timer Zeit durch Variable ersetzen
    Von Otti20vt im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 04.09.2008, 10:14
  5. TP070 Bilder Variable zuweisen?
    Von Uwe Schröder im Forum HMI
    Antworten: 1
    Letzter Beitrag: 14.08.2008, 20:36

Lesezeichen

Berechtigungen

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