FUNCTION_BLOCK "Antrieb"
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : Co
VERSION : 2.1
VAR_INPUT
"I_Sollgeschwindigkeit" : DInt; // Einheit: 0,00001m/s
"I_Servicesollwert" { S7_HMI_Visible := 'False' } : DInt; // Einheit: 0,00001m/s
"I_Antriebsistwert" { S7_HMI_Visible := 'False' } : Int;
"I_Zykluszeit" { S7_HMI_Visible := 'False' } : Byte; // Einheit: Millisekunden
"I_Anlauf" { S7_HMI_Visible := 'False' } : Bool;
"I_nicht_NOTAUS" { S7_HMI_Visible := 'False' } : Bool; // sollte erst gegeben werden, wenn der Umrichter bereit ist
"I_Start_vorwaerts" { S7_HMI_Visible := 'False' } : Bool;
"I_Start_rueckwaerts" { S7_HMI_Visible := 'False' } : Bool; // dominant über Start vorwärts
"I_Servicestart" { S7_HMI_Visible := 'False' } : Bool; // dominant über Start
"I_Systemdrehrichtung" { S7_HMI_Visible := 'False' } : Bool; // zum Umschalten zwischen links- und rechtshändiger Maschine
END_VAR
VAR_OUTPUT
"Q_Istgeschwindigkeit" { S7_HMI_Visible := 'False' } : DInt; // Einheit: 0,00001m/s
"Q_Profibussteuerwort" { S7_HMI_Visible := 'False' } : Word;
"Q_Antriebssollwert" { S7_HMI_Visible := 'False' } : Int; // dimensionslose, vorzeichenbehaftete Geschwindigkeitsgröße +-16384
"Q_Stoerung" { S7_HMI_Visible := 'False' } : Bool;
END_VAR
VAR
"P_Beschleunigung" : Int := 10; // Einheit: 0,01m/ss
"P_Verzoegerung" : Int := 100; // Einheit: 0,01m/ss
"P_min_Geschwindigkeit" : DInt; // Einheit: 0,00001m/s
"P_max_Geschwindigkeit" : DInt := L#100000; // Einheit: 0,00001m/s
"P_Umrechnung_Physik" : DInt := L#134; // 4s/m bzw. 0,037252902984619140625Hz p. m/s, wenn 16384=100Hz) OP 2NK U2:3,72529
"P_Fehlergrenze_Soll_Ist" : Int := 1000;
"V_Resetzaehler" { S7_HMI_Visible := 'False' } : Int; // 2005041209Co
END_VAR
VAR_TEMP
"T_Sollgeschwindigkeit" : DInt; // Einheit: 0,00001m/s
"T_groesser200" : Bool;
END_VAR
BEGIN
NETWORK
TITLE =
NOP 0 ;//-------------------------------------
// Version 2002073010Co
// Version Antrieb1 2004030815Co
// Version Antrieb2 2004040109Co
// Version Antrieb2 2004041312Co Geschwindigkeitsgrenzen bei Sollwert
// Version Antrieb2 2005041209Co NOTAUS-Quittung über Profibus für FC302
// Version 2006100614Co Anpassung 20mtr-System
// ***************************
// ***** Antrieb steuern *****
// ***************************
// ist konzipiert zum Steuern von Profibus-
// antrieben gemäß Profidrive-Standard
// mit PPO-Typ3 in Wort-konsistenter Übertragung
// Antrieb2: Beschleunigungs- und Verzoegerungs-
// rampen separat einstellbar.
// -----------------------------------------------------
// FU-Parameter Danfoss-VLT:
// 5000 FC302 Wert (Motordaten nicht vergessen!)
// 801 --- Auto Anpassung (nur alte VLT5000)
// 904 --- PPO3 (ermittelt FC302 automatisch)
// 918 918 Busadresse
// 115 162 0% (für Positionieraufgaben)
// 128 190 ETR1 Abschaltung (zur Erinnerung)
// 203 300 -max bis +max
// 205 303 VLT5000: 100Hz FC302: 3000U/min
// 207 341 0,05s
// 208 342 0,05s
// 200 410 VLT5000: +/-132Hz FC302: beide Richtungen
// 200 419 VLT5000: +/-132Hz FC302: 132Hz
// 804 bei Bustimeout Stopp und Alarm
AN #I_Anlauf;// Reset
JC m000;
L 0;
T #Q_Istgeschwindigkeit;
m000: L 0;// Sollwert ermitteln
AN #I_Servicestart;
AN #I_Start_vorwaerts;
AN #I_Start_rueckwaerts;
ON #I_nicht_NOTAUS;
JC m002;
AN #I_Start_vorwaerts;
AN #I_Start_rueckwaerts;
JC m001;
L #I_Sollgeschwindigkeit;
m001: AN #I_Start_rueckwaerts;
JC m004;
NEGD;
m004: AN #I_Servicestart;
JC m003;
L #I_Servicesollwert;
m003: L #P_min_Geschwindigkeit;// begrenzen
<D;
JC m006;
POP;
m006: L #P_max_Geschwindigkeit;
>D;
JC m002;
POP;
m002: T #T_Sollgeschwindigkeit;
// ***** Rampfunktion
L #Q_Istgeschwindigkeit;// Vorzeichen Istwert?
L 0;
<D;
JC ineg;
L #T_Sollgeschwindigkeit;
L #Q_Istgeschwindigkeit;
>D;
JC pbes;// positiv-beschleunigen
<D;
JC pvrz;// positiv-verzoegern
JU exit;
pbes: L #I_Zykluszeit;// positiv-beschleunigen
L #P_Beschleunigung;
*I;
L #Q_Istgeschwindigkeit;
+D;
L #T_Sollgeschwindigkeit;
>D;
JC m020;
POP;
m020: T #Q_Istgeschwindigkeit;
JU exit;
pvrz: L #I_Zykluszeit;// positiv-verzoegern
L #P_Verzoegerung;
*I;
NEGD;
L #Q_Istgeschwindigkeit;
+D;
L #T_Sollgeschwindigkeit;
<D;
JC m021;
POP;
m021: T #Q_Istgeschwindigkeit;
JU exit;
ineg: L #T_Sollgeschwindigkeit;
L #Q_Istgeschwindigkeit;
<D;
JC nbes;// negativ-beschleunigen
>D;
JC nvrz;// negativ-verzoegern
JU exit;
nbes: L #I_Zykluszeit;// negativ-beschleunigen
L #P_Beschleunigung;
*I;
NEGD;
L #Q_Istgeschwindigkeit;
+D;
L #T_Sollgeschwindigkeit;
<D;
JC m022;
POP;
m022: T #Q_Istgeschwindigkeit;
JU exit;
nvrz: L #I_Zykluszeit;// negativ-verzoegern
L #P_Verzoegerung;
*I;
L #Q_Istgeschwindigkeit;
+D;
L #T_Sollgeschwindigkeit;
>D;
JC m023;
POP;
m023: T #Q_Istgeschwindigkeit;
JU exit;
// ***** Ausgabe
exit: L #Q_Istgeschwindigkeit;// umrechnen
L #P_Umrechnung_Physik;
*D;
SRD 14;
AN #I_Systemdrehrichtung;
JC m008;
NEGI;
m008: T #Q_Antriebssollwert;
L 0;// Bussteuerwort
<>I;
JC m009;
L W#16#047E;
JU m010;
m009: L W#16#047F;
m010: T #Q_Profibussteuerwort;
L #I_Zykluszeit;// Reset 2005041209Co
L #V_Resetzaehler;
+I;
JO m013;
T #V_Resetzaehler;
m013: A #I_nicht_NOTAUS;
AN #I_Anlauf;
JC m014;
L 0;
T #V_Resetzaehler;
m014: L 200;
L #V_Resetzaehler;
<I;
= #T_groesser200;
L 250;
>I;
ON #T_groesser200;
ON #I_nicht_NOTAUS;
JC m012;
L #Q_Profibussteuerwort;
OW W#16#0080;
T #Q_Profibussteuerwort;
m012: L #Q_Antriebssollwert;// Rückmeldung prüfen
L #I_Antriebsistwert;
-I;
JP m011;
NEGI;
m011: L #P_Fehlergrenze_Soll_Ist;
>I;
A #I_nicht_NOTAUS;
= #Q_Stoerung;
END_FUNCTION_BLOCK