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

Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 39 von 39

Thema: Eingangswort über Pointer einlesen (Anfängerfrage)

  1. #31
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.709 Danke für 1.240 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von bike Beitrag anzeigen
    @TE; Wenn man ein EW über Pointer ansprechen muss , dann bitte es gut dokumentieren.
    Solltest du in deinem FB das 2. Register benötigen, dann dieses im ersten NW1
    LAR2
    T #AR2_SAVE

    und im letzten NW
    L #AR2_SAVE
    TAR2

    schreiben, dann passiert dir beim Rücksprung aus der Funktion kein unschönes Erlebnis.
    Da hast du aber einen groben Gedankenfehler, wozu das Sichern des AR2 in einem FB überhaupt notwendig ist.
    Am Ende des FB interessiert es nämlich überhaupt keinen mehr ob das AR2 passt oder nicht, weil der Inhalt dann nicht mehr benötigt wird.

    Wenn du das AR2 manipulierst, laufen alle Zugriffe auf statische Variablen bei symbolischer Adressierung auf falsche Speicherbereiche. Darum muss es heißen:
    Bevor in einem FB das AR2 manipuliert wird, sichern, und unmittelbar nachdem es nicht mehr verwendet wird, wiederherstellen. Bzw. spätestens dann, wenn man auf eine Variable zugreifen will die im Instanz-DB des FB liegt, d.h. In, Out, InOut oder Stat.

    Aber das sieht man selbst bei Siemens Programmbeispielen, dass da ohne Sinn und Verstand Register gesichert und rückgesichert werden. Was nur zeigt dass der Programmierer überhaupt nicht verstanden hat was er da macht.

  2. #32
    Registriert seit
    03.04.2008
    Beiträge
    6.206
    Danke
    237
    Erhielt 818 Danke für 692 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Da hast du aber einen groben Gedankenfehler, wozu das Sichern des AR2 in einem FB überhaupt notwendig ist.
    Am Ende des FB interessiert es nämlich überhaupt keinen mehr ob das AR2 passt oder nicht, weil der Inhalt dann nicht mehr benötigt wird.

    Wenn du das AR2 manipulierst, laufen alle Zugriffe auf statische Variablen bei symbolischer Adressierung auf falsche Speicherbereiche. Darum muss es heißen:
    Bevor in einem FB das AR2 manipuliert wird, sichern, und unmittelbar nachdem es nicht mehr verwendet wird, wiederherstellen. Bzw. spätestens dann, wenn man auf eine Variable zugreifen will die im Instanz-DB des FB liegt, d.h. In, Out, InOut oder Stat.

    Aber das sieht man selbst bei Siemens Programmbeispielen, dass da ohne Sinn und Verstand Register gesichert und rückgesichert werden. Was nur zeigt dass der Programmierer überhaupt nicht verstanden hat was er da macht.
    Habe ich den wirklich?
    Mir ist schon klar, dass im AR2 für DI bzw Temp zuständig ist.
    Und ist es wirklich unerheblich, wenn ich einen FB als Multiinstanz verwende, was mit dem AR2 geschieht?
    Thomas, ich habe es gerade versucht, und habe beim Rücksprung bewusst Müll in das AR2 geschrieben und es hat beim Aufruf des nächsten FB geknallt.
    Wenn ich jetzt über Weihnachten lang und weile habe, muss ich mir das einmal genauer anschauen.

    Toki du hast natürlich recht, sorry.

    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  3. #33
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.709 Danke für 1.240 Beiträge

    Standard

    Zitat Zitat von bike Beitrag anzeigen
    Thomas, ich habe es gerade versucht, und habe beim Rücksprung bewusst Müll in das AR2 geschrieben und es hat beim Aufruf des nächsten FB geknallt.
    Was heißt "geknallt"?

    Solange du das Call-Makro zum Aufrufen eines FB verwendest (mit UC kann man ja nur manuell einen FB als Multiinstanz aufrufen) kann da nichts passieren, weil dieses Makro eben auch das Sichern und Wiederherstellen des AR2 beinhaltet.
    Ein Call "FB12" umschließt dann automatisch folgendes:
    Code:
          TAR2  LD     0
          +AR2  P#12.0
          UC    "FB12"
          LAR2  LD     0

  4. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Blockmove (19.12.2013)

  5. #34
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.539
    Danke
    1.153
    Erhielt 1.253 Danke für 982 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Makro eben auch das Sichern und Wiederherstellen des AR2 beinhaltet.
    Ein Call "FB12" umschließt dann automatisch folgendes:
    Code:
          TAR2  LD     0
          +AR2  P#12.0
          UC    "FB12"
          LAR2  LD     0
    Was ist mit "Überlauf" des Lokaldaten-Stacks?

    Gruß
    Dieter

  6. #35
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.709 Danke für 1.240 Beiträge

    Standard

    Was meinst du mit Überlauf?

    Er müsste schon mutwillig auf die Vorgänger-Lokaldaten schreiben um das System zum Einsturz zu bringen.
    Im untergeordneten FB z.B.:
    Code:
    L DW#16#87000000
    LAR1  
    L P#9999.7
    T D [AR1,P#0.0]
    dann zeigt im übergeordneten FB das AR2 auf 9999.7 (in meinem konkreten Beispiel wo das AR2 im LD 0 zwischengespeichert wird), obwohl keiner was am AR2 gedreht hat

  7. #36
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.539
    Danke
    1.153
    Erhielt 1.253 Danke für 982 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Was meinst du mit Überlauf?
    Der Lokaldaten-Bereich hat je nach CPU nur eine bestimmte Größe.
    Was passiert, wenn im aufgerufen FB die kompletten Lokaldaten belegt werden?
    Bin zwar selber noch nie in die Situation gekommen ... aber es gibt ja bekanntlich nichts was nicht irgendeiner Programmierer fertig bringt


    Gruß
    Dieter

  8. #37
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.709 Danke für 1.240 Beiträge

    Standard

    Zitat Zitat von Blockmove Beitrag anzeigen
    Der Lokaldaten-Bereich hat je nach CPU nur eine bestimmte Größe.
    Was passiert, wenn im aufgerufen FB die kompletten Lokaldaten belegt werden?
    Bin zwar selber noch nie in die Situation gekommen ... aber es gibt ja bekanntlich nichts was nicht irgendeiner Programmierer fertig bringt
    Pro Baustein wird der Lokaldatenbereich schon beim Laden überprüft. D.h. wenn ich einen Baustein laden will, der auf LD 3000 zugreifen will wird das von der CPU abgewiesen wenn diese nur 2048 Bytes Lokaldaten pro Baustein hat. Da der Speicher für das AR2 immer hinter die letzte deklarierte Variable gelegt wird, sollte das auch abgefangen werden.
    In die Verlegenheit dass mir der gesamte Lokaldatenbereich für eine Prioritätsklasse ausgegangen ist, bin ich noch nicht gekommen. Bei einer 300er wird vorher die maximale Bausteinverschachtelungstiefe (war mal bei 16) zuschlagen.

  9. Folgende 2 Benutzer sagen Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Blockmove (19.12.2013),Toki0604 (20.12.2013)

  10. #38
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.539
    Danke
    1.153
    Erhielt 1.253 Danke für 982 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Pro Baustein wird der Lokaldatenbereich schon beim Laden überprüft.
    Hin und wieder sollte man das Gehirn komprimieren Du hast vollkommen recht mit deinen Ausführungen.
    Der Stack ist ja größer als der max. adressierbare Lokaldatenbereich in der Steuerung.

    Gruß
    Dieter

  11. #39
    Registriert seit
    14.10.2010
    Ort
    Telgte
    Beiträge
    655
    Danke
    97
    Erhielt 129 Danke für 99 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Respekt Thomas!
    wo ich deine Ausführungen lese, erinnert mich das an einige Erläuterungen des Siemens-Trainers zum Speicherkonzept.
    Doch das so detailliert zu begreifen, umzusetzen und zu erläutern das hat Klasse...
    Du solltest vielleicht bei Siemens anfangen, da könntest wahrscheinlich einigen Leuten noch was beibringen!

    @Dieter
    wenn du weißt wie man sein Gehirn komprimiert dann schick mir ne PN. Ich versuche fehlenden Speicherplatz hin und wieder
    mit einer "kleinen Ram-Löschung" in Griff zu bekommen .
    Klappt aber nur sehr bedingt (ich tue es trotzdem immer wieder)

    Gruß, Toki
    Programmierumgebung: Step7 V5.5, WinCCflex2008-SP3, TIA-PortalV13, MicroWinV4.0

Ähnliche Themen

  1. Antworten: 11
    Letzter Beitrag: 01.11.2013, 19:26
  2. Antworten: 9
    Letzter Beitrag: 12.12.2009, 00:27
  3. Anfängerfrage über Textmeldungen.... Hilfe
    Von Pusher im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 16.01.2009, 09:39
  4. Antworten: 9
    Letzter Beitrag: 14.12.2007, 18:07
  5. Anfängerfrage über array
    Von noeppkes im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 19.09.2007, 16:22

Lesezeichen

Berechtigungen

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