Autor Thema: Kommunikations-FB für SEW Umrichter Movitrac MC07B  (Gelesen 11732 mal)

Offline radar17892

  • Sr. Member
  • ****
  • Beiträge: 709
  • Think easy!
    • mollgruppe
Kommunikations-FB für SEW Umrichter Movitrac MC07B
« am: März 25, 2015, 16:26:26 Nachmittag »
Hallo codesys Feunde,

der eine oder andere möchte auch frequenzgeregelte Antriebe steuern. Um nicht unnötig Hardware I/O zu verschwenden, kann das auch über CANopen realisiert werden. Über eine EDS-Datei werden in der Hardwareconfiguration Variablen zur Kommunikation mit dem FU bereitgestellt. Der folgende Baustein soll zeigen, das es nicht schwierig ist so etwas zu realisieren.
Weitere Hinweise könnt ihr hier finden: http://easy-forum.net/index.php?topic=6166.0

Hinweis:
Die Übergabe des Drehzahlsollwertes erfolgt bewusst in %, da diese einen Bezugswert darstellt auf Par. 302/312 n-max.
Will man mit absoluten Drehzahlwerten arbeiten, sind die bausteininterne Verrechnung und die FU-Parameter genau aufeinander abzustimmen.
Par302 darf dann nicht mehr verändert werden!

FUNCTION_BLOCK FB_MC07_com
(*
##################################################################################
Programmbeschreibung:
Kommunikation mit SEW MC07B Umrichter über CANopen
Aufbereiten des FU Prozessdatenworts Status, Ausgabe Steuerwort und Solldrehzahl
Benötigt mc07b.eds
wichtige FU-Parameter:
870 Sollwert-Beschreibung PA1 Steuerwort 1
871 Sollwert-Beschreibung PA2 Solldrehzahl
872 Sollwert-Beschreibung PA3 Keine Funktion
873 Istwert-Beschreibung PE1 Statuswort 1
874 Istwert-Beschreibung PE2 Keine Funktion
875 Istwert-Beschreibung PE3 Keine Funktion
876 PA-Daten freigeben Ja
##################################################################################
                                            Änderungsindex
Name:TL              Version:0.2           Datum: 01.2015            Grund:   Optimierung
##################################################################################
*)

VAR_INPUT
    CAN_OK: BOOL;        (*OK vom Busmaster*)
    Reglersp: BOOL;        (*1= Reglersperre*)
    Frg_Halt: BOOL;        (*1= Freigabe / 0= Halt*)
    Frg_Stop: BOOL;        (*1= Freigabe / 0= Schnellstop*)
    Reset: BOOL;            (*Fehlerreset*)
    Status: INT;              (*FU Prozessdatenwort*)
    n_SW_Prozent: INT;        (*Drehzahlsollwert in % *)
END_VAR
VAR_OUTPUT
    FU_laeuft: BOOL;        (*Endstufe ist freigegeben*)
    FU_bereit: BOOL;        (*Bereitmeldung von FU*)
    FU_PA_Daten_frg: BOOL;        (*Umrichter hat Prozessdaten freigegeben*)
    W_F_FU: BOOL;        (*Warnung oder Fehler steht an*)
    FU_Warnung: BOOL; (*Warnung steht an(ohne Abschaltung)*)
    FU_Fehler: BOOL; (*Fehler steht an (mit Abschaltung)*)
    Fehlercode: BYTE;        (*SEW Fehlercode*)
    Steuerwort1: INT;        (*Steuerwort 1 (Freigaben) *)
    n_Soll: INT;       (*Drehzahlsoll Rohwert an Umrichter  *)
END_VAR
VAR
    Verz_Err: TON;        (*Verzögerung für FU Anlauf nach Netzaus*)
END_VAR
VAR CONSTANT
    Faktor_Drehzahl: INT := 75;        (* 100%Y x Faktor = Nenndrehzahl x 5*)
    n_min: SINT :=20;             (*Dauerhafte min-Drehzahlbegrenzung (Motorkühlung beachten) *)
END_VAR

#########################################################

(*Statusbits aus Statuswort lesen*)
FU_laeuft := Status.0;
FU_bereit := Status.1;
FU_PA_Daten_frg := Status.2;
W_F_FU := Status.5;
(*extrahieren des Statusbyte1 aus Statuswort1 und FU Fehlercode ausgeben*)
IF W_F_FU THEN
    Fehlercode := WORD_TO_BYTE (SHR ( INT_TO_WORD (Status) , 8) );
    ELSE Fehlercode := 0;    (*kein Fehler*)
END_IF;
(*Warnung*)
FU_Warnung := (FU_bereit  AND W_F_FU);
(*Fehler*)
Verz_Err(IN:= (CAN_OK AND NOT FU_bereit) OR (W_F_FU AND NOT FU_bereit) ,
        PT:=t#3s , Q=> FU_Fehler , ET=> );
(*Softwarefreigabe FU, Bits ins Steuerwort schreiben*)
Steuerwort1.0 :=Reglersp;
Steuerwort1.1 := Frg_Halt;
Steuerwort1.2 := Frg_Stop;
Steuerwort1.3 := FALSE;
Steuerwort1.4 := FALSE;
Steuerwort1.5 := FALSE;
Steuerwort1.6 := Reset;
Steuerwort1.7 := FALSE;
(*Drehzahlrohwert ausgeben, *)
IF (n_SW_Prozent < 0) THEN
     n_Soll := Faktor_Drehzahl * SINT_TO_INT(LIMIT((-1 * n_min), n_SW_Prozent, -100) );  (*n neg *)
     ELSE
     n_Soll := Faktor_Drehzahl * SINT_TO_INT(LIMIT(n_min, n_SW_Prozent, 100) );   (*n pos *)
END_IF

« Letzte Änderung: August 23, 2015, 11:36:55 Vormittag von radar17892 »
Weil Einfach einfach Einfach ist!