S120 CU310-2PN Referenzieren

Tommy1981

Level-2
Beiträge
76
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

vielleicht hat jemand einen Tipp für mich...

Ich habe einen Sinamics S120 mit CU320-2PN und SSI Sin/Cos Absolutwertgeber. Der wird als Einfachpositionierer betrieben und kommuniziert mittels Telegramm 111 mit einer S7-1500.
Nach Spannungausfall (also auch täglichem Ausschalten der Anlage am Hauptschalter) wird das Bit11 (Referenzpunkt gesetzt) des ZSW1 nicht mehr mit "True" beschrieben und der FU positioniert daher auch nicht mehr. Den richtigen Positionswert zeigt er auch nach wie vor an.
Ich muss jedesmal im Einrichtbetrieb den Antrieb in die 0° Position "tippen" und dann per Pos_STW2 Bit1 (Referenzpunkt setzen) auf 0° referenzieren.

Es gibt doch bestimmt eine einfachere Möglichkeit dies zu tun... hoffe es kann mir jemand helfen.

Danke vorab
 
Servus,

Referenzierst du den Antrieb immer mit dem STW oder hast du auch schonmal über die Antriebssteuertafel eine Absolutwertgeberjustage gemacht ?
Referenzpunkt setzen und Absolutwertgeberjustage sind 2 unterschiedliche Referenziermethoden.

Mit freundlichen Grüßen
Piit


Gesendet von iPhone mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
-... da gibts auch einen recht komfortablen Baustein (egal ob Du eine S7-1200/1500 oder SINAMICS S/V/G mit Einfachpositionierer hast):
https://support.industry.siemens.com/cs/ww/de/view/109760317

Du hast nur inkrementell gesetzt. In den meisten Anwendungen möchte man aber schon eine Absolutwertgeberjustage (also nicht flüchtig abspeichern), wenn man schon einen Absolutwertgeber hat. Aber ist ja nicht verkehrt wenn man alle Möglichkeiten hat.

Du hast ja auch eine S7-1500. Dann könntest Du auch mit Technologieobjekte arbeiten (also ohne EPos im Antrieb, dafür Sollwertinterpolation in der Steuerung). Aber das ist Geschmackssache. Das TO ist evtl. noch benutzerfreundlicher.
 
Zuletzt bearbeitet:
Ich hab den FB_SINA_PARA Baustein von Siemens dazu genutzt. Der ist bei der Drive-Lib dabei. Den von Zako gennnten kannte ich noch gar nicht.
Dazu habe ich das in einer kleinen Schrittkette laufen lassen. Ist rel. lang, aber nur, weil ich die Werte auch wieder zurücklese und kontrolliere.
Wäre wohl nicht unbedingt nötig. Man kann auch einen Absolutwert vorgeben. Insgesamt kann man die Schrittkette als Vorlage nutzen, um beliebige Parameter im Servo aus der SPS heraus zu schreiben und zu lesen, die über das jeweilige Telegramm und EPOS nicht errreichbar sind.

Hier mal die Schrittkette zur Orientierung.

Code:
REGION Parameter_Absolut_Set


(* --- Schrittkette Absolutwert setzen und remanent im Servo abspeichern --- *)


CASE #nSchrittketteParaSetAbs OF
  1:  // Startwerte setzen
    #FB_SINA_PARA_S_Instance.ReadWrite      := 1; //schreiben
    #FB_SINA_PARA_S_Instance.AxisNo         := #I_AxisNo_Starter;
    #FB_SINA_PARA_S_Instance.hardwareId     := #I_HWID_Sollwert_Slot;
    #FB_SINA_PARA_S_Instance.Parameter      := 2599;
    #FB_SINA_PARA_S_Instance.Index          := 0;
    #FB_SINA_PARA_S_Instance.ValueWrite2    := #I_SetAbsolutwertValue;
    #nSetAbsolut_ok := 0;
 
    #nSchrittketteParaSetAbs := 2;
    
  2:  // Auftrag starten
    #FB_SINA_PARA_S_Instance.Start  := True; 


    IF #FB_SINA_PARA_S_Instance.Busy
        AND NOT #FB_SINA_PARA_S_Instance.Done
    THEN 
        #nSchrittketteParaSetAbs := 3;
    END_IF;
 
  3:  // Auftrag fertig
    #FB_SINA_PARA_S_Instance.Start  := True; 


    IF NOT #FB_SINA_PARA_S_Instance.Busy
        AND #FB_SINA_PARA_S_Instance.Done
    THEN 
        #nSchrittketteParaSetAbs := 4; 
        #FB_SINA_PARA_S_Instance.Start  := False; 
    END_IF;


  4:  // Rückmeldung auslesen
    #FB_SINA_PARA_S_Instance.ReadWrite      := 0; //lesen
    #nSchrittketteParaSetAbs := 5;


  5:  // Rückmeldung auslesen starten
    #FB_SINA_PARA_S_Instance.Start  := True;


    IF #FB_SINA_PARA_S_Instance.Busy
        AND NOT #FB_SINA_PARA_S_Instance.Done
    THEN 
        #nSchrittketteParaSetAbs := 6;
    END_IF;
 
  6:  // Auftrag fertig
    #FB_SINA_PARA_S_Instance.Start  := True; 


    IF NOT #FB_SINA_PARA_S_Instance.Busy
        AND #FB_SINA_PARA_S_Instance.Done
    THEN 
        #nSchrittketteParaSetAbs := 11; 
        #FB_SINA_PARA_S_Instance.Start  := False; 
    END_IF;


  7: //Korrekter Wert zurückgelesen?
    IF (#FB_SINA_PARA_S_Instance.ValueRead2 =  #I_SetAbsolutwertValue) THEN
        #nSchrittketteParaSetAbs := 11;
        #nSetAbsolut_ok := 1;
    ELSE
        #nSchrittketteParaSetAbs := 4; 
    END_IF; 


  11:  // Startwerte setzen Geberpos setzen
    #FB_SINA_PARA_S_Instance.ReadWrite      := 1; //schreiben
    #FB_SINA_PARA_S_Instance.AxisNo         := #I_AxisNo_Starter;
    #FB_SINA_PARA_S_Instance.hardwareId     := #I_HWID_Sollwert_Slot;
    #FB_SINA_PARA_S_Instance.Parameter      := 2507;
    #FB_SINA_PARA_S_Instance.Index          := 0;
    #FB_SINA_PARA_S_Instance.ValueWrite1    := 2.0;
 
    #nSchrittketteParaSetAbs := 12;
    
  12:  // Auftrag starten
    #FB_SINA_PARA_S_Instance.Start  := True; 


    IF #FB_SINA_PARA_S_Instance.Busy
        AND NOT #FB_SINA_PARA_S_Instance.Done
    THEN 
        #nSchrittketteParaSetAbs := 13;
    END_IF;
 
  13:  // Auftrag fertig
    #FB_SINA_PARA_S_Instance.Start  := True; 


    IF NOT #FB_SINA_PARA_S_Instance.Busy
        AND #FB_SINA_PARA_S_Instance.Done
    THEN 
        #nSchrittketteParaSetAbs := 14; 
        #FB_SINA_PARA_S_Instance.Start  := False; 
    END_IF;


  14:  // Rückmeldung auslesen
    #FB_SINA_PARA_S_Instance.ReadWrite      := 0; //lesen
    #nSchrittketteParaSetAbs := 15;


  15:  // Rückmeldung auslesen starten
    #FB_SINA_PARA_S_Instance.Start  := True;


    IF #FB_SINA_PARA_S_Instance.Busy
        AND NOT #FB_SINA_PARA_S_Instance.Done
    THEN 
        #nSchrittketteParaSetAbs := 16;
    END_IF;
 
  16:  // Auftrag fertig
    #FB_SINA_PARA_S_Instance.Start  := True; 


    IF NOT #FB_SINA_PARA_S_Instance.Busy
        AND #FB_SINA_PARA_S_Instance.Done
    THEN 
        #nSchrittketteParaSetAbs := 21; 
        #FB_SINA_PARA_S_Instance.Start  := False; 
    END_IF;


  17: //Korrekter Wert zurückgelesen?
    IF (#FB_SINA_PARA_S_Instance.ValueRead1 =  3.0) THEN
        #nSchrittketteParaSetAbs := 21;
        #nSetAbsolut_ok := 2;
    ELSE
        #nSchrittketteParaSetAbs := 14; 
    END_IF; 


  21:  // Startwerte setzen RAM nach ROM kopieren
    #FB_SINA_PARA_S_Instance.ReadWrite      := 1; //schreiben
    #FB_SINA_PARA_S_Instance.AxisNo         := #I_AxisNo_Starter;
    #FB_SINA_PARA_S_Instance.hardwareId     := #I_HWID_Sollwert_Slot;
    #FB_SINA_PARA_S_Instance.Parameter      := 971;
    #FB_SINA_PARA_S_Instance.Index          := 0;
    #FB_SINA_PARA_S_Instance.ValueWrite1    := 1.0;
 
    #nSchrittketteParaSetAbs := 22;
    
  22:  // Auftrag starten
    #FB_SINA_PARA_S_Instance.Start  := True; 


    IF #FB_SINA_PARA_S_Instance.Busy
        AND NOT #FB_SINA_PARA_S_Instance.Done
    THEN 
        #nSchrittketteParaSetAbs := 23;
    END_IF;
 
  23:  // Auftrag fertig
    #FB_SINA_PARA_S_Instance.Start  := True; 


    IF NOT #FB_SINA_PARA_S_Instance.Busy
        AND #FB_SINA_PARA_S_Instance.Done
    THEN 
        #nSchrittketteParaSetAbs := 24; 
        #FB_SINA_PARA_S_Instance.Start  := False; 
    END_IF;


  24:  // Rückmeldung auslesen
    #FB_SINA_PARA_S_Instance.ReadWrite      := 0; //lesen
    #nSchrittketteParaSetAbs := 25;


  25:  // Rückmeldung auslesen starten
    #FB_SINA_PARA_S_Instance.Start  := True;


    IF #FB_SINA_PARA_S_Instance.Busy
        AND NOT #FB_SINA_PARA_S_Instance.Done
    THEN 
        #nSchrittketteParaSetAbs := 26;
    END_IF;
 
  26:  // Auftrag fertig
    #FB_SINA_PARA_S_Instance.Start  := True; 


    IF NOT #FB_SINA_PARA_S_Instance.Busy
        AND #FB_SINA_PARA_S_Instance.Done
    THEN 
        #nSchrittketteParaSetAbs := 27; 
        #FB_SINA_PARA_S_Instance.Start  := False;         
    END_IF;


27: //Korrekter Wert zurückgelese?
    IF (#FB_SINA_PARA_S_Instance.ValueRead1 = 0.0) THEN
        #nSchrittketteParaSetAbs := 31;
         #nSetAbsolut_ok := 3;
    ELSE
        #nSchrittketteParaSetAbs := 24; 
    END_IF; 


  31:  // Ende
    #nSchrittketteParaSetAbs := 0;
    #IO_stAxis_CMD.set_absolut := False;
    #CMD_SetAbsoulut := False;
 
ELSE  // Statement section ELSE
    ;
END_CASE;


END_REGION

(* --- Aufruf Parametrierung Siemens -- *)
#FB_SINA_PARA_S_Instance();


(* --- Timeout Parameter übertragen --- *)
#TON_ParameterTimeout(IN:=#CMD_SetAbsoulut,
                       PT:=t#10s);
 
Zurück
Oben