AWL -> Problem bei einer gegebenen Aufgabe

PHANTOMIAS

Level-1
Beiträge
30
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle!

Ich bin Anfänger was SPS und AWL betrifft. Ich mache zur Zeit darüber ein Labor und hoffe, dass Ihr mir ein wenig helfen könnt bei meinen Problemen.

Im Labor wird SIMATIC verwendet, ich zuhause verwende zum Vorbereiten WinSPS in aktueller Version.

Folgende Aufgabenstellung habe ich zur Zeit:
Aufgabe.jpg


Ich habe nun folgendes programmiert:
OB1:
Code:
       CALL "Zeitmessung"
         ErgebnisLogik:="Ergebnis"
         Zeitglied:="Tmr"
         Zeitdauer:="AblNeuMW"
         NeuerMesswert:="NeuerMW"
Zeitmessung (FC)
Code:
       U    #ErgebnisLogik
       R    #NeuerMesswert
       L    S5T#9S990MS
       SE   #Zeitglied

       UN   #ErgebnisLogik
       SPB  CALC
       BE

CALC  :NOP  1
       L    999
       L    #Zeitglied
       -I
       T    #Zeitdauer
       S    #NeuerMesswert
Ist das so korrekt? Also laufen tut es, jedoch habe ich das Problem, dass wenn ich die SPS auf Run stelle, dass wenn #ErgebnisLogik nicht betätigt (das ist das Ergebnis, Schalter4 betätigt und Schalter1-3 AUS), #NeuerMesswert AN ist. Das sollte ja nicht sein, oder?
Hat jemand eine Idee was ich machen muss, dass es 100%ig korrekt funktioniert?

Gruß -PHANTOMIAS-
 
Probier es mal so:

Code:
      U     #ErgebnisLogik
      R     #NeuerMesswert
      L     S5T#9S990MS
      SE    #Zeitglied

      L     0
      L     #Zeitglied
      ==I   
      O     #ErgebnisLogik
      SPBN  CALC

      R     #NeuerMesswert
      L     0
      T     #Zeitdauer
      BE    

CALC: NOP   0
      L     999
      L     #Zeitglied
      -I    
      T     #Zeitdauer
      S     #NeuerMesswert
Nach STOP->>Run steht das Zeitglied immer auf Wert 0.

Noch ein Hinweis: Wenn man Outputs eines FC intern beschreibt (setzt/rücksetzt), sollte man das immer tun, da das Ergebnis sonst durchaus auch unbestimmt sein kann, im Falle des "Nicht Beschreibens". Hier ist es jetzt so, entweder "#NeuerMesswert" wird gesetzt oder rückgesetzt, "#Zeitwert" ist entweder mit 0 belegt, oder mit dem berechneten Wert.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die schnelle Antwort.
Funktioniert nun einwandfrei und ich glaube auch alles zu verstehen mit einer Ausnahme:

Das NOP 1 hat es bei mir automatisch eingefüllt als ich CALC: geschrieben habe. Aus meiner Dokumentation weiß ich nur, dass NOP Nulloperation bedeutet. Kurz gesagt: ich weiß nicht was das bedeutet. Wieso hast Du nun NOP 0 geschrieben und nicht NOP 1? Und was bewirkt das?

Gruß -PHANTOMIAS-
 
NOP 0 oder NOP 1, das ist egal ...

beides sind Null-Operationen, d.h., der Prozessor liest den befehl und stellt fest, das nichts zu tun ist.

Im Editor muss jedoch der Sprung auf einen Befehl verweisen, also die Sprungmarke an einem Befehl stehen.

es wäre möglich, statt
Code:
CALC: NOP   0
      L     999

einfach nur
Code:
CALC: L     999
zu schreiben :cool:
 
Stimmt, habe es gerade getestet, funktioniert auch ohne NOP x

Aber wieso braucht man denn dann das NOP? Ich meine, wenn ich einen Sprung mache, dann macht es doch, zumindest für mich, keinen Sinn, dass dort nichts getan wird?


Gruß -PHANTOMIAS-
 
@PHANTOMIAS

Das hatte nichts zu bedeuten, ich nehme immer NOP 0 oder auch SET, um das VKE sicher auf 1 zu bringen, egal, wie man bis zu der Marke gekommen ist. Ansonsten schreibe ich die Marken nicht vor andere Operationen, um einfache Zeilen löschen zu können. Sonst kommt es schon mal vor, daß eine Marke weg ist, oder ein L MWx. Das ist aber alles reine Geschmackssache und hat keinen Einfluß auf das eigentliche Programm.
 
Zurück
Oben