FUNCTION_BLOCK "FB302"
TITLE =UP Fahren Siemens MicroMaster 4xx
AUTHOR : 'Larry'
VERSION : 1.2
VAR_INPUT
PxB_Kopplung : INT ; //1.Perepherie-Adresse vom Koppelbereich
Freigabe : BOOL ; //Betriebs-Freigabe des Bausteins
Antrieb_vorwaerts : BOOL ; //Freigabe für "Antrieb fahren"
Antrieb_rueckwaerts : BOOL ; //Freigabe für "Antrieb rückwärts"
Stoerung_Quit : BOOL ; //Störung Regler quittieren
Motor_n_Soll : INT ; //Solldrehzahl des Motors [1/Min.]
Motor_n_50Hz : INT ; //Motor-Drehzahl bei 50Hz [1/Min.]
Regler_f_max : INT ; //Regler-Einstellung für f_max [Hz]
END_VAR
VAR_OUTPUT
RM_Antrieb_vorwaerts : BOOL ; //MM4_ZSW1_Bit_2
RM_Antrieb_rueckwaerts : BOOL ; //MM4_ZSW1_Bit_2
RM_Antrieb_bereit : BOOL ; //MM4_ZSW1_Bit_3
RM_Antrieb_Warnung : BOOL ; //MM4_ZSW1_Bit_7
RM_Antrieb_f_Ist : INT ; //MM4_Frequenzistwert
END_VAR
VAR
SendeDaten : STRUCT
STW1 : STRUCT
_08_Tippen_Rechts : BOOL ; //1=Tippen rechts EIN/ 0=Tippen rechts AUS
_09_Tippen_Links : BOOL ; //1=Tippen links EIN/ 0=Tippen links AUS
_10_Fuehrung_vom_AG : BOOL ; //1=Führung von AG gefordert/ 0=keine Führung von AG gefordert
_11_Sollwert_Invertiert : BOOL ; //1=Sollwertinvertierung/ 0=keine Sollwertinvertierung
_12 : BOOL ; //-
_13_Motorpoti_inc : BOOL ; //1=Motorpoti rauf EIN/ 0=Motorpoti rauf AUS
_14_Motorpoti_dec : BOOL ; //1=Motorpoti runterEIN/ 0=Motorpoti rauf AUS
_15_Steuerung_an_BOP : BOOL ; //1=Vorortsteuerung(BOP/AOP) aktiv/ 0=Fernsteuerung aktiv
_00_EIN : BOOL ; //1=EIN/ 0=AUS1
_01_EIN2 : BOOL ; //1=Betriebsbedingung/ 0=AUS2 - Impulssperre sofortige Spannungfreischaltung
_02_EIN3 : BOOL ; //1=Betriebsbedingung/ 0=AUS3 - Schnellhalt
_03_Betriebs_Freigabe : BOOL ; //1=Betrieb freigeben/ 0=Betrieb sperren
_04_Betriebs_Freigabe2 : BOOL ; //1=Betriebsbedingung/ 0=Hochlaufgeber sperren
_05_Betreibs_Freigabe3 : BOOL ; //1=Hochlaufgeber freigaben/ 0= HLG stoppen
_06_Sollwert_Freigabe : BOOL ; //1=Sollwert freigaben/ 0=Sollwert sperren
_07_Quit_Stoerung : BOOL ; //1=Störung quittieren/ 0= keine Bedeutung
END_STRUCT ;
N_Soll : WORD ;
END_STRUCT ;
EmpfangsDaten : STRUCT
ZSW1 : STRUCT
_08_keine_Abweichung : BOOL ; //1=Keine Soll-Istabweichung/ 0=Soll-Istabweichung
_09_AG_Fuehrung : BOOL ; //1=Führung von AG gefordert/ 0=keine Führung von AG gefordert
_10_fmax : BOOL ; //1=fmax erreicht/ 0=fmax unterschritten
_11_keine_Warnung : BOOL ; //1=Keine Warnung/ 0=Warnung:Motor an der Stromgrenze
_12_Motor_Haltebremse : BOOL ; //1= / 0=Motor Haltebremse
_13_Motor_bereit : BOOL ; //1= / 0=Motor Überlast
_14_Links_Rechtslauf : BOOL ; //1=Rechtslauf / 0=Linkslauf
_15_Regler_bereit : BOOL ; //1= /0=Umrichter Überlast
_00_Einschaltbereit : BOOL ; //1=Einschaltbereit/ 0=Nicht einschaltbereit
_01_Betriebsbereit : BOOL ; //1=Betriebsbereit/ 0=Nicht betriebsbereit
_02_Betrieb_Freigabe : BOOL ; //1=Betrieb freigegeben/ 0=Betrieb gesperrt
_03_Stoerung : BOOL ; //1=Störung / 0=keine Störung
_04_nicht_AUS2 : BOOL ; //1=Kein AUS2 / 0=AUS2 Befehl steht an
_05_nicht_AUS3 : BOOL ; //1=Kein AUS3 / 0=AUS3 Befehl steht an
_06_Einschaltsperre : BOOL ; //1=Einschaltsperre / 0=Keine Einschaltsperre
_07_Warnung : BOOL ; //1=Warnung / 0= keine Warnung
END_STRUCT ;
N_Ist : WORD ;
END_STRUCT ;
Reset_Impuls : "TP";
END_VAR
VAR_TEMP
Pxx_Adresse : DWORD ;
Faktor_n_50Hz : REAL ;
Motor_f_Soll : REAL ;
Regler_fmax : REAL ;
Faktor_f : REAL ;
RM_Regler_OK : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =Adresse umkopieren
L #PxB_Kopplung; // Adresse laut HW-Konfig im Integer-Format
SLD 3; // Konvertierung ins Pointerformat: 3 Stellen nach links schieben
T #Pxx_Adresse; // Bit-Pointer von Adresse in Doppelwort
NETWORK
TITLE =Prozessdaten vom MM4xx empfangen mittels Direktzugriff
L P##EmpfangsDaten;
LAR1 ;
TAR2 ;
+AR1 ;
L PED [#Pxx_Adresse]; // Prozessdaten vom MM4xx empfangen
T D [AR1,P#0.0];
NETWORK
TITLE =
U #EmpfangsDaten.ZSW1._00_Einschaltbereit;
U #EmpfangsDaten.ZSW1._01_Betriebsbereit;
U #EmpfangsDaten.ZSW1._02_Betrieb_Freigabe;
U #EmpfangsDaten.ZSW1._04_nicht_AUS2;
U #EmpfangsDaten.ZSW1._05_nicht_AUS3;
UN #EmpfangsDaten.ZSW1._06_Einschaltsperre;
= #RM_Regler_OK;
NETWORK
TITLE =Steuersignale + Sollwert generieren
U #Freigabe;
= #SendeDaten.STW1._03_Betriebs_Freigabe;
= #SendeDaten.STW1._04_Betriebs_Freigabe2;
= #SendeDaten.STW1._05_Betreibs_Freigabe3;
= #SendeDaten.STW1._10_Fuehrung_vom_AG;
= #SendeDaten.STW1._01_EIN2;
= #SendeDaten.STW1._02_EIN3;
CLR ;
= #SendeDaten.STW1._08_Tippen_Rechts;
= #SendeDaten.STW1._09_Tippen_Links;
// = #SendeDaten.STW1._12
= #SendeDaten.STW1._13_Motorpoti_inc;
= #SendeDaten.STW1._14_Motorpoti_dec;
= #SendeDaten.STW1._15_Steuerung_an_BOP;
U #Freigabe;
U( ;
O #Antrieb_vorwaerts;
O #Antrieb_rueckwaerts;
) ;
= #SendeDaten.STW1._06_Sollwert_Freigabe;
= #SendeDaten.STW1._00_EIN;
U #Freigabe;
U #Antrieb_rueckwaerts;
= #SendeDaten.STW1._11_Sollwert_Invertiert;
CALL #Reset_Impuls (
IN := #Freigabe,
PT := T#200MS);
U #Stoerung_Quit;
O #Reset_Impuls.Q;
= #SendeDaten.STW1._07_Quit_Stoerung;
NETWORK
TITLE =
L #Regler_f_max;
ITD ;
DTR ;
T #Regler_fmax;
L #Motor_n_Soll;
ITD ;
DTR ;
L #Motor_n_50Hz;
ITD ;
DTR ;
/R ;
T #Faktor_n_50Hz; // Umrechnungsfaktor nMax / n50Hz
L 5.000000e+001;
*R ;
T #Motor_f_Soll; // errechnete Soll-Frequenz
L #Regler_fmax;
/R ;
T #Faktor_f; // Formfaktor für f-max
SPA chk1;
chk1: L #Faktor_f;
L 0.000000e+000;
>=R ;
SPB chk2;
L 0.000000e+000;
T #Faktor_f;
chk2: L #Faktor_f;
L 1.000000e+000;
<=R ;
SPB chkX;
L 1.000000e+000;
T #Faktor_f;
chkX: L 1.638400e+004; // max.Wert Ansteuerung Regler (Hex 4000)
L #Faktor_f;
*R ;
RND- ;
T #SendeDaten.N_Soll;
NETWORK
TITLE =Zustandswort 1 + Drehzahlistwert
U #EmpfangsDaten.ZSW1._02_Betrieb_Freigabe;
U #EmpfangsDaten.ZSW1._14_Links_Rechtslauf;
= #RM_Antrieb_vorwaerts;
U #EmpfangsDaten.ZSW1._02_Betrieb_Freigabe;
UN #EmpfangsDaten.ZSW1._14_Links_Rechtslauf;
= #RM_Antrieb_rueckwaerts;
U #Freigabe;
U #EmpfangsDaten.ZSW1._15_Regler_bereit;
UN #EmpfangsDaten.ZSW1._03_Stoerung;
= #RM_Antrieb_bereit;
U #EmpfangsDaten.ZSW1._07_Warnung;
= #RM_Antrieb_Warnung;
NETWORK
TITLE =
// PZD2 - Drehzahlistwert
L #EmpfangsDaten.N_Ist;
ITD ;
DTR ;
L 1.638400e+004;
/R ;
L #Motor_n_Soll;
*R ;
RND+ ;
T #RM_Antrieb_f_Ist;
NETWORK
TITLE =Senden der Prozessdaten zum MM4
L P##SendeDaten;
LAR1 ;
TAR2 ;
+AR1 ;
L D [AR1,P#0.0];
T PAD [#Pxx_Adresse]; // Steuerwort 1 + Hauptsollwert zum MM4 schicken
END_FUNCTION_BLOCK