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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Frage zur indirekten Programmoerung

  1. #1
    Registriert seit
    08.07.2004
    Beiträge
    503
    Danke
    11
    Erhielt 4 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin,
    habe folgendes geschrieben:

    L L#124
    T MD 14

    U E 0.0

    = M [MD 14]

    d.h. der M124.x wird indirekt gesetzt wenn der Eingang 0.0 gesetzt ist.
    Wenn ich den Status in der Tabelle beobachte, sehe ich aber nur Nullen , obwohl die CPU NICHT im STOP ist !

    Mit dem Befehl " = M [MD 14] " wird nur das Byte adressiert aber nicht das Bit !
    Warum lässt es die CPU zu ?!!!!!!

    Übrigens diesen Befehl habe ich aus den Siemens Unterlagen Programmieren 3 , dort heißt es zum Thema Speicherindirekte Adressierung U E[MD30]
    wo bleibt aber das einzelne Bit .0 bis .7 ?


    Gruß
    Zitieren Zitieren Frage zur indirekten Programmoerung  

  2. #2
    Registriert seit
    23.02.2012
    Ort
    Norilsk/Sibirien
    Beiträge
    31
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard

    wie genau meinst du das? Möchtest du das L#124 erst in das md 14 rein transferieren wenn e0.0 kommt oder möchtest du ein bestimmtes bit in md 14 beschreiben?

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Zitat Zitat von Outrider Beitrag anzeigen
    d.h. der M124.x wird indirekt gesetzt wenn der Eingang 0.0 gesetzt ist.
    Wenn ich den Status in der Tabelle beobachte, sehe ich aber nur Nullen , obwohl die CPU NICHT im STOP ist !

    Mit dem Befehl " = M [MD 14] " wird nur das Byte adressiert aber nicht das Bit !
    Warum lässt es die CPU zu ?!!!!!!
    Hallo,
    du addressierst so nicht das Byte 124 sondern das 124. Bit im Merkerbereich.
    Der Pointer wird als Bit-Pointer übergeben - du mußt deine 124 also noch mit 8 multiplizieren um wirklich das Byte anzusprechen. Oder du schreibst :
    Code:
    L p#124.0
    T MD14
    Gruß
    Larry
    Geändert von Larry Laffer (09.11.2012 um 12:33 Uhr)

  4. #4
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.732
    Danke
    314
    Erhielt 1.520 Danke für 1.282 Beiträge

    Standard

    Genau genommen wird damit nicht das 124te Bit,
    sondern eher das Bit 12.4 adressiert.

    Wenn 124 nun also das Byte 124 sein soll,
    dann müsste man den berühmten zweizeiler schreiben, oder natürlich bei einer Konstante die P# Variante.

    L 124
    SLD3
    T MD14

    Die ersten 3 Bit im LSB sind die Bit-Nummer.

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo Manuel,
    ich möchte jetzt nicht schulmeisterlich daherkommen - aber rechne doch bitte noch einmal nach.
    Aus 124 und SLD3 wird auch nicht 1240 ...

    Gruß
    Larry

  6. #6
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.732
    Danke
    314
    Erhielt 1.520 Danke für 1.282 Beiträge

    Standard

    Sollte ich jetzt da wirklich einen kleineren Denkfehler am frühen Morgen aufgesessen sein?
    Pointer:
    AAAAAABBB
    A = Adresse
    B = Bit

    124 = 1111100 = Adresse 15 , Bit 4 (Keine Ahnung ob das jetzt das 124 Bit wäre, könnte aber durchaus sein)

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  7. #7
    Registriert seit
    15.04.2011
    Beiträge
    1.122
    Danke
    229
    Erhielt 208 Danke für 176 Beiträge

    Standard

    Genau genommen ist es das 125. Bit des Merkerbereichs, da der 1. Merker die Adresse 0.0 hat.

    M 0.7 = 8tes Bit
    M14.7 = 120tes Bit
    M15.4 = 125tes Bit

    Oder vertue ich mich da?

    Außerdem ist das Beispiel unglücklich gewählt. Wir der Eingang 0.0 auf 1 gesetzt, wird der Zeiger dadurch verändert (MD 14 = M 14.0 - M 17.) Hat zwar in diesem Fall keine Auswirkung, wird aber eine kleinere Zahl geladen, schreibt man dann in die Byte-Adresse....
    Geändert von 190B (09.11.2012 um 09:07 Uhr)
    Gruß
    190B

  8. #8
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Zitat Zitat von 190B Beitrag anzeigen
    Genau genommen ist es das 125. Bit des Merkerbereichs, da der 1. Merker die Adresse 0.0 hat.

    M 0.7 = 8tes Bit
    M14.7 = 120tes Bit
    M15.4 = 125tes Bit

    Oder vertue ich mich da?

    Außerdem ist das Beispiel unglücklich gewählt. Wir der Eingang 0.0 auf 1 gesetzt, wird der Zeiger dadurch verändert (MD 14 = M 14.0 - M 17.) Hat zwar in diesem Fall keine Auswirkung, wird aber eine kleinere Zahl geladen, schreibt man dann in die Byte-Adresse....
    Da hast du recht, aber nach dem Schreiben braucht man vielleicht den Pointer nicht mehr.
    mfG Aventinus

  9. #9
    Avatar von Outrider
    Outrider ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.07.2004
    Beiträge
    503
    Danke
    11
    Erhielt 4 Danke für 3 Beiträge

    Standard

    Danke für die rege Beteiligung
    Zitieren Zitieren Danke  

  10. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Outrider Beitrag anzeigen
    habe folgendes geschrieben:

    L L#124
    T MD 14

    U E 0.0

    = M [MD 14]

    d.h. der M124.x wird indirekt gesetzt wenn der Eingang 0.0 gesetzt ist.
    Wenn ich den Status in der Tabelle beobachte, sehe ich aber nur Nullen , obwohl die CPU NICHT im STOP ist !
    (farbige Hervorhebungen sind von mir)

    Es wird IMMER der Zustand des E0.0 in den Merker M15.4 übertragen (egal ob E0.0 gerade 0 oder 1 ist, M15.4 bekommt den gleichen Zustand). Warum sollte dabei die SPS in Stop gehen?

    Ein Merker M124.x wird von dem Code überhaupt nicht beeinflußt. Wenn Du M124.x in einer VAT beobachtest, dann ändert sich dessen Zustand selbstverständlich nicht.


    Zitat Zitat von Outrider Beitrag anzeigen
    Mit dem Befehl " = M [MD 14] " wird nur das Byte adressiert aber nicht das Bit !
    Warum lässt es die CPU zu ?!!!!!!
    Es wird das Bit im Merkerbereich adressiert, dessen Adresse in MD14 steht.
    MD14 wurde mit L#124 geladen, das entspricht P#15.4 ---> M15.4 wird adressiert.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Hilfe zur indirekten Adressierung
    Von LittleJack86 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 28.08.2012, 20:11
  2. Antworten: 15
    Letzter Beitrag: 09.04.2009, 20:57
  3. Frage zur Bausteinkonsitenzprüfung
    Von rostiger Nagel im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 09.03.2009, 14:08
  4. Frage zur S7-Syntax.
    Von Tigerkroete im Forum Programmierstrategien
    Antworten: 6
    Letzter Beitrag: 19.06.2006, 12:48
  5. Grundlegendes zur indirekten Adressierung
    Von ms25 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 26.03.2006, 20:05

Lesezeichen

Berechtigungen

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