FUNCTION_BLOCK "FB307"
TITLE =UP Steuern Servo Bosch-Rexroth
AUTHOR : 'Larry'
FAMILY : LL_Std
VERSION : 0.1
VAR_INPUT
Per_Handshake : INT ; //1. Perepherie-Adresse Handshake mit Servo
Allgemein : BOOL ; //-------------------------------------------------------------------------------
_Freigabe : BOOL ; //Freigabe Servo-Achse
_Quit_Stoerung : BOOL ; //Quittierung Störung
_Ref_Fahrt : BOOL ; //Fahr-Ablauf "Referenz-Fahrt"
Steuer_Funktionen : BOOL ; //-------------------------------------------------------------------------------
_Tippen_vor : BOOL ; //Fahren "Tippen vor"
_Tippen_zur : BOOL ; //Fahren "Tippen zurück"
_Geschwindigkeit_Tippen : REAL ; //Geschwindigkeit Tipp-Betrieb
Fahr_Daten : BOOL ; //-------------------------------------------------------------------------------
_Setze_Fahrdaten : BOOL ; //Fahrdaten übernehmen
_Start_in_Position : BOOL ; //Fahre auf Position [Fahrdaten]
_Ziel_Position : REAL ; //- Fahrauftrag : Ziel-Position
_Geschwindigkeit : REAL ; //- Fahrauftrag : Geschwindigkeit
_Drehmoment : REAL ; //- Fahrauftrag : Drehmoment
END_VAR
VAR_OUTPUT
OUT_Servo_bereit : BOOL ; //Servo-Achse bereit
OUT_Servo_DiagnoseFehler : BOOL ; //Servo-Achse Diagnose-Fehler
OUT_Servo_Referenz_OK : BOOL ; //Servo-Achse in Referenz
OUT_Servo_Arbeitsbereich : BOOL ; //Sewrvo-Achse im Arbeitsbereich
OUT_Set_Daten_OK : BOOL ; //neue Fahr-Daten eingetragen
OUT_Fahren_Ready : BOOL ; //Fahr-Programm beendet
OUT_Ist_Position : REAL ; //akt. Position Servo-Achse
END_VAR
VAR
Servo_Read_Daten : STRUCT
Status_Regler : STRUCT //P-0-4078
Ist_Betriebsart_1 : BOOL ; //00=Hauptbetriebsart / 01 - 11 = Nebenbetriebsarten
Ist_Betriebsart_2 : BOOL ;
Sollwert_Quit : BOOL ; //1=Fahrbefehl ist übernommen
Meldung_Zustand_1 : BOOL ;
Meldung_Zustand_2 : BOOL ;
Meldung_Zustand_3 : BOOL ;
betriebsbereit_1 : BOOL ;
betriebsbereit_2 : BOOL ;
Betriebsmodus_Quit_1 : BOOL ; //10 = Betriebs-Modus
Betriebsmodus_Quit_2 : BOOL ;
Referenz_OK : BOOL ;
Stillstand_Achse : BOOL ;
Sollwert_erreicht : BOOL ;
Kommando_Aenderung : BOOL ;
Betriebsmodus_Fehler : BOOL ;
Status_Sollwert : BOOL ; //0=Antrieb folgt Vorgabe / 1=nicht
END_STRUCT ;
Fahrbereichs_Endschalter : STRUCT //P-0-0222
x10 : BOOL ;
x11 : BOOL ;
x12 : BOOL ;
x13 : BOOL ;
x14 : BOOL ;
x15 : BOOL ;
x16 : BOOL ;
x17 : BOOL ;
Endschalter_1 : BOOL ;
Endschalter_2 : BOOL ;
x02 : BOOL ;
x03 : BOOL ;
x04 : BOOL ;
x05 : BOOL ;
x06 : BOOL ;
x07 : BOOL ;
END_STRUCT ;
dummi : WORD ; //S-0-0000
Ist_Position : DINT ; //S-0-0386
Drehmoment : INT ; //S-0-0084
Diagnose_Nr : DINT ; //S-0-0390
END_STRUCT ;
Servo_Write_Daten : STRUCT
Steuern_Regler : STRUCT //P-0-4077
Betriebsart_1 : BOOL ; //00=Hauptbetriebsart / 01 - 11 = Nebenbetriebsarten
Betriebsart_2 : BOOL ;
Res_1 : BOOL ;
Res_2 : BOOL ;
IPos_Sync : BOOL ;
Antrieb_Halt : BOOL ;
Antriebs_Freigabe : BOOL ;
Regler_Freigabe : BOOL ;
Sollwert_Uebernahme : BOOL ; //Toggle
Betriebsmodus : BOOL ;
Referenzfahrt : BOOL ;
Positioniermodus : BOOL ; //0=absolut / 1=relativ
Satzwechsel_Modus : BOOL ; //0=letzte Pos. muss abgeschlossen sein / 1=egal
Reset_Fehler : BOOL ;
Tippen_Pos : BOOL ;
Tippen_Neg : BOOL ;
END_STRUCT ;
Signal_Steuerwort : STRUCT //S-0-0145
x10 : BOOL ;
x11 : BOOL ;
x12 : BOOL ;
x13 : BOOL ;
x14 : BOOL ;
x15 : BOOL ;
x16 : BOOL ;
x17 : BOOL ;
Fahren_auf_Festanschlag : BOOL ; //S-0-0149
Antrieb_referenzieren : BOOL ; //S-0-0148
Refrenzbezug_loeschen : BOOL ; //S-0-0191
x03 : BOOL ;
x04 : BOOL ;
x05 : BOOL ;
x06 : BOOL ;
x07 : BOOL ;
END_STRUCT ;
dummi : WORD ; //S-0-0000
Ziel_Position : DINT ; //S-0-0282 - 4 NK-Stellen
Fahr_Geschwindigkeit : DINT ; //S-0-0259 - 4 NK-Stellen
LR_Kraft_Grenzwert : INT := 500; //S-0-0092 - 0 NK-Stellen
END_STRUCT ;
Faktor_Anpassung : STRUCT
Position : REAL := 1.000000e+004;
Geschwindigkeit : REAL := 1.000000e+003;
Drehmoment : REAL := 1.000000e+000;
END_STRUCT ;
END_VAR
VAR_TEMP
Word_Per_Handshake : WORD ;
R_Fehler : INT ;
W_Fehler : INT ;
END_VAR
BEGIN
NETWORK
TITLE =Kopplung an Servo-Regler - Auslesen ----------------------------
L #Per_Handshake;
T #Word_Per_Handshake;
CALL "DPRD_DAT" (
LADDR := #Word_Per_Handshake,
RET_VAL := #R_Fehler,
RECORD := #Servo_Read_Daten);
NETWORK
TITLE =Ziel-Positionen setzen -----------------------------------------
U #_Setze_Fahrdaten;
UN #OUT_Set_Daten_OK;
SPBN nSet;
L #_Ziel_Position;
L #Faktor_Anpassung.Position;
*R ;
RND+ ;
T #Servo_Write_Daten.Ziel_Position;
L #_Geschwindigkeit;
L #Faktor_Anpassung.Geschwindigkeit;
*R ;
RND+ ;
T #Servo_Write_Daten.Fahr_Geschwindigkeit;
L #_Drehmoment;
L #Faktor_Anpassung.Drehmoment;
*R ;
RND+ ;
T #Servo_Write_Daten.LR_Kraft_Grenzwert;
nSet: U #_Setze_Fahrdaten;
= #OUT_Set_Daten_OK;
NETWORK
TITLE =Status-Informationen -------------------------------------------
U #Servo_Read_Daten.Status_Regler.betriebsbereit_1;
U #Servo_Read_Daten.Status_Regler.betriebsbereit_2;
UN #Servo_Read_Daten.Status_Regler.Betriebsmodus_Fehler;
= #OUT_Servo_bereit;
NETWORK
TITLE =
U #Servo_Read_Daten.Status_Regler.Referenz_OK;
= #OUT_Servo_Referenz_OK;
U #_Start_in_Position;
U #Servo_Write_Daten.Steuern_Regler.Sollwert_Uebernahme;
U #Servo_Read_Daten.Status_Regler.Sollwert_Quit;
U #Servo_Read_Daten.Status_Regler.Sollwert_erreicht;
U #Servo_Read_Daten.Status_Regler.Stillstand_Achse;
= #OUT_Fahren_Ready;
NETWORK
TITLE =
U( ;
L #Servo_Read_Daten.Diagnose_Nr;
L DW#16#A0160;
<>D ;
) ;
U( ;
L #Servo_Read_Daten.Diagnose_Nr;
L DW#16#A0161;
<>D ;
) ;
U( ;
L #Servo_Read_Daten.Diagnose_Nr;
L DW#16#A0012;
<>D ;
) ;
U( ;
L #Servo_Read_Daten.Diagnose_Nr;
L DW#16#C1300;
<>D ;
) ;
U( ;
L #Servo_Read_Daten.Diagnose_Nr;
L DW#16#E8260;
<>D ;
) ;
= #OUT_Servo_DiagnoseFehler;
NETWORK
TITLE =
L #Servo_Read_Daten.Ist_Position;
DTR ;
L #Faktor_Anpassung.Position;
/R ;
T #OUT_Ist_Position;
NETWORK
TITLE =Steuer-Funktionen ----------------------------------------------
U #_Freigabe;
UN #_Quit_Stoerung;
= #Servo_Write_Daten.Steuern_Regler.Antrieb_Halt;
= #Servo_Write_Daten.Steuern_Regler.Antriebs_Freigabe;
= #Servo_Write_Daten.Steuern_Regler.Regler_Freigabe;
NETWORK
TITLE =
U #_Quit_Stoerung;
= #Servo_Write_Daten.Steuern_Regler.Reset_Fehler;
NETWORK
TITLE =
U #_Ref_Fahrt;
U #_Freigabe;
= #Servo_Write_Daten.Signal_Steuerwort.Antrieb_referenzieren;
NETWORK
TITLE =
U #_Start_in_Position;
U #_Freigabe;
= #Servo_Write_Daten.Steuern_Regler.Sollwert_Uebernahme;
NETWORK
TITLE =
CLR ;
= #Servo_Write_Daten.Steuern_Regler.Positioniermodus;
= #Servo_Write_Daten.Steuern_Regler.Satzwechsel_Modus;
NETWORK
TITLE =
U #_Tippen_vor;
UN #_Tippen_zur;
= #Servo_Write_Daten.Steuern_Regler.Tippen_Pos;
UN #_Tippen_vor;
U #_Tippen_zur;
= #Servo_Write_Daten.Steuern_Regler.Tippen_Neg;
O #Servo_Write_Daten.Steuern_Regler.Tippen_Pos;
O #Servo_Write_Daten.Steuern_Regler.Tippen_Neg;
SPBN xTip;
L #_Geschwindigkeit_Tippen;
L #Faktor_Anpassung.Geschwindigkeit;
*R ;
RND+ ;
T #Servo_Write_Daten.Fahr_Geschwindigkeit;
L 100;
DTR ;
L #Faktor_Anpassung.Drehmoment;
*R ;
RND+ ;
T #Servo_Write_Daten.LR_Kraft_Grenzwert;
xTip: NOP 0;
NETWORK
TITLE =Kopplung an Servo-Regler - Rückschreiben -----------------------
L 1200;
T #Servo_Write_Daten.LR_Kraft_Grenzwert;
CALL "DPWR_DAT" (
LADDR := #Word_Per_Handshake,
RECORD := #Servo_Write_Daten,
RET_VAL := #W_Fehler);
NETWORK
TITLE =
END_FUNCTION_BLOCK