FUNCTION FC 80 : VOID
TITLE =Ansteuerung SEW-MoviDrive via DP (Erweiterte Buspositionierung)
AUTHOR : 'IT/RSt'
VERSION : 1.1
VAR_INPUT
Geraete_Adresse : INT ;
Freigabe : BOOL ;
Reset : BOOL ;
Mode_Auto : BOOL ; //1 = Auto, 0 = Hand
Start_Ref : BOOL ; //Mode_Auto muss aktiv sein
Tippen_Plus : BOOL ; //Mode_Auto muss 0 sein
Tippen_Minus : BOOL ; //Mode_Auto muss 0 sein
Pos_Anfahren : BOOL ; //Mode_Auto muss aktiv sein
Pos : DINT ;
Speed : INT ;
Rampe : INT ;
END_VAR
VAR_OUTPUT
Stoerung : BOOL ;
InAutomatik : BOOL ;
InPosition : BOOL ;
Err : INT ;
Akt_Pos : DINT ;
Akt_Speed : INT ;
END_VAR
VAR_TEMP
PE : STRUCT
Status_Code : BYTE ;
Endstufe_Freigegeben : BOOL ;
Umrichter_Bereit : BOOL ;
Referenziert : BOOL ;
InPos : BOOL ;
Bremse_offen : BOOL ;
Stoerung : BOOL ;
ES_Rechts : BOOL ;
ES_Links : BOOL ;
Akt_Pos : DINT ;
Akt_Speed : INT ;
Akt_Current : INT ;
Akt_Auslastung : INT ;
END_STRUCT ;
PA : STRUCT
Start : BOOL ;
Tippen_Plus : BOOL ;
Tippen_Minus : BOOL ;
Mode_Low : BOOL ;
Mode_High : BOOL ;
CTW_Bit_13 : BOOL ;
CTW_Bit_14 : BOOL ;
CTW_Bit_15 : BOOL ;
Reglersperre : BOOL ;
Freigabe_Schnellstop : BOOL ;
Freigabe_Halt : BOOL ;
CTW_Bit_3 : BOOL ;
CTW_Bit_4 : BOOL ;
CTW_Bit_5 : BOOL ;
Reset : BOOL ;
CTW_Bit_7 : BOOL ;
Pos : DINT ;
Speed : INT ;
Start_Rampe : INT ;
Stop_Rampe : INT ;
END_STRUCT ;
Addr : WORD ;
Returncode_SFC14 : INT ;
Returncode_SFC15 : INT ;
ModAuto : BOOL ;
ModRef : BOOL ;
ModTip : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =Prozeßeingangsdaten aufbereiten
L #Geraete_Adresse; // Int 536
SLD 3; // Pointer bilden (letzte 3 Stellen sind Bit-Adresse)
LAR1 ; // Im Adressregister 1 ablegen
L PEW [AR1,P#0.0];
T LW 0;
L PED [AR1,P#2.0];
T #PE.Akt_Pos;
L PEW [AR1,P#6.0];
T #PE.Akt_Speed;
L PEW [AR1,P#8.0];
T #PE.Akt_Current;
L PEW [AR1,P#10.0];
T #PE.Akt_Auslastung;
NETWORK
TITLE =Modenanwahl
SET ;
R #PA.Reglersperre;
U #Mode_Auto;
U #PE.Referenziert;
= #ModAuto;
S #PA.Mode_Low;
S #PA.Mode_High;
U #Mode_Auto;
UN #PE.Referenziert;
= #ModRef;
R #PA.Mode_Low;
S #PA.Mode_High;
UN #Mode_Auto;
= #ModTip;
S #PA.Mode_Low;
R #PA.Mode_High;
NETWORK
TITLE =Mode: Tippen
U #ModTip;
U #Tippen_Plus;
= #PA.Tippen_Plus;
U #ModTip;
U #Tippen_Minus;
= #PA.Tippen_Minus;
NETWORK
TITLE =Mode: Referenzieren
U #ModRef;
U #Start_Ref;
= #PA.Start;
NETWORK
TITLE =Mode: Automatik
// Springe nach No Auto, wenn nicht im Automatik-Modus.
UN #ModAuto;
SPB M002;
U #ModAuto;
U #Pos_Anfahren;
= #PA.Start;
NETWORK
TITLE =Prozeßausgangsdaten: Sollwerte aufbereiten
M002: U #Freigabe; //Daten konsistent auf einen DP-Normslave schreiben
= #PA.Freigabe_Schnellstop; //Peripherieadresse => Hardwarekonfig.
= #PA.Freigabe_Halt; //Quellbereich für die zu schreibenden Nutzdaten
SET ;
R #PA.Reglersperre;
R #PA.CTW_Bit_3;
R #PA.CTW_Bit_4;
R #PA.CTW_Bit_5;
R #PA.CTW_Bit_13;
R #PA.CTW_Bit_14;
R #PA.CTW_Bit_15;
U #Reset;
= #PA.Reset;
U #PE.Stoerung;
= #Stoerung;
L #PE.Status_Code;
T #Err;
U #PE.Referenziert;
U #ModAuto;
= #InAutomatik;
U #PE.Referenziert;
U #ModAuto;
U #PE.InPos;
= #InPosition;
L #PE.Akt_Pos;
T #Akt_Pos;
L #PE.Akt_Speed;
T #Akt_Speed;
L #Pos;
T #PA.Pos;
L #Speed;
T #PA.Speed;
L #Rampe;
T #PA.Start_Rampe;
T #PA.Stop_Rampe;
NETWORK
TITLE =Kommunikationsfehler auswerten
//Ist die Abarbeitung der SFCs fehlerhaft, so werden alle Ausgänge der Funktion
//abgelöscht
L #Geraete_Adresse; // Int 536
SLD 3; // Pointer bilden (letzte 3 Stellen sind Bit-Adresse)
LAR1 ; // Im Adressregister 1 ablegen
L LW 12; // Steuerwort2
T PAW [AR1,P#0.0];
L #PA.Pos; // Zielposition
T PAD [AR1,P#2.0];
L #PA.Speed; // Speed
T PAW [AR1,P#6.0];
L #PA.Start_Rampe; // Startrampe
T PAW [AR1,P#8.0];
L #PA.Stop_Rampe; // Stoprampe
T PAW [AR1,P#10.0];
END_FUNCTION