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

Ergebnis 1 bis 7 von 7

Thema: PEEK/POKE Probleme

  1. #1
    Registriert seit
    10.12.2012
    Beiträge
    16
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo ,

    seit einigen Tagen beschäftige ich mich mit der Umstellung von Step7 Projekten in Richtung TIA Portal( was bis heute auch recht gut funktioniert hat ).


    Leider machen mir folgende Zeilen etwas Probleme und bleiben ohne Funktion:

    Code:
        #Schritte_STA    := #OFFSET + 18;
        #Absolutwert_STA := #OFFSET + 22;
    .
    .
    .
    
      IF    .... THEN
    
    POKE(area:=16#84,dbNumber:=2,byteOffset:=Absolutwert_STA ,value:=PEEK_DWORD(area:=16#84,dbNumb    er:=2,byteOffset:=Absolutwert_STA )-PEEK_DWORD(area:=16#84,dbNumber:=2,byteOffset:=#Schritte_STA));
    in diesem Fall wird der erwartete Wert (Absolutwert_STA-#Schritte_STA) nicht in den Datenbaustein geschrieben!



    auch der Versuch mit einer temp Var. hat nicht zum Erfolg geführt

    Code:
    IF .... THEN
    
    // "Tag_40":=PEEK_DWORD(area:=16#84,dbNumber:=#DABAU_MO,byteOffset:=#Absolutwert_STA); //1.Lesetest  Wert=0 
    
    #absolut_tmp:=PEEK_DWORD(area:=16#84,dbNumber:=#DABAU_MO,byteOffset:=#Absolutwert_STA)-(PEEK_DWORD(area:=16#84,dbNumber:=#DABAU_MO,byteOffset:=#Schritte_STA));
    POKE(area:=16#84,dbNumber:=#DABAU_MO,byteOffset:=#Absolutwert_STA,value:=#absolut_tmp);
    
      //"Tag_40":=PEEK_DWORD(area:=16#84,dbNumber:=#DABAU_MO,byteOffset:=#Absolutwert_STA);//2. Lesetest Wert=#Absolutwert_STA
    Meine Beobachtung ist, dass ich den Wert #Absolutwert_STA nach der POKE Anweisung aus dem Datenbaustein auslesen kann...vorher nicht. Die Lesetests habe ich nacheinander ausgeführt.


    Gibt es evtl. Erfahrungen??



    Gruß und danke im Vorraus
    Geändert von t.win (03.02.2014 um 13:12 Uhr)
    Zitieren Zitieren PEEK/POKE Probleme  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.174
    Danke
    922
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard

    Zitat Zitat von t.win Beitrag anzeigen
    Meine Beobachtung ist, dass ich den Wert XY nach der POKE Anweisung XY auslesen kann...vorher nicht.

    Kannst Du das genauer erklären?
    XY mußt Du doch vorgeben und nicht aus PEEK oder POKE auslesen.
    Wie ist XY bei Dir deklariert und wie initialisiert bzw. zugewiesen?

    Tip: Programmcode bitte in CODE-Tags einschließen - der #-Button im Beitragseditor.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    t.win (03.02.2014)

  4. #3
    t.win ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.12.2012
    Beiträge
    16
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    XY bzw. Z habe ich als symbolische Adressen angenommen. Hoffe Sie können mir der Änderung s.o. etwas mehr anfangen

  5. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.174
    Danke
    922
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard

    Mußt Du Deinen Code unbedingt in eine kilometerlange Zeile quetschen? Da ist für mich total unübersichtlich. Wenn Du keine Zwischenvariablen benutzen willst dann mache für mehr Übersicht wenigstens Zeilenumbrüche rein.
    Ich zerlege mal Deinen Code und speichere in Zwischenvariablen:
    Code:
    #absolutw_tmp := PEEK_DWORD(area:=16#84,dbNumber:=#DABAU_MO,byteOffset:=#Absolutwert_STA);
    #schritte_tmp := PEEK_DWORD(area:=16#84,dbNumber:=#DABAU_MO,byteOffset:=#Schritte_STA);
    #absolutw_tmp: = #absolutw_tmp - #schritte_temp;
    POKE(area:=16#84,dbNumber:=#DABAU_MO,byteOffset:=#Absolutwert_STA,value:=#absolutw_tmp);
    Entspricht dieser Code dem was Du tun willst?
    Also einen Absolutwert lesen, davon einen Schrittewert abziehen und auf den selben Absolutwert wieder speichern?
    Und das funktioniert nicht???

    Kann es sein, daß da nur ein scheinbares Problem beim Beobachten besteht, weil bei jedem Aufruf der Wert an der Adresse DB2.DBD[#Absolutwert_STA] verringert wird?
    Oder wie kommt dieser Schrittewert her?

    PS:
    Weil ich dieses TIA fast gar nicht kenne, woher "weiß" das POKE eigentlich, daß es ein DWORD schreiben soll?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #5
    t.win ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.12.2012
    Beiträge
    16
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo PN/PD,

    du hast es absolut richtig verstanden. Mit diesen Zeilen bestimme ich die Position von mehreren Schrittmotoren. Einen Absolutwert lesen, davon eine Schrittwert subtrahieren und dann wieder in den selben Absolutwert speichern.
    Die Schrittwerte werden vom User vorgegeben und ausgelesen.

    PS:
    Weil ich dieses TIA fast gar nicht kenne, woher "weiß" das POKE eigentlich, daß es ein DWORD schreiben soll?
    Sehr gute Frage Wahrscheinlich richtet sich die größe der POKE Anweisung nach dem vorgegebenen value.


    Nein, leider funktioniert es nicht.

  7. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.174
    Danke
    922
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard

    Ich kann den Code leider nicht testen, meine aber, der müßte funktionieren.
    Vielleicht kann jemand anders mal testen.
    Auf welcher CPU soll der Code denn laufen bzw. auf welcher CPU läuft er nicht wie von Dir erwartet?

    Ich kann irgendwie nicht glauben, daß ein POKE erst beim zweiten Versuch funktioniert oder ein PEEK erst nach vorherigem POKE. Ich denke eher, Du machst einen Fehler beim Beobachten oder bei der Adressberechnung (falsche Werte in #OFFSET oder #Absolutwert_STA oder #Schritte_STA). Vielleicht schreibt auch ein anderer Programmteil in falsche Adressen statt die gewollten? schreibt z.B. den Absolutwert in DB2.DBD[#Schritte_STA] statt DB2.DBD[#Absolutwert_STA] - das würde zu Deiner Beobachtung passen, daß beim ersten Lesen DB2.DBD[#Absolutwert_STA] = 0 ist und beim zweiten Lesen ein Absolutwert drin steht.

    Hat der Ziel-DB "Standard"-Zugriff oder "optimierten" Zugriff? (bei "optimiertem" Zugriff dürfte aber PEEK/POKE eigentlich gar nicht funktionieren)

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #7
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi

    versucht mal das ENO -- ja, ich weiß, das macht ein SCL Programmierer nicht -- abzuholen.

    Code:
    #absolutw_tmp := PEEK_DWORD(area:=16#84,dbNumber:=#DABAU_MO,byteOffset:=#Absolutwert_STA,     ENO=>#eno1    );
    #schritte_tmp := PEEK_DWORD(area:=16#84,dbNumber:=#DABAU_MO,byteOffset:=#Schritte_STA,       ENO=>#eno2    );
    #absolutw_tmp: = #absolutw_tmp - #schritte_temp;
    POKE(area:=16#84,dbNumber:=#DABAU_MO,byteOffset:=#Absolutwert_STA,value:=#absolutw_tmp,     ENO=>#eno3    );
    Leider ist das der einzige Kanal an dem PEEK und POKE sich über nicht existierende oder zu kurze DB beschweren können.

    Kann es sein, daß da nur ein scheinbares Problem beim Beobachten besteht, weil bei jedem Aufruf der Wert an der Adresse DB2.DBD[#Absolutwert_STA] verringert wird?
    Gute Frage? Kannst du das mal "festnageln"?

    Weil ich dieses TIA fast gar nicht kenne, woher "weiß" das POKE eigentlich, daß es ein DWORD schreiben soll?
    vom Typen des value.

    'n schön' Tach auch
    HB

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 30.08.2012, 11:12
  2. Probleme in ST
    Von buddd im Forum CODESYS und IEC61131
    Antworten: 17
    Letzter Beitrag: 30.07.2010, 09:26
  3. Probleme über Probleme!
    Von tom_2802 im Forum Simatic
    Antworten: 25
    Letzter Beitrag: 12.06.2008, 22:19
  4. FI-Probleme
    Von mectron im Forum Schaltschrankbau
    Antworten: 15
    Letzter Beitrag: 11.02.2007, 13:29
  5. dp probleme
    Von Hitschkock im Forum Feldbusse
    Antworten: 6
    Letzter Beitrag: 31.07.2005, 13:14

Lesezeichen

Berechtigungen

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