Erstellen von Blöcken mit SCL-Programmierung

Jolly_Jumper

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

Bin ein Neuling auf dem Gebiet der SCL-Programmierung und habe auch schon das Forum durchforstet, jedoch ohne Erfolg.

Ich will mit SCL meine eigenen Blöcke entwerfen, die dann mehrmals in einem Programm verwendet werden sollen.
Jetzt habe ich eine Funktion geschrieben, die auch funktioniert, wenn ich sie einmalig in einem FC aufrufe.
// Die Rampenfunktion ist vergleichbar mit einem I_Regler.
// Es wird die Differenz zwischen den Eingängen SP_AI und PID_AI
// gebildet und durch den TEILER dividiert. Abhängig von dem TAKT
// wird der AUS_AI um den Faktor in TEILER-Schritten erhöht oder
// verringert.

Wenn ich dieselbe Funktion nochmal im FC aufrufe, bekomme ich an meinem Ausgang keine sinnvollen Werte ausgegeben.

Hier mal ein kleiner Ausschnitt des Programms:

// Start des Timers bei Änderung des Setpoints
IF Flag THEN
CurrTime:= S_ODT (T_NO:=1, S:=T_Start, TV:=TAKT, Q:=Ausg_T);

// Aktion, wenn neuer Setpoint größer als aktueller Rückgabewert des Reglers
IF PID_AI >= SP_AI THEN
GOTO Sprung1;
END_IF;

IF Ausg_T THEN
Speicher := (Speicher + Faktor) ;
AUS_AI := Speicher ;
Faktor1 := (Faktor1-1.0);
T_Start := 0;
ELSE
T_Start := 1;
END_IF;

Meine Frage ist nun, muss ich eine andere Art von Timern benutzen, da im Akku sonst Chaos herrscht. Muss ich mit DBs arbeiten? Ich habe hier nur eine normale Variablendeklarierung vorgenommen.

Wenn ich z.B: den SFB4 einfüge in einem Programm, muss ich ja einen DB angeben, mit dem dieser FB dann arbeitet. Wenn ich also 2 SFB4 einfüge benötige ich ja dann auch 2 verschiedene DBs. Wie kann ich sowas in SCL programmieren, dass ich beim Einfügen des FC jeweils einen anderen DB dafür verwende?

Ich teste die FC zur Zeit nur mit PLCSIM. Kann die Simulation das?

Danke schonmal im voraus!
 
Dein Problem hat wenig mit SCL zu tun. Grundsätzlich gilt das ein FC eben nur temporäre lokale Variablen bereitstellt.

Du solltest lieber einen FB verwenden und in diesem FB legst Du dann Instanzen von dem SFB als statische lokale Variablen an.
Das ganze ist dann eine Multiinstanz und Du musst dann nur bei dem Aufruf Deines selbst geschriebenen FBs einen DB vergeben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke, wenn ich das richtig verstehe, sollte ich also mein Programm als FB entwerfen und dafür dann einen DB erstellen, so dass ich genau wie die Standardblocke (Beispiel SFB4) einen variablen DB pro Aufruf meines FBs erhalte.

...hat mal einer ein kleines Beispielprogramm?
 
Zurück
Oben