Step 5 Datenwort transferieren und speichern

graupe

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Habe hier noch einen Ofen mit S5 Steuerung und möchte hier eine kleine Änderung machen. Bin aber in der Programmierung nicht sehr fit.
Möchte gerne die Temperatur aus einem Datenwort in einem Merkerwort speichern und anschliessend vergleichen. Das Datenwort soll aber nur zu einem bestimmten Zeitpunkt übertragen werden und bei Störung nach einer vorgegebenen Zeit wieder auf 0 gesetzt werden. Leider bekomme ich es nicht hin das die Temperatur im Merkerwort bleibt. Kann mir jemand sagen was an meiner Programmierung verkehrt ist?

A DB200
UN A 26.2
UN T44
UN T72
SPB =M1
L DW3
T MW44
L DW4
T MW46
M1:

UN T45
SPB =M2
L KF +0
T MW44
T MW46
M2: L KF +400
T MW252
L MW44
L MW252
>F
O
L MW46
L MW252
>F
= M49.0
 
So pauschal würde ich mal sagen, das Umspeichern solltest Du mit ein Flanke machen.
Allerdings musst du diese Flanke ja selbst programmieren bei S5 ;) (FP oder FN gibts da ja nicht) .:D.

Schön wäre es natürlich auch, wenn der Code welchen Du hier postest mit Kommentaren wäre, damit wir es leichter haben!
Daher denke ich einmal das

Code:
       UN        A 26.2
       UN        T44 
       UN        T72
       SPB      =M1

Der Bereich sei soll, welcher den Wert umspeichert.
Kommt halt darauf an, wie lange diese Bedingung für den Sprung gültig bleibt und nicht evtl. zu lange (und somit falsche Werte) umkopiert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Struktur deines Codes ist richtig!
Dein Problem wird wohl sein, dass du die einzelnen Bedingungen alle aus Null-Sicht programmierst.
Denk einfach mal direkt !
Wann sollen die beiden DW gespeichert werden?
Antwort: wenn A26.1=1 ODER T44=1 ODER T46=1. Wenn das nicht der Fall ist, dann springen.
Also wird der Fehler wahrscheinlich darin liegen, dass eines der drei Signale dauerhaft ansteht.
Für mein Empfinden das besser verständliche Programm:
A DB200
O A 26.2
O T44
O T72
SPBN =M1
L DW3
T MW44
L DW4
T MW46
M1:
Teil 2 dann genauso.
 
@graupe
... Möchte gerne die Temperatur aus einem Datenwort in einem Merkerwort speichern und anschliessend vergleichen. ...
Du kopierst 2 DatenWorte in 2 Merkerworte. Sind das 2 verschiedene Temperaturwerte? Oder 1 Wert, untergebracht in 1 DoppelWort?
Der Vergleich beider Worte mit 400 lässt vermuten, dass es sich um 2 verschiedene TemperaturWerte handelt.

... Das Datenwort soll aber nur zu einem bestimmten Zeitpunkt übertragen werden und bei Störung nach einer vorgegebenen Zeit wieder auf 0 gesetzt werden. ...
Dein Programm setzt kein einziges DW "bei Störung nach einer vorgegebenen Zeit wieder auf 0", sondern nur die 2 MWe mit den Kopien.

... Leider bekomme ich es nicht hin das die Temperatur im Merkerwort bleibt. ...
Die beiden MWe mit den Kopien werden auf 0 gesetzt, so lange, wie der Timer T45 läuft.
Dein ProgrammAusschnitt lässt nicht erahnen,
- zu welchem "bestimmten Zeitpunkt" übertragen werden soll
- welches Kriterium zum Zustand "Störung" führt/führen soll
- wie der Timer T45 gestartet wird (SI, SV, SE, SA oder SS, wie wird das VKE für's Starten gebildet).
Anscheinend wird der Timer immer wieder (grundlos) gestartet?

Ich weiss nicht, warum Du mit den Kopien in den MWen arbeitest.
Du könntest z.B. direkt das DW mit der Konstanten (die Du auch vorab in ein MW schaufelst) vergleichen.
Das hat vermutlich damit zu tun, dass Du irgendwo diese MWe noch zur Anzeige bringen willst?
Gruss, Heinileini

PS: Habe eigentlich immer nur SI und SV benutzt - hierfür würde meine Behauptung "so lange, wie der Timer T45 läuft" stimmen.

Code:
[FONT=courier new]A   DB200               A   DB200
UN  A 26.2              UN  A 26.2  (?)
UN  T44                 UN  T44     (?)
UN  T72                 UN  T72     (?)
SPB =M1                 SPB =M1
L   DW3                 L   DD3
T   MW44                T   MD44
L   DW4             M1: UN  A26.2   (ThermoElement eintauchen)    
T   MW46                L   KT 60.2 (60s)
M1:                     SV  T 45
                        O   A26.2 
UN  T45                 O   T45
SPB =M2                 SPB =M2
L   KF +0               L   KB 0    (wird nur durchlaufen, wenn ThermoElement nicht eingetaucht und ...)
T   MW44                T   MD44    (... 60s vergangen sind)
T   MW46                 
M2: L KF +400                      
T   MW252               
L   MW44            M2: L   MW44
L   MW252               L   KF +400
>F                      >F 
O                       O
L   MW46                L   MW46
L   MW252               L   KF +400 (statt L KF +400 kann hier TAK verwendet werden)
>F                      >F
=   M49.0               =   M49.0   
[/FONT]
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank erstmal für die Antworten. Sorry für die fehlenden Kommentare.
SPBN hatte ich auch versucht funktioniert aber bei S5 leider nicht. Die Datenwörter DW3 und DW4 sind zwei verschiedene Temperaturen.Die Datenwörter werden permanent von den Perepherie-Eingängen beschrieben. Leider sind das keine Konstanten. Die Temperaturfühler werden immer wieder auf den Aluminiumbolzen drauf gedrückt. in dem Moment wo sie keinen Kontakt haben wird eine Temperatur von 670° angezeigt. Deshalb möchte ich die Temperatur nur während des eigentlichen Messvorgangs in die MW schreiben um diese dann zu vergleichen.
A26.2 ist der Befehl zum einfahren des Thermoelements
T44 ist eine Einschaltverzögerung damit das Thermoelemnt sicher auf dem Block ist
T72 ist die Zeit in der die Übertragung vom DW ins MW passieren soll.
Die Zeit hatte ich mir schon zusätzlich eingebaut damit nicht eventuell das Thermoelement noch falsche Werte reinschreibt.
T45 wird von Dem Ausgang gesetzt. Sollte das Thermoelement länger als 60 sekunden nicht mehr eingefahren sein, soll die 0 ins MW geschrieben werden.
M49.0 ist nicht die Störung sondern eine Freigabe das die Temperatur sicher über 400° liegt und der Bolzen geschert werden kann.

Es gibt eigentlich schon eine Freigabe das die Temperatur in Ordnung ist. Wird über einen S-Merker gemacht. Leider finde ich nicht das Netzwerk wo dieser gesetzt wird. Da reichen meine Programmier Kenntnisse nicht mehr aus. Finde nur 3 Stellen wo der abgefragt wird. Deshalb versuch ich diese Krücke zu bauen.
 
Zuletzt bearbeitet:
@graupe
Habe meinen AWL-Vorschlag in #5 noch leicht geändert entsprechend Deiner Info aus #6.
Inwieweit meine "LightVersion" zum Starten von T45 Sinn macht, kann ich nicht beurteilen ... da wirst Du wohl noch dran knobeln müssen ;o)
Gruss, Heinileini

PS: Ich möchte stark bezweifeln, dass Du einen Timer benötigst, um die Zeit für's Einlesen der PEWe in die DWe zu überbrücken!?

PPS: Was habe ich denn da gestern gelesen? Das Kopieren von DW nach MW sollte erst recht kein Thema sein - Unmögliches erledigt die S5 sofort - nur Wunder dauern etwas länger ;o)
 
Zuletzt bearbeitet:
... Es gibt eigentlich schon eine Freigabe das die Temperatur in Ordnung ist. Wird über einen S-Merker gemacht. Leider finde ich nicht das Netzwerk wo dieser gesetzt wird.
,,, Finde nur 3 Stellen wo der abgefragt wird. ...
Habe 0 Erfahrung mit S-Merkern. Dürfte aber genau so sein, wie mit normalen Merkern.
Wenn Du z.B. suchst, wo S 123.4 verwendet wird, solltest Du auch suchen, wo nach
SB 123,
SW 123, SW 122,
SD 123, SD 122, SD 121, SD 120
transferiert wird.
Ob es für diese Bytes, Worte, DoppelWorte überhaupt die entsprechenden Befehle gibt, weiss ich leider nicht.
Wenn ja, hat man sich für das o.g. SB 123 wahrscheinlich eine andere Schreibweise ausgedacht, da SB eigentlich für SchrittBaustein steht (stehen sollte).

Die exzessive Benutzung von Timern macht mich immer etwas hellhörig. Oft steckt dahinter, dass jemand (z.B. ein verzweifelter Inbetriebnehmer) versucht hat, die fehlende Logik oder falsche Reihenfolgen durch Zeiten zurecht zu biegen.
Will sagen, HandshakeSignale bzw. das Vertauschen von SoftwareAbschnitten im Programm sind i.A. der sauberere Weg.
Wenn z.B. ein Merker "gemacht" und direkt anschliessend ausgewertet wird, die Auswertung aber erst einen Zyklus später erfolgen kann/soll/muss: zuerst den Merker auswerten und ihn dann erst neu "machen".
Aber wahrscheinlich mache ich mir diese Gedanken umsonst und habe nur Probleme, Dein Programm nachzuempfinden.
Gruss, Heinileini
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So habs endlich ans laufen bekommen. Verstehe das Problem zwar nicht, aber jetzt läuft es. Habe einen neuen MW-Bereich genommen. Hatte Versuchsweise die Anweisung wo ich die 0 transferiere rausgenommen und trotzdem wurde mir der Bereich auf 0 gesetzt. Laut querverweisliste werden die MW44 und 46 nicht benutzt und werden als frei gelistet. Habe nun die MW230 + 232 genommen. Jetzt funktioniert es. Vielen Dank für eure Hilfen. Hoffe ich kann mich mal revanchieren.

Gruss Thorsten
 
Zurück
Oben