Jolly_Jumper
Level-1
- Beiträge
- 5
- Reaktionspunkte
- 0
-> 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!
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!