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

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

Thema: Indirekte Adressierung Fehler

  1. #21
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.308
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Gh0st90 Beitrag anzeigen
    mit dem LW tritt der Fehler nicht auf. Aber wieso? Wo liegt der Unterschied?
    Hilfe zu AWL > Indirekte Adressierung
    > Bereichsinterne, registerindirekte Adressierung: die Speicherbereichskennung wird aus der Operation genommen: "T LW [AR1..."
    > Bereichsübergreifende, registerindirekte Adressierung: die Speicherbereichskennung wird aus AR1 genommen: "T W [AR1..."


    Zitat Zitat von Gh0st90 Beitrag anzeigen
    Ist es von der Funktion überhaupt noch das selbe mit LW?
    Ja, wenn #Ziel in TEMP liegt.
    Ist #Ziel wirklich in TEMP deklariert? Wenn Du im AWL-Editor "LAR1 P#L16.0" eingibst, wird das automatisch in "LAR1 P##Ziel" geändert?

    "T W [AR1..." ist eigentlich der bessere Code, der funktioniert nämlich auch dann richtig, wenn #Ziel woanders als TEMP deklariert ist.


    Zitat Zitat von Gh0st90 Beitrag anzeigen
    In einer 319-F funktioniert das Programm auch ohne LW. Warum in der 400er nur mit LW?
    Das ist nicht normal, "T W [AR1..." muß auch in einer S7-400 funktionieren.

    Hast Du vielleicht eine "komische" HW Konfig, z.B. hast Du in der CPU zu wenig Lokaldatengröße eingestellt?
    HW Konfig ist übersetzt und geladen? Bausteinkonsistenz ist OK? Welchen Lokaldatenbedarf hat der FC68?
    Kannst Du mal einen völlig neuen FC anlegen und die Deklarationen und alle Netzwerke aus dem FC68 in den neuen FC kopieren - ist der Fehler dann immer noch da?

    Wann bzw. in welchem OB wird der Code (FC68) aufgerufen? Wie sieht der Aufruf des FC68 aus? Existiert der übergebene DB und ist lang genug?


    Zitat Zitat von Gh0st90 Beitrag anzeigen
    LAR1 P##Ziel
    L W#16#1002
    T W [AR1,P#0.0]


    Im AR1 steht die 16.0.

    Der Fehler lautet weiterhin:

    Bereichsfehler beim Schreiben
    Falsche Bereichskennung: 86
    Hmm, wie kann bei einer indirekten Adressierung die Bereichskennung 16#86 = L "falsch" sein???

    Deine CPU ist ja schon etwas älter - Vielleicht ist das ein Firmware-Problem? Was für eine Firmware-Version hat Deine CPU 414-1XG02?
    Was für eine Step7-Version benutzt Du?


    PS: Bei der Analyse von schwierigen Fehlern ist es sehr wichtig, alles GANZ genau zu lesen und wiederzugeben - der AR1 wird bestimmt nicht 16.0 sondern L16.0 enthalten.
    Hast Du vielleicht mal einen Screenshot vom Beobachten Deiner Programmstelle? (wie das Bild von JoopB in #17)
    Zitat Zitat von JoopB Beitrag anzeigen
    Im AR1 steht die 16.0.
    Normal solte da L 16.0 stehn.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  2. #22
    Registriert seit
    06.10.2003
    Beiträge
    3.445
    Danke
    453
    Erhielt 509 Danke für 411 Beiträge

    Standard

    Die bereichsübergreifende Adressierung kann nicht auf temporäre Lokaldaten angewendet werden, nicht in der S7-300 und auch nicht in der S7-400. In Fachbüchern wird das erwähnt, eine nähere Erklärung habe ich allerdings noch nirgendwo gefunden. Man soll in so einem Fall die bereichsinterne Adressierung benutzen. Probleme kann es dadurch eigentlich keine geben, da die lokalen Daten so wie so nur bausteininterne Daten sind. d.h. der Operandenbereich kann sich nicht anwendungsspezifisch ändern.

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

  3. #23
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.308
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard

    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    Die bereichsübergreifende Adressierung kann nicht auf temporäre Lokaldaten angewendet werden, nicht in der S7-300 und auch nicht in der S7-400. In Fachbüchern wird das erwähnt
    Hmm, in welchem Fachbuch wird das erwähnt? Wird da eventuell von der speicherindirekten Adressierung geschrieben? Die gibt es in der Tat nur bereichsintern. Oder kann es sein, daß das bei S7-CPU der ersten Generationen noch nicht ging?

    Siemens zeigt z.B. hier in Bild 03 die registerindirekte bereichsübergreifende Adressierung einer ANY-Variable in TEMP. Ohne Hinweis, daß das in irgendeiner S7 nicht gehen würde.

    Laut Operationslisten der S7-300 und S7-400 ist die bereichsübergreifende Adressierung von L (Lokaldaten TEMP) möglich. Leider finde ich bei Siemens aber nicht die zur 414-1XG02 gehörige Operationsliste.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #24
    Gh0st90 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.01.2016
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    ja ich habe mich verlesen. Es steht L 16.0 im AR1

    #Ziel befindet sich im TEMP.


    Ich werde es mit dem neuen FC später testen. Der DB existiert und ist auch lang genug. Der FC wird im OB1 aufgerufen.

    Ich verwende die Step 7 Version 5.5 SP4. Die CPU ist eine 414-1XG02-0AB0

    Die Hardware ist übersetzt und geladen. Welche Lokaldatengröße sollte Konfiguriert werden?

    Danke für die vielen Antworten.

    Gruß,
    Gh0st90

  5. #25
    Registriert seit
    06.10.2003
    Beiträge
    3.445
    Danke
    453
    Erhielt 509 Danke für 411 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Hmm, in welchem Fachbuch wird das erwähnt? ..
    Das steht in der Berger-Bibel "Automatisieren mit Step7 in AWL und SCL". Ich weiß das, da ich schon öfter über diese Sache gestolpert bin. Ich besitze eine ältere Ausgabe des Buches. Heute abend kann ich das entsprechende Zitat heraus suchen. Wenn ich dieses Problem hatte, dann wahrscheinlich während der Entwicklung in PLCSIM, falls das von Bedeutung sein sollte.
    Geändert von Onkel Dagobert (20.01.2016 um 11:40 Uhr) Grund: Aus Gründen der Unsicherheit ..
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

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

    PN/DP (21.01.2016)

  7. #26
    Registriert seit
    01.10.2012
    Beiträge
    203
    Danke
    12
    Erhielt 56 Danke für 36 Beiträge

    Standard

    Ich habe die 7. Auflage von 2011 und zitiere von Seite 464
    Die bereichsübergreifende Adressierung könne Sie nicht auf Lokaldaten anwenden (Stopp der CPU). Weichen Sie auf die bereichsinterne Adressierung aus, wenn der adressierte Bereich in den temporären Lokaldaten liegt.
    Nüchtern betrachtet war es besoffen besser.

  8. Folgende 2 Benutzer sagen Danke zu Bapho für den nützlichen Beitrag:

    Onkel Dagobert (20.01.2016),PN/DP (21.01.2016)

  9. #27
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.308
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard

    Naja, wer weiß wie oft der Berger seine Erkenntnisse von einem Buch ins nächste kopiert...

    Bei S7-314-CPU wurde der Zugriff auf Lokaldaten mit bereichsübergreifender, registerindirekter Adressierung mit der Firmware V1.1.0 eingeführt. (1998 ?)
    Bei S7-400 habe ich nichts dazu gefunden. Es funktioniert aber mindestens schon seit V3.0 (2001).


    Testcode:
    Code:
          L     0
          T     LW    16
    
          LAR1  P##Ziel          //Ziel ist eine ANY-Variable in TEMP an Adresse 16.0
          L     W#16#1002
          T     W [AR1,P#0.0]    //bereichsübergreifend
    
          L     0
          L     W [AR1,P#0.0]    //bereichsübergreifend
    
          L     W#16#1234
          T     LW [AR1,P#0.0]   //bereichsintern
          L     0
          L     W [AR1,P#0.0]    //bereichsübergreifend
    Ich habe heute mal diesen Code in verschiedenen möglichst alten echten CPU getestet.
    Z.B. in einer 414-2XG03 V3.0.2 - die CPU kennt das Fachbuch anscheinend nicht und funktioniert einfach ohne Murren
    Eine 416-2XK04 V4.1.0 verhält sich genauso "unmöglich" einwandfrei
    In einer 314 IFM 314-5AE03 V1.2.0 von 2001 und in einer 315-2EH14 V3.2.10 funktioniert der Code ebenfalls einwandfrei.

    Leider habe ich keine S7-400-CPU mit Firmware älter als V3 (2001).


    Ob eine CPU die bereichsübergreifende registerindirekte Adressierung der temporären Lokaldaten beherrscht kann man sehr einfach testen:
    Code:
          LAR1  P##OB1_DATE_TIME
          L     D [AR1,P#0.0]
          L     D [AR1,P#4.0]
    Diesen Code in den OB1 packen und beobachten. Und einen Blick in den Diagnosepuffer der CPU werfen.
    (bei realen Anlagen kann man vorsichtshalber einen OB121 in die CPU laden)


    @Gh0st90
    Welche Firmware hat Deine CPU 414-1XG02 ?

    Harald
    Angehängte Grafiken Angehängte Grafiken
    Geändert von PN/DP (20.01.2016 um 22:35 Uhr) Grund: + "der temporären Lokaldaten"
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    Onkel Dagobert (20.01.2016)

  11. #28
    Registriert seit
    06.10.2003
    Beiträge
    3.445
    Danke
    453
    Erhielt 509 Danke für 411 Beiträge

    Standard

    Danke Harald! Ich war schon fast an mir verzweifelt. Das Zitat aus der Bibel kann ich mir nun wohl sparen. In meiner Ausgabe von 1999 steht es im Kapitel "25.2.5 Registerindirekte bereichsübergreifende Adressierung".

    Aus Kompatibilitätsgründen würde ich in Standardbausteinen dennoch die "alte Version" bevorzugen.
    Geändert von Onkel Dagobert (20.01.2016 um 19:56 Uhr)
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  12. #29
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.308
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard

    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    Aus Kompatibilitätsgründen würde ich in Standardbausteinen dennoch die "alte Version" bevorzugen.
    Jepp, wenn es nicht zwingend bereichsübergreifend sein muß (z.B. wenn man nicht weiß, worauf ein übergebener Pointer zeigen wird).

    Außerdem ist bereichsinterne Adressierung verständlicher, deshalb nehme ich die öfter, z.B.
    In FC einen DATE_AND_TIME-Parameter von IN nach TEMP kopieren
    Code:
          L     P##BT;             // Adresse IN.BT
          LAR1  ;
          L     W [AR1,P#0.0];     // POINTER.DB_Nr
          T     #DB_No;
          L     D [AR1,P#2.0];     // POINTER.Bereichsadresse
          LAR1  ;                  // AR1: Adresse des IN-DT (Bereichskennung ?)
          LAR2  P##tmpBT;          // AR2: Adresse des TEMP-DT (Bereichskennung L)
    
    //DATE_AND_TIME (8 Byte) BT von IN nach TEMP kopieren
          AUF   DB [#DB_No];
          L     D [AR1,P#0.0];     <-- bereichsübergreifend, weil unvorhersehbarer IN-Parameter
          T     LD [AR2,P#0.0];    <-- bereichsintern, schreibt deutlich lesbar nach L (TEMP)
          L     D [AR1,P#4.0];
          T     LD [AR2,P#4.0];

    Wenn der Speicherbereich feststeht, dann kann man bereichsübergreifend oder bereichsintern nach Belieben verwenden:
    In FB einen ANY-Parameter von IN nach TEMP kopieren
    Code:
          ...
          LAR1                              // AR1: absolute Adresse #E_Any_farAdr im IDB (Bereichskennung DI)
          LAR2  P##tmp_Any_farAdr           // AR2: Adresse des TEMP-ANY (Bereichskennung L)
    
    //ANY IN.E_Any_farAdr nach TEMP.tmp_Any_farAdr kopieren, bereichsübergreifend IDB nach TEMP
          L     D [AR1,P#0.0]               // (S7-ID + Datentyp + Wiederholfaktor)
          T     D [AR2,P#0.0]
          L     W [AR1,P#4.0]               // (DB_Nr)
          T     W [AR2,P#4.0]
          L     D [AR1,P#6.0]               // (Bereichsadresse)
          T     D [AR2,P#6.0]
    ...
          ...
          LAR1                              // AR1: absolute Adresse #E_Any_locAdr im IDB (Bereichskennung DI)
          LAR2  P##tmp_Any_locAdr           // AR2: Adresse des TEMP-ANY (Bereichskennung L)
    
    //ANY IN.E_Any_locAdr nach TEMP.tmp_Any_locAdr kopieren, bereichsintern IDB nach TEMP
    //ALTERNATIVE Codevariante für besser verstehbar
          L     DID [AR1,P#0.0]             // (S7-ID + Datentyp + Wiederholfaktor)
          T     LD [AR2,P#0.0]
          L     DIW [AR1,P#4.0]             // (DB_Nr)
          T     LW [AR2,P#4.0]
          L     DID [AR1,P#6.0]             // (Bereichsadresse)
          T     LD [AR2,P#6.0]
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  13. Folgende 2 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    Onkel Dagobert (21.01.2016),Ralle (21.01.2016)

  14. #30
    Registriert seit
    24.10.2007
    Ort
    Niederlande
    Beiträge
    673
    Danke
    22
    Erhielt 143 Danke für 135 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @ Harald
    In einer 314 IFM 314-5AE03 V1.2.0 von 2001 und in einer 315-2EH14 V3.2.10 funktioniert der Code ebenfalls einwandfrei.
    Ich habe die test gemacht mit ein 314IFM 314-5AE02 V2 (baujahr +/- 1998 und da gibt dass ein fehler bei bereichsubergreifende zugang. OB121 wurde aktiefiert.
    314imf.JPG

    Joop

  15. Folgender Benutzer sagt Danke zu JoopB für den nützlichen Beitrag:

    PN/DP (21.01.2016)

Ähnliche Themen

  1. Step 7 Indirekte Adressierung
    Von firefox711 im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 16.05.2013, 07:55
  2. Indirekte Adressierung
    Von Christian1984 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 18.02.2012, 16:31
  3. Indirekte Adressierung
    Von PapaLeo im Forum Simatic
    Antworten: 19
    Letzter Beitrag: 11.05.2009, 17:52
  4. indirekte Adressierung
    Von Linowitch im Forum HMI
    Antworten: 13
    Letzter Beitrag: 06.12.2008, 19:43
  5. Indirekte Adressierung
    Von wusel220983 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 18.05.2007, 18:19

Lesezeichen

Berechtigungen

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