SCL: Produktionsdaten in Array speichern

teo84

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

ich hätte da mal ein Problem, bei dem ich Eure Hilfe bräuchte.
Ich bin gerade dabei, mich mit SCL auseinander zu setzen und möchte folgende Aufgabe realisieren:
Ich habe ein Modell einer Produktionsanlage, bei der 3 verschiedene Rohmaterialien in einen Behälter dosiert werden. Die dosierten Mengen werden über Impulszähler erfasst. Dies geschieht in einem FB, der eine Schrittkette enthält. Ich möchte nun die Verbrauchsmengen der Rohmaterialien in einem Array speichern. Dazu möchte ich an einem bestimmten Punkt der Schrittkette einen Merker setzen, der mir dann in meiner SCL-Funktion die Chargennummer um den Wert 1 erhöht. Ist die Dosierung abgeschlossen, wird ein weiterer Merker gesetzt und die Zählerstände werden ausgelesen und die Mengen berechnet.
Dies funktioniert soweit, außer das meine Chargennummer sich ständig erhöht, solange der entsprechende Schritt aktiv ist. Ich habe das folgendermaßen umgesetzt:

VAR

Verbrauch : ARRAY[1..10,1..4]OF INT;
Batch : INT; //Chargennummerierung

END_VAR
VAR_INPUT

Start_Dosierung : BOOL; //aus Schrittkette
END_VAR

IF Start_Dosierung = True THEN //Bei Chargenstart wird die Chargennummer, beginnend mit '1', festgelegt
IF Batch>=10 THEN
Batch:=1;
ELSE Batch:=Batch+1; //und um den Wert '1' erhöht.
END_IF;
END_IF;

Kann mir jemand sagen, warum sich der Wert zyklisch erhöht und nicht einmalig ? Wie kann man so etwas anders umsetzen ? Flankenauswertung ?

Danke schon mal für Eure Hilfe !
 
Kann mir jemand sagen, warum sich der Wert zyklisch erhöht und nicht einmalig ? Wie kann man so etwas anders umsetzen ? Flankenauswertung ?
Genau, der Merker darf nur ein Zyklus High sein.
Am einfachsten wäre es wenn Du den Merker nach dem zählen zurücksetzen könntest.
Dafür den IN in IN/OUT verlegen und :
Code:
VAR
 
Verbrauch : ARRAY[1..10,1..4]OF INT;
Batch : INT; //Chargennummerierung 
 
END_VAR
[COLOR=red]VAR_IN_OUT[/COLOR]
 
Start_Dosierung : BOOL; //aus Schrittkette
END_VAR
 
IF Start_Dosierung = True THEN //Bei Chargenstart wird die Chargennummer, beginnend mit '1', festgelegt
IF Batch>=10 THEN 
Batch:=1; 
ELSE Batch:=Batch+1; //und um den Wert '1' erhöht. 
[COLOR=red]Start_Dosierung := False;[/COLOR]
END_IF;
END_IF;
 
Zurück
Oben