Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Results 1 to 9 of 9

Thread: Sinamics S120 Umschaltung Drehzahl-/ Drehmomentregelung

  1. #1
    Join Date
    21.06.2013
    Location
    88376 Königseggwald
    Posts
    11
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    zu meinem System:
    TIA V14
    CPU 1513F
    Sinamics S120 CU320 (Projektierung über STARTER) Telegramm 111
    Linearmotor von Schunk

    Folgende Applikation:
    Auf dem Linearmotor ist ein Schrauber, der einen Anschlussnippel mit Mutter auf ein anderes feststehendes Teil aufschrauben soll. Der Schrauber wird von einem Roboter beladen.
    Ich fahre also insgesamt 3 Positionen an. Beladen des Schraubers, Vorposition Schrauben, Position fertig verschraubt.
    Aktuell benutze ich den SINA_POS. Das funktioniert auch soweit recht gut, aber nicht 100 prozentig. Deshalb möchte ich jetzt die Position "fertig verschraubt" über Drehmoment anfahren, damit der Schrauber immer satt anliegt (Was sowieso richtiger wäre).
    Dazu habe ich jetzt mal den Baustein SINA_PARA_S getestet, um den Parameter 1501 umzuschalten. Mit dem Baustein schaffe ich es allerdings nicht einmal einen Parameter auszulesen. Ich bekomme nur eine Errormeldung. Ich bin mir auch nicht ganz Sicher, ob meine HWID stimmt.

    Geht das so mit dem Baustein wie ich mir das vorstelle?

    Gäbe es eine andere Variante für die Umschaltung?

    Grüße
    Reply With Quote Reply With Quote Sinamics S120 Umschaltung Drehzahl-/ Drehmomentregelung  

  2. #2
    Join Date
    27.05.2004
    Location
    Thüringen/Berlin
    Posts
    13,506
    Danke
    711
    Erhielt 3,023 Danke für 2,174 Beiträge

    Default

    Ich denke, du brauchst dann eher "Fahren auf Festanschlag".
    Das haben wir hier mal diskutiert: S110 MDI-Betrieb Momenten-Begrenzung

    Ich habe ebenfalls SinaPos genutzt, um auf Positionen zu fahren, dann aber eine Umschaltung eingebaut, um auf Festanschlag fahren zu können.
    Dazu mußte ich aber einen Verfahrsatz nutzen und die Werte dazu habe ich vor Start berechnet und an den Servo übertragen.

    Normalerweise tragt man beim Sinapos ja die Position an, wenn man aber einen Verfahrsatz fahren will, dann trägt man dort dir Verfahrsatznummer ein.

    Code:
            IF #TravelToFixedStopStart THEN
                #Position := 0;             //Bei FixStop Verfahrsatz 0 anwählen! Posiiton (SetPos) wird als Parameter in den Verfahrsatz geschrieben
            ELSE
                #Position := #SetPos;
            END_IF;
    Außerdem ist Modepos = 6 (beim Positionieren wäre er 1 oder 2)

    Das Übertragen mache ich vor dem Start, also Start_Travel_to_Fixstop von außen, dann Parameter in einer Schrittkette übertragen, Mode anwählen, Position = 0 für Verfahrsatz 0 und Bewegung starten. Wichtig ist, dass man das Ziel der Bewegung bei "Travel_to_Fixstop" in das Werkstück hinein verlegt, also 10-20 mm weiter. Der Servo darf noch nicht in der Bremsphase auf sein Ziel sein, wenn der Festanschlag kommt, sonst bekommt man eine Störung.

    Hier mal die Schrittkette für das Übertragen der Parameter. Das kann dir als Anhaltspunkt dienen. Das Bit "Travel_to_Fixstop", dass im MDI-Parametersatz existiert hat keine Wirkung gehabt, weiß nicht genau, wozu Siemens das mal vorgesehen hatte. Die Parameterübertragung ist rel. ausführlich, inkl. Rücklesen zur Kontrolle. Es geht sicher auch kürzer.

    Code:
    REGION Parameter_Verfahr-Satz0_Set
    
    
    (* --- Schrittkette Verfahr-Satz 0 setzen und remanent im Servo abspeichern --- *)
    
    
    CASE #nSchrittketteParaSatz0 OF
      1:  // Startwerte Moment setzen
    
    
        #FB_SINA_PARA_S_Instance.Start          := False;   
        #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      := 2622;
        #FB_SINA_PARA_S_Instance.Index          := 0;
        #FB_SINA_PARA_S_Instance.ValueWrite2    := #TorqueTravelToFixedStop;
        #nSetSatz0_ok := 0;
     
        #nSchrittketteParaSatz0 := 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
            AND NOT #FB_SINA_PARA_S_Instance.Error
        THEN 
            #nSchrittketteParaSatz0 := 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 
            #nSchrittketteParaSatz0 := 4; 
            #FB_SINA_PARA_S_Instance.Start  := False; 
        END_IF;
    
    
      4:  // Rückmeldung auslesen
        #FB_SINA_PARA_S_Instance.ReadWrite      := 0; //lesen
        #nSchrittketteParaSatz0 := 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
            AND NOT #FB_SINA_PARA_S_Instance.Error
        THEN 
            #nSchrittketteParaSatz0 := 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 
            #nSchrittketteParaSatz0 := 11; 
            #FB_SINA_PARA_S_Instance.Start  := False; 
        END_IF;
    
    
      7: //Korrekter Wert zurückgelesen?
        IF (#FB_SINA_PARA_S_Instance.ValueRead2 = #TorqueTravelToFixedStop) THEN
            #nSchrittketteParaSatz0 := 11;
            #nSetSatz0_ok := 1;
        ELSE
            #nSchrittketteParaSatz0 := 4; 
        END_IF; 
    
    
      11:  // Startwerte Position setzen
        IF #O_bTargetForward THEN
            #TorquePos := #SetPos + #I_nPositionAdd_TravelToFixedStop;
        ELSE
            #TorquePos := #SetPos - #I_nPositionAdd_TravelToFixedStop;
        END_IF;
    
    
        #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      := 2617;
        #FB_SINA_PARA_S_Instance.Index          := 0;
        #FB_SINA_PARA_S_Instance.ValueWrite2    := #TorquePos;
     
        #nSchrittketteParaSatz0 := 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
            AND NOT #FB_SINA_PARA_S_Instance.Error
        THEN 
            #nSchrittketteParaSatz0 := 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 
            #nSchrittketteParaSatz0 := 14; 
            #FB_SINA_PARA_S_Instance.Start  := False; 
        END_IF;
    
    
      14:  // Rückmeldung auslesen
        #FB_SINA_PARA_S_Instance.ReadWrite      := 0; //lesen
        #nSchrittketteParaSatz0 := 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
            AND NOT #FB_SINA_PARA_S_Instance.Error
        THEN 
            #nSchrittketteParaSatz0 := 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 
            #nSchrittketteParaSatz0 := 21; 
            #FB_SINA_PARA_S_Instance.Start  := False; 
        END_IF;
    
    
      17: //Korrekter Wert zurückgelesen?
        IF (#FB_SINA_PARA_S_Instance.ValueRead2 =  #TorquePos) THEN
            #nSchrittketteParaSatz0 := 21;
            #nSetSatz0_ok := 2;
        ELSE
            #nSchrittketteParaSatz0 := 14; 
        END_IF; 
    
    
      21:  // Startwerte Geschwindigkeit 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      := 2618;
        #FB_SINA_PARA_S_Instance.Index          := 0;
        #FB_SINA_PARA_S_Instance.ValueWrite2    := #SetVel * #I_Velocity_numerator / #I_Velocity_denominator;
     
        #nSchrittketteParaSatz0 := 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
            AND NOT #FB_SINA_PARA_S_Instance.Error
        THEN 
            #nSchrittketteParaSatz0 := 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 
            #nSchrittketteParaSatz0 := 24; 
            #FB_SINA_PARA_S_Instance.Start  := False; 
        END_IF;
    
    
      24:  // Rückmeldung auslesen
        #FB_SINA_PARA_S_Instance.ReadWrite      := 0; //lesen
        #nSchrittketteParaSatz0 := 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
            AND NOT #FB_SINA_PARA_S_Instance.Error
        THEN 
            #nSchrittketteParaSatz0 := 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 
            #nSchrittketteParaSatz0 := 27; 
            #FB_SINA_PARA_S_Instance.Start := False;         
        END_IF;
    
    
    27: //Korrekter Wert zurückgelese?
        IF (#FB_SINA_PARA_S_Instance.ValueRead2 = (#SetVel * #I_Velocity_numerator / #I_Velocity_denominator)) THEN
            #nSchrittketteParaSatz0 := 31;
             #nSetSatz0_ok := 3;
        ELSE
            #nSchrittketteParaSatz0 := 24; 
        END_IF; 
    
    
      31:  // Ende
        #nSchrittketteParaSatz0 := 0;
        #TravelToFixedStopLoad_ok := True;
        #TravelToFixedStopStart := True;
     
    ELSE  // Statement section ELSE
        ;
    END_CASE;
    
    
    
    
    (* --- Aufruf Parametrierung Siemens -- *)
    #FB_SINA_PARA_S_Instance();
    
    
    (* --- Timeout Parameter übertragen --- *)
    #TON_ParameterTimeout(IN:=#CMD_SetAbsoulut 
                                    OR (#TravelToFixedStopLoad_Start AND
                                        NOT #TravelToFixedStopLoad_ok),
                                PT:=t#10s);
    END_REGION
    Hoffe, das hilft dir ein wenig weiter.

    PS: Wenn die Schraubtiefen und Momente konstant sind, könnte man auch einfach feste Verfahrsätze anlegen und damit auf Festanschlag fahren. Bei mir mußte das leider alles variabel sein und auch noch ein Messergebnis (Festanschlag erreicht) ermittelt werden.
    Last edited by Ralle; 24.03.2020 at 14:53.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    peterdausk (27.03.2020)

  4. #3
    peterdausk is offline Neuer Benutzer
    Themenstarter
    Join Date
    21.06.2013
    Location
    88376 Königseggwald
    Posts
    11
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Default

    Hallo Ralle,

    vielen Dank erstmal für deine schnelle Antwort. Ich bin leider die Woche nicht dazu gekommen mich darum zu kümmern. (Die Anlage läuft im Moment auch, aber halt nicht optimal).

    Ich denk der Ansatz mit der Verfahrsätzen wird der Richtige Weg für mich sein. Das bringt mich allerdings trotzdem wieder zu meinem ersten Problem: Die Kommunikation mit SINA_PARA_S.
    Mit dem wollte ich im laufenden Betrieb einfach mal einen Parameter auslesen. Ich bekomme aber ständig nur einen Error. Vermutlich habe ich die falschen Adressen für AxisNo, und HardwareID. Welche Adresse muss ich denn da angeben?

    Grüße
    Peter

  5. #4
    Join Date
    05.04.2012
    Posts
    1,239
    Danke
    133
    Erhielt 318 Danke für 268 Beiträge

    Default

    ... hast Du schon die Doku gecheckt?
    https://support.industry.siemens.com...view/109475044

  6. #5
    Join Date
    27.05.2004
    Location
    Thüringen/Berlin
    Posts
    13,506
    Danke
    711
    Erhielt 3,023 Danke für 2,174 Beiträge

    Default

    Quote Originally Posted by peterdausk View Post
    Hallo Ralle,

    vielen Dank erstmal für deine schnelle Antwort. Ich bin leider die Woche nicht dazu gekommen mich darum zu kümmern. (Die Anlage läuft im Moment auch, aber halt nicht optimal).

    Ich denk der Ansatz mit der Verfahrsätzen wird der Richtige Weg für mich sein. Das bringt mich allerdings trotzdem wieder zu meinem ersten Problem: Die Kommunikation mit SINA_PARA_S.
    Mit dem wollte ich im laufenden Betrieb einfach mal einen Parameter auslesen. Ich bekomme aber ständig nur einen Error. Vermutlich habe ich die falschen Adressen für AxisNo, und HardwareID. Welche Adresse muss ich denn da angeben?

    Grüße
    Peter
    Am Ende der gezeigten Schrittkette rufe ich den FB_Sina_Para_S auf, in der Schrittkette wird eigentlich gezeigt, wie man Parameter schreiben und lesen kann.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  7. #6
    peterdausk is offline Neuer Benutzer
    Themenstarter
    Join Date
    21.06.2013
    Location
    88376 Königseggwald
    Posts
    11
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Default

    Hallo,

    @zako. Vielen dank für die Antwort, die Doku habe ich mir schon angeschaut, und hoffentlich auch nichts überlesen
    @Ralle. Ich hab schon verstanden, wie der Baustein aufgerufen wird. Leider funktioniert es bei mir nicht mit dem Datenaustausch, und ich bin mir nicht sicher, ob ich die richtigen Adressen am Baustein habe.

    AxisNo --> Achsnummer / AchsID bei Mehrachssystem. --> Wo finde ich die Achsnummer? In der Starter Software? Oder ist es die Nummer 1 weil ich nur eine Achse habe?

    hardwareId --> Hardware ID des Modul Acces Points / Istwerttelegrammslots der Achse bzw. Antrieb. --> Hier habe ich die Adresse 440 eingetragen (siehe Bild HardwareID). Ist das die richtige?

    Hardware ID.jpg

    Hoffe Ihr versteht mein Problem

    Grüße
    Peter

  8. #7
    Join Date
    27.05.2004
    Location
    Thüringen/Berlin
    Posts
    13,506
    Danke
    711
    Erhielt 3,023 Danke für 2,174 Beiträge

    Default

    Bei mir sieht das so aus:

    Screenshot 2020-03-27 um 11.23.42.jpg

    Ok, ich hab noch die CU und ein paar Zusatzdaten drin, aber die Hardware-ID, die ich sowohl an Sina_Pso, als auch an Sina_Para_S übergebe ist die im Bild gezeigte.
    Damit funktioniert das ohne Probleme.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  9. #8
    peterdausk is offline Neuer Benutzer
    Themenstarter
    Join Date
    21.06.2013
    Location
    88376 Königseggwald
    Posts
    11
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Default

    Jetzt hab ich es hinbekommen.

    Bei der AxisNo. muss 2 drin stehen.
    Ist das dann weil die Cu die Adresse 1 hat?

    Egal, es geht. Danke!

  10. #9
    Join Date
    05.04.2012
    Posts
    1,239
    Danke
    133
    Erhielt 318 Danke für 268 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by peterdausk View Post
    Jetzt hab ich es hinbekommen.

    Bei der AxisNo. muss 2 drin stehen.
    Ist das dann weil die Cu die Adresse 1 hat?

    Egal, es geht. Danke!
    Richtig, Du musst die DriveObjektnummer angeben. Wenn Du z.B. eine CU320-2 mit mehreren Achsen hast, dann können da 6 Achsen drauf sein und noch die Einspeisung, Terminalmodule usw. . Jede hat dann eine eigene DriveObjektnummer.

    Weitere Anmerkung:
    Wenn Du ohnehin schon ein S7-1500 hast, dann könntest Du auch die Technologieobjekte dort nutzen. Da gibt es dann PLC-Open Bausteine wie MC_Torquelimiting womit man dann drehmomentbegrenzt verfahren kann (z.B. auch für Greifer usw. einsetzbar) oder Kollissionsüberwachung usw.

Similar Threads

  1. Replies: 18
    Last Post: 21.05.2019, 20:54
  2. Replies: 4
    Last Post: 11.12.2018, 09:35
  3. Sinamics G120C Drehzahl/Frequenz
    By Chuckie in forum Antriebstechnik
    Replies: 5
    Last Post: 04.01.2018, 10:36
  4. SINAMICS G120 Drehmomentregelung Inbetriebnahme
    By Lars_S in forum Antriebstechnik
    Replies: 6
    Last Post: 30.09.2016, 14:30
  5. Sinamics S120 Parameter r2199.1 Drehzahl "0" Signal
    By BADMAN in forum Antriebstechnik
    Replies: 9
    Last Post: 23.04.2010, 14:46

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •