-> Hier kostenlos registrieren
Hallo zusammen,
ich programmiere mein aller erstes Projekt mit einer CPU 1212C AC/DC/RLY nachdem ich vor einiger Zeit einen Grundkurs zur S7 Programmierung abgeschlossen habe. Die im folgenden beschriebene Problemstellung ist der erste Abschnitt meiner Programmierung in welcher ich aktuell leider nicht weiter komme.
Ich würde es begrüßen wenn ihr mir weiterhelfen könntet.
Mein Programm ließt einen Druckmessumformer Analogwert ununterbrochen ein und wandelt diesen in den gewünschten Druckbereich (0-1000mbar) um.
Nun würde ich gerne diese ausgelesenen Druckwerte abspeichern um mit diesen dann anschließend mathematische Ableitungen durchzuführen.
Ich habe bereits einen DB Baustein als mein Storage System erstellt und die entsprechenden Variablen verteilt.
Input Variablen:
-> Put_In - auf diese Variable wird der aktuelle Druckwert übergeben [int]
-> Selected_Shelf - per Default auf 0 gesetzt [int]
->Post_Put_In - soll als Bedingung dienen sodass bei einem gleichbleibenden Druck der Wert nicht weiter in die fortlaufenden Ablageorte kopiert wird.
InOut Variable:
-> Shelf_Outletpressure (Array 0...1000) [int]
-> Reset - setzt alle Shelf Ablageort auf 0 insofern TRUE [Bool]
Der zugehörige FB zu meinem Storage System habe ich im SCL wie folgt gestaltet:
---------------------------------------
//Schleife soll gestartet werden wenn der gemessene Druck größer 0.//
IF #Put_In > 0 THEN
//In das Selected_Shelf, welches per Default auf 0 beim Programmstart gesetzt ist soll der gemessene Druck geschrieben werden. //
#Shelf_Outletpressure[#Selected_Shelf] := #Put_In;
IF #Shelf_Outletpressure[#i] <> #Shelf_Outletpressure [#i + 1] AND #Put_In <> #Post_Put_In THEN
//Um sicherzustellen das durch die kurze Zykluszeit nicht alle Ablageorte des Shelf mit einem gleichbleibenden (da manuell simuliert) Wert beschrieben werden würde ich hierfür gerne eine Bedingung schaffen. Ich vermute dass ich hier zu kompliziert denke aber meine Idee war es einen dem Put_In durch einen Taktgeber nachgestellten "Post_Put_In" abfragen zu können.//
//Der Ablageort soll um eine Stelle nach oben rutschen insofern die zuvor genannten Bedingungen erfüllt sind. Insofern dies geschehen ist soll zur vorherigen Bedingung gesprungen werden und erneut durchlaufen werden. //
"Storage".Selected_Shelf := +1;
RETURN;
END_IF;
END_IF;
// FOR LOOP um alle Ablageort des Shelf nach Betätigung der Bool Variable auf 0 zu setzen.//
IF #Reset = TRUE THEN
FOR #i := 0 TO 1000 DO
"Storage".Shelf_Outletpressure[#i] := 0;
END_FOR;
END_IF;
Leider stehe ich nun vor dem Problem dass ich keinen geeigneten Baustein für die gedachte Abfrage des Post_Put_In finde, vermutlich werde ich das über einen weiteren SCL Baustein probieren solange ich hier auf einen professionellen Rat hoffe.
Ich würde mich freuen von euch zu hören.
Grüße euer HT-T
ich programmiere mein aller erstes Projekt mit einer CPU 1212C AC/DC/RLY nachdem ich vor einiger Zeit einen Grundkurs zur S7 Programmierung abgeschlossen habe. Die im folgenden beschriebene Problemstellung ist der erste Abschnitt meiner Programmierung in welcher ich aktuell leider nicht weiter komme.
Ich würde es begrüßen wenn ihr mir weiterhelfen könntet.
Mein Programm ließt einen Druckmessumformer Analogwert ununterbrochen ein und wandelt diesen in den gewünschten Druckbereich (0-1000mbar) um.
Nun würde ich gerne diese ausgelesenen Druckwerte abspeichern um mit diesen dann anschließend mathematische Ableitungen durchzuführen.
Ich habe bereits einen DB Baustein als mein Storage System erstellt und die entsprechenden Variablen verteilt.
Input Variablen:
-> Put_In - auf diese Variable wird der aktuelle Druckwert übergeben [int]
-> Selected_Shelf - per Default auf 0 gesetzt [int]
->Post_Put_In - soll als Bedingung dienen sodass bei einem gleichbleibenden Druck der Wert nicht weiter in die fortlaufenden Ablageorte kopiert wird.
InOut Variable:
-> Shelf_Outletpressure (Array 0...1000) [int]
-> Reset - setzt alle Shelf Ablageort auf 0 insofern TRUE [Bool]
Der zugehörige FB zu meinem Storage System habe ich im SCL wie folgt gestaltet:
---------------------------------------
//Schleife soll gestartet werden wenn der gemessene Druck größer 0.//
IF #Put_In > 0 THEN
//In das Selected_Shelf, welches per Default auf 0 beim Programmstart gesetzt ist soll der gemessene Druck geschrieben werden. //
#Shelf_Outletpressure[#Selected_Shelf] := #Put_In;
IF #Shelf_Outletpressure[#i] <> #Shelf_Outletpressure [#i + 1] AND #Put_In <> #Post_Put_In THEN
//Um sicherzustellen das durch die kurze Zykluszeit nicht alle Ablageorte des Shelf mit einem gleichbleibenden (da manuell simuliert) Wert beschrieben werden würde ich hierfür gerne eine Bedingung schaffen. Ich vermute dass ich hier zu kompliziert denke aber meine Idee war es einen dem Put_In durch einen Taktgeber nachgestellten "Post_Put_In" abfragen zu können.//
//Der Ablageort soll um eine Stelle nach oben rutschen insofern die zuvor genannten Bedingungen erfüllt sind. Insofern dies geschehen ist soll zur vorherigen Bedingung gesprungen werden und erneut durchlaufen werden. //
"Storage".Selected_Shelf := +1;
RETURN;
END_IF;
END_IF;
// FOR LOOP um alle Ablageort des Shelf nach Betätigung der Bool Variable auf 0 zu setzen.//
IF #Reset = TRUE THEN
FOR #i := 0 TO 1000 DO
"Storage".Shelf_Outletpressure[#i] := 0;
END_FOR;
END_IF;
Leider stehe ich nun vor dem Problem dass ich keinen geeigneten Baustein für die gedachte Abfrage des Post_Put_In finde, vermutlich werde ich das über einen weiteren SCL Baustein probieren solange ich hier auf einen professionellen Rat hoffe.
Ich würde mich freuen von euch zu hören.
Grüße euer HT-T









