Step 7 indirekte Adressierung

joe_bvb

Level-1
Beiträge
57
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
Ich habe eine kleine Aufgabe für euch: wie kann ich im folgenden Programm auf MD100 verzichten, da ich mit keinem Merker arbeiten darf.
Danke.


AUF #DB_Nr// Der Entsprechende Datenbaustein wird aufgerufen
U #Flanke_Write
UN #FIFO_voll
SPBNB _005
L DBW 2
L 1
==I
SPBNB Anf
L P#10.0
T MD 100
L #Value
T DBD [MD 100]
Anf: L #Value
T DBD [MD 100]
L MD 100
L P#4.0
+D
T MD 100
_005: NOP 0
 
Wenn DBW 2 <> 1 , dann ist MD100 undefiniert (T DBD[MD100]) ?

#stat_var: DINT wäre meine Wahl. Sollte doch für den nächsten Durchlauf gespeichert sein.
 
Du hast ja ohnehin einen DB offen (#DB_Nr), definiere dir darin ein DINT (Z.Bsp. DBD1000, wo auch immer das im DB steht) und nimm diese.
 
Wenn DBW 2 <> 1 , dann ist MD100 undefiniert (T DBD[MD100]) ?

#stat_var: DINT wäre meine Wahl. Sollte doch für den nächsten Durchlauf gespeichert sein.

Doch ist definiert, weil der erste Wert von DBW2 ist unbedingt 1.
Mit Stat habe versucht, akzeptiert er nicht wenn ich schreibe T DBD[#STAT_var]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Oder du kopierst das um in eine Temp, wenn er eine Staat nicht im Pointer will:

Code:
      L     #StatPointer
      T     #TempPointer


...


      L     DBD [#TempPointer]
      T ...

...


      L     #TempPointer
      T     #StatPointer

Oder du siehst dir mal unsere FAQ zum Thema ind. Adressierung an und baust den Pointer selbst.
Etwa so dann:

Code:
L #Zaehler                       //Stat_Int
 SLD   3                           //Adreßregister 1 mit Adresse laden
 LAR1  
 L     DBD [AR1,P#0.0]
 T     #Schmiervariable

L Zaehler
L 4
+I
T Zaehler

PS: Achtung bei Multiinstanzen mit dem AR1, gibt aber viel Code zu dem Thema hier im Forum.
 
Zuletzt bearbeitet:
Oder du kopierst das um, wenn er eine Staat nicht im Pointer will:

Code:
L     #StatPointer
      T     #TempPointer


...


      L     DBD [#TempPointer]
T ...

...


      L     #TempPointer
      T     #StatPointer

Ja ok aber das Problem dass dieser Merker in einem Anderen Baustein verwendet wird.
Als Merker kann ich das überall aufrufen und verwenden aber als Temp_var oder Stat_var geht ja nicht
 
Ja ok aber das Problem dass dieser Merker in einem Anderen Baustein verwendet wird.
Als Merker kann ich das überall aufrufen und verwenden aber als Temp_var oder Stat_var geht ja nicht

Dann mußt du die Statvar noch an einen OUT legen und so an den anderen Baustein weitergeben. Wenn der andere Baustein diese Var verändert muß es ein IN_OUT sein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Oder du kopierst das um in eine Temp, wenn er eine Staat nicht im Pointer will:

Code:
      L     #StatPointer
      T     #TempPointer




...


      L     DBD [#TempPointer]
      T ...

...


      L     #TempPointer
      T     #StatPointer

Oder du siehst dir mal unsere FAQ zum Thema ind. Adressierung an und baust den Pointer selbst.
Etwa so dann:

Code:
L #Zaehler                       //Stat_Int
 SLD   3                           //Adreßregister 1 mit Adresse laden
 LAR1  
 L     DBD [AR1,P#0.0]
 T     #Schmiervariable

L Zaehler
L 4
+I
T Zaehler

PS: Achtung bei Multiinstanzen mit dem AR1, gibt aber viel Code zu dem Thema hier im Forum.

Gibt's die Möglichkeit jedes mal den Inhalt von AR1 zu speichern und darauf P#4.0 zu addieren?
und kann man diesen Inhalt mehrmals verwenden? (d.h. in mehreren Bausteine mit dem Letzten gespeicherten Wert zu verwenden)
 
das klingt mir nach einer Aufgabe für das schöne, bausteinübergreifende Datenhandling!

wie das geht? mit UDT und FB und UC! ... http://www.sps-forum.de/simatic/9425-bausteine-aufrufen-fuer-dummies-2.html#post177186
(ich muss mal eine neue Beschreibung dazu schreiben)

da spart man sich das ganze gemache von wegen "aber nicht als merker *heul*" und "wo ist nun das fifo-register? *flenn*" und "ich brauch das aber noch in einem anderen baustein! *winsel*"
 
Zurück
Oben