Rezepturen bei CPU315-DP - anlegen - abspeichern - aufrufen ???

GSOhm

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

nach dem ich hier bei meinen letzten Problemchen auch auf gute Hilfe gestoßen bin, versuche ich es heute erneut...
Meine Frage ist, wie kann ich Rezepturen in meinem Programm anlegen? und diese je nach gebrauch wieder aufrufen?
(In den Rezepturen sollen sich Sollwerte für Regler befinden)

Vielen Dank im Vorraus

Liebe Grüße

GSOhm
 
Bisschen allgemein die Frage oder?
Du wirst DB´s brauchen, evtl. Pointer, SFC20... ... deinen "Gebrauch" definieren...
Was willst du denn genau machen ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja ich habe 24 Regler über Profibus, und ich möchte 5 Rezepturen (in denen die Sollwerte aller Regler gespeichert sind) anlegen.
Die 5 Rezepturen sind halt einfach andere Sollwerte da andere Typen des Produkts auf der geleichen maschine laufen.
 
Also du hast einen DB in dem du die Sollwerte zu den Reglern schreibst oder?
Dann würde ich je nach Rezeptanwahl die "Quelle" also dein Rezept mit Nummer XY in den Kommunikations DB schreiben.
Stichwort wäre für diesen Fall "Any_Zeiger, SFC20" .
Hoffe ich hab dich richtig verstanden.
 
Es gibt auch die Möglichkeit, die Rezepturverwaltung auf einem OP zu machen!
Das funktioniert recht gut und deine Daten sind auch nach Steuerungsabsturz o.ä. noch erhalten.
Für den Fall, dass mal das OP den Geist aufgibt, kann man die Datensicherung zyklisch auf SD-Karte einrichten.
 
Also ich hätte meine Rezepturen (Sollwerte) in die DB's 10 20 und 30 geschrieben und würde diese dann aufrufen mit einer "Pseudo-If-Abfrage"
hier mal mein Programm ausschnitt (da ich leider heute keine möglichkeit mehr habe das Programm zu testen - könnte ja einer von euch mal eben drüber gucken ob es so passen könnte):
__________________________________________________________________________________
L Wert
L Vergleichswert1
==I
SPBN else1
CALL ”BLKMOV” SFC20
SRCBLK :=DB10.DBX0.0 BYTE 200
RET_VAL :=MW0
DSTBLK :=DB100.DBX0.0 BYTE 200
SPA end
else1:
L Wert
L Vergleichswert2
==I
SPBN else2
CALL ”BLKMOV” SFC20
SRCBLK :=DB20.DBX0.0 BYTE 200
RET_VAL :=MW0
DSTBLK :=DB100.DBX0.0 BYTE 200
SPA end
else2:
L Wert
L Vergleichswert3
SPBN else3
CALL ”BLKMOV” SFC20
SRCBLK :=DB30.DBX0.0 BYTE 200
RET_VAL :=MW0
DSTBLK :=DB100.DBX0.0 BYTE 200
SPA end
else 3: // Ausgabe: -> Ihre Eingabe war ungültig ....

end: NOP 0
__________________________________________________________________________________
 
Zuletzt bearbeitet:
Deine Sprungmarken dürfen nur 4 Zeichen haben.
Und die Übergabe wird nur mit P#DB...... funktionieren.
Also funktionieren wird´s wahrscheinlich schon, aber naja. Hast du dir das Thema "any-Zeiger" schon mal angesehen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es gibt auch die Möglichkeit, die Rezepturverwaltung auf einem OP zu machen!
Das funktioniert recht gut und deine Daten sind auch nach Steuerungsabsturz o.ä. noch erhalten.
Für den Fall, dass mal das OP den Geist aufgibt, kann man die Datensicherung zyklisch auf SD-Karte einrichten.

Muss man aber nicht.
Man kann sehr gut in der PLC eine Rezepturverwaltung programmieren und das funktioniert auch und eine CPU hat meist inzwischen einen nicht flüchtigen Speicher.
Ich sehe wenig Sinn, dies in verschiedenen Steuerungen zu machen.
Warum nicht PLC?
In der PLC macht es Sinn die Daten zu halten, denn da werden die Daten ja auch benötigt.

@TE Ich würde symbolisch die Zugriffe machen. Und den Vergleich auf == ist ggF problematisch, denn wird genau der Wert erreicht? Was ist, wenn der Wert etwas abweicht?

bike
 
Zuletzt bearbeitet:
Ich schätze das "L Wert" wohl ein INT Wert sein wird, den er je nach Rezept genau die Nummer zuordnet. (HMI Rezept 2 Angewählt, Wert=2?)
Ich würde das ganze versuchen mit nur einmal "Blkmove" zu machen, und dann p##my_any dementsprechend ändern.
Aber das ist ja jedem selbst überlassen.

@Bike: Sehe ich genau so. Rezepturverwaltung in der PLC ist ne gute Sache. HMI muss nicht künstlich aufgebläht werden.
 
Was ist denn effizienter, wenn ich sage ich wähle erst über die if-Anweisung meinen DB aus und gehe dann in nur einen BLockmove oder so wie ich es oben beschrieben habe??
 
Nein, ich hab mich glaub ich falsch ausgedrückt, mit IF-Anweisung meinte ich die realisierung der if anweisung über die sprünge, und die frage war nun ob es effizienter ist diese mit einem blockmove oder mit mehreren zu realisieren
 
Was meinst du mit effizienter? Fuktionieren tut beides. Der eine macht´s so, der andere macht´s so. Meinen Lösungansatz kennst du bereits. Auch wenn du das Thema Any zu ignorieren scheinst ;-)
 
Zurück
Oben