Frage zur indirekten Programmoerung

Outrider

Level-1
Beiträge
745
Reaktionspunkte
5
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ß
 
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?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Zuletzt bearbeitet:
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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sollte ich jetzt da wirklich einen kleineren Denkfehler am frühen Morgen aufgesessen sein? :oops::oops:
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
 
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....
 
Zuletzt bearbeitet:
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.
 
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.


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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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

Danke für deine Belehrung Harald.
Worin unterscheidet sich dein Beitrag von dem Zitierten ?

Gruß
Larry
 
Zurück
Oben