S110 Absolutwertgeber Justage und RAM -> ROM über p971 aus SPS

goonie

Level-1
Beiträge
18
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und ein frohes neues Jahr 2015,

ich sitze schon seit ein paar Tagen an folgenden Problem:

S110 CU305 mit Servomotor 1FK7022-5AK71-1LH3 DriveCliq und Multiturn Absoluwertgeber.
Telegram PZD390 für die CU305 und Telegramm 111 für den Servo.
Ich setzen den Absolutwert aus meinem FB über EPOs STW2 das bit9 p2596 über das Steuerwort und sehe auch das der Positionswert auf 0 geht.
Danach mit SFB 52 p971 auf 1 geschrieben ,mit SFB 53 gelesen bis p971= 0 wurde.
Die CU305 ist als Objekt 1 und der Antrieb als Objekt 2 eingetragen.Beim Schreiben von p971 benutze ich immer die Kennung 1=CU305
Jetzt sollte ram nach rom erfolgreich gewesen sein.Nach Ausschalten der Spannung ist der Geber aber leider nicht mehr justiert.
Im Starter kann ich in der Watchtabelle sehen ,dass der Wert p971 sich auch tatsächlich ändert.
Habe dann mal Tippgeschwindigkeiten etc.über SFB 52 geändert und das gleiche Procedere mit p971 ausgeführt,Spannung aus,wieder ein
und siehe da,die Werte bleiben korrekt.
Nächster Versuch :mit p2507=2 Absoluwertgeber justiert,Anwort=3,Angezeigter Positionswert geht auf 0-> alles OK. p971 wieder angestossen,Spannung Aus,Spannung Ein,Absoluwertgeberjustage ist wieder weg:evil:
Was muss ich denn jetzt noch einstellen damit RAM nach ROM aus der SPS funktioniert?:confused:
Wenn ich den Absolutwert in der Startermaske setze und RAM->ROM ausführe bleibt der Geber justiert.
 
Hi,

du solltest nur den Parameter p977 nehmen statt dem p971.
p971 sichert nur die Daten eines einzelnen DO's, bei dir also der Controil Unit.
Die Parameter vom Servoobjekt sicherst du damit nicht, RAM to ROM über den STARTER schreibt p977.

Gruß
Christoph
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ChristophD

danke für den Tipp.
So habe ich es jetzt probiert

1. Absolutwert über Steuerwort Epos STw2-bit 9( p2596 Referenzpunkt_setzen) gesetzt
2. p977 auf 1 gesetzt.
3. mit SFB 53 geschrieben(hatte bei Thread Eröffnung SFB 53 und SFB 52 vertauscht)
4.zyklisch mit SFB 52 gelesen bis p977 auf 0 gesetzt wurde,ca. 15 sec.)
5.Spannung aus,wieder Ein
6.Absolutwert ist wieder weg:evil:

Nächster Versuch:
1. p2507 mit sfb53 auf 2 geschrieben,Objekt=2(Antrieb)
2. sfb52 bis p2507=3 meldet
3. p977=1,Objekt=1(Controller)
4. warten bis p977=0(15sec.)
5.Spannung Aus,Ein
6.Absoluwert ist immer noch null:DHuraaaa!!!

vielen Dank für den Denkanstoß

Eine Frage bleibt: Warum funktioniert das Speichern des aus dem EposSTW2-bit9-erfolgreich angestossenem Justieren des Absoluwertgebers nicht?Was ist der Unterschied zu p2507 ?

beste Grüße
goonie
 
Eine Frage bleibt: Warum funktioniert das Speichern des aus dem EposSTW2-bit9-erfolgreich angestossenem Justieren des Absoluwertgebers nicht?Was ist der Unterschied zu p2507 ?

Mit dem "Lage setzen" erfolgt ein einfaches setzen der Lage (wenn man einen rein inkrementellen Geber hat, bzw. den Absolutwertgeber in gewissen Situationen so handhaben will). Wenn man aber einen Absolutwertgeber justieren will, muss man das über Deinen (nun richtig ausprogrammierten) Mechanismus über azykl. Aufträge machen.
Übrigens: Mit dem FB283 bzw. FB287 (im TIAP) geht es bequemer, als über SFB52/53
 
Hallo zako
Übrigens: Mit dem FB283 bzw. FB287 (im TIAP) geht es bequemer, als über SFB52/53

mit dem FB283 habe ich auch angefangen zu experimentieren.Da ich den Antrieb aber über meinen eigenen FB steuern möchte,wollte ich mir für den simplen Vorgang des Absolutwert Justierens nicht den kompletten Overhead vom
FB283 einhängen müssen.
Kann ja auch nicht schaden,wenn man den Mechanismus einmal richtig verstanden hat.
Habe bisher nur mit Bosch-Rexroth Antrieben gearbeitet und da setze ich halt das bit-und fertig.RAM nach ROM gibt's da nicht und was ich in dem Antrieb online ändere ist sowieso ausfallsicher gespeichert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi, genau das gleiche Problem habe ich auch. Ich habe 3 Servos mit Absolutwertgebern drauf. Ich setzte die Referenzpunkte nur aus dem Starter heraus.

Wenn ich nun wie du die Spannung wegnehmen, behalten 2 Antriebe und der 3 verliert immer seinen Referenzpunkt. Obwohl ich alle 3 gleich konfiguriert habe bekomme ich es mit dem 3 Antrieb einfach nicht hin.

Neben dem Setzten des Referenzpunktes über den entsprechenden Button im Starter setzte ich zusätzlich noch über die Expertenliste das bit 977 auf 1 und warte die 15sekunden. Aber nach Spannungsabfall verliert der Geber wieder den Referenzpunkt.

Du gehst ja nun den Weg über die Steuerung, aber es sollte doch auch aus dem Starter heraus dauerhaft möglich sein das der Referenzpunkt beibehalten wird ?

Gruß
Sven
 
.... hast Du einen Multiturnabsolutwertgeber , oder einen Singleturnabsolutwertgeber?
sind die Mechaniken gleich?
Gleicher Offset?
Linear oder Rundachse?
Hast Du mit Lageverfolgung ausprobiert?
 
--->> Spannendes Thema. Eigentlich müsste man sich eine AWL Schrittkette schreiben, um dieses Prozedere mit Parameter schreiben, rücklesen, Parameter schreiben etc. vernünftig abarbeiten zu können. Das Ganze dann in einem eigenen FB verpacken, der dann irgendwie EICHEN_ABSOLUTACHSE heißt oder so ähnlich. Hatte schon man damit zu kämpfen.

Besser noch: man "erweitert" den werkseigenen FB283 (SINA FB) und macht daraus einen SINA_MOD oder von mir aus SINCHEN ;)
Der hat dann Paar mehr Füße und erlaubt bei Bedarf Justage einer Absolutachse mittels Parameterzugriff mit Rückmeldung
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin
Bei bosch Antrieben gibt es auch RAM & Flash Speicher. Über Parameter S-0-0269 =1 kann man nicht speichernd ein stellen. Die Steuerungen von Bosch stellen immer 1 ein. Daher bei der Inbetriebnahme aufpassen. Das Absolutmass wird immer in den Flash Speicher geschrieben. Koordinaten Verschiebung passiert im RAM Aber sogenanntes Kommandos werden immer mit einem Bit quittiert. Stichwort Kommandoänderungsbit. Das Umschalten zwischen speichern und nicht speichern kann on the Flyer geändert werden. Das abspeichern kann man auch während der Regelung erzwingen. C2400
Gruß Herbert


Sent from my iPhone using Tapatalk
 
Muss das hier für nochmal aufgreifen...

Hallo ChristophD
1. p2507 mit sfb53 auf 2 geschrieben,Objekt=2(Antrieb)
2. sfb52 bis p2507=3 meldet
3. p977=1,Objekt=1(Controller)
4. warten bis p977=0(15sec.)
5.Spannung Aus,Ein
6.Absoluwert ist immer noch null:DHuraaaa!!!

Heißt das, ich brauche 2 FB283-Aufrufe, einen für die CU (Axis_No = 1) und einen für das Antriebsobjekt (Axis_No = 2)?

Danke + Gruß
StGo
 
Ich versuche auch gerade, diese Parametrierung durchzuführen.
Die Positionierung klappt, aber die Parametrierung klappt noch nicht.

Leider ist die PDF zum Baustein (von Siemens) in einigen Aussagen einach nicht klar.
Folgende Hardware-ID's werden in der Hardwarekonfig automatisch erzeugt:

SINAMICS-S120-CU310-2PN~Proxy Hw_SubModule 320
SINAMICS-S120-CU310-2PN~IODevice Hw_Device 318
SINAMICS-S120-CU310-2PN~PN-IO Hw_Interface 321
SINAMICS-S120-CU310-2PN~PN-IO~Port_1 Hw_Interface 322
SINAMICS-S120-CU310-2PN~PN-IO~Port_2 Hw_Interface 323
SINAMICS-S120-CU310-2PN~Head Hw_SubModule 324
SINAMICS-S120-CU310-2PN~Control_Unit_1 Hw_SubModule 325
SINAMICS-S120-CU310-2PN~Control_Unit_1~leeres_Submodul Hw_SubModule 326
SINAMICS-S120-CU310-2PN~Control_Unit_1~Module_Access_Point Hw_SubModule 327
SINAMICS-S120-CU310-2PN~Control_Unit_1~ohne_PROFIsafe Hw_SubModule 328
SINAMICS-S120-CU310-2PN~Control_Unit_1~SIEMENS_Telegramm_390__PZD-,,, Hw_SubModule 329
SINAMICS-S120-CU310-2PN~Antrieb_1 Hw_SubModule 330
SINAMICS-S120-CU310-2PN~Antrieb_1~Zusatzdaten__PZD-2_2 Hw_SubModule 331
SINAMICS-S120-CU310-2PN~Antrieb_1~Module_Access_Point Hw_SubModule 332
SINAMICS-S120-CU310-2PN~Antrieb_1~PROFIsafe_Telegr_30 Hw_SubModule 333
SINAMICS-S120-CU310-2PN~Antrieb_1~SIEMENS_Telegramm_111__PZD-,,, Hw_SubModule 334

Welche davon muß ich denn nun nutzen, um

1. Parameter p2507 zu schreiben und zu lesen
2. Parameter p977 zu schreiben und zu lesen?

Die Beschaltung nehme ich wie folgt vor:

#FB_SINA_PARA_S_Instance.ReadWrite := 1; //schreiben
#FB_SINA_PARA_S_Instance.AxisNo := 1;
#FB_SINA_PARA_S_Instance.hardwareId := #HWIDModulAccessPoint;
#FB_SINA_PARA_S_Instance.Parameter := 2507;
#FB_SINA_PARA_S_Instance.Index := 0;
#FB_SINA_PARA_S_Instance.ValueWrite2 := 2;

Ist das so korrekt?

PS: Ich hab es mit 332 versucht, die Schrittkette (mit Busy und Done) des FB287 läuft duch, aber des wird keine "3" zurückgelesen eine Parametererror steht an und die Position wird nciht auf 0 gesetzt.

ErrorID ist hex 1, der Parameter ist also falsch? Nur, was muß ich dann eintragen?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Ralle,
hab leider keine Zeit um ausgiebig nachzuschauen aber ich meine:
HW-Konstante sollte in deinem Fall sein:
SINAMICS-S120-CU310-2PN~Antrieb_1~SIEMENS_Telegramm_111__PZD-,,, Hw_SubModule 334

Beschaltung sollte sein:

Laden des Referenzwertes
Code:
#instSINA_PARA_S.ReadWrite := #WRITE
#instSINA_PARA_S.hardwareId := #iqAchsdaten.Steuerdaten.HWIDIstwertTele111 // siehe oben
#instSINA_PARA_S.Parameter := 2599
#instSINA_PARA_S.Index := 0
#instSINA_PARA_S.ValueWrite2 := #iReferenzwert
#instSINA_PARA_S.AxisNo := #iAxisNo

Laden des zu referenzierenden Gebers
Code:
#instSINA_PARA_S.ReadWrite := #WRITE
#instSINA_PARA_S.hardwareId := #iqAchsdaten.Steuerdaten.HWIDIstwertTele111 // siehe oben
#instSINA_PARA_S.Parameter := 2507
#instSINA_PARA_S.Index := 0
#instSINA_PARA_S.ValueWrite1 := 2.0
#instSINA_PARA_S.AxisNo := #iAxisNo // hatte ich immer im Starter nachgesehen
RAM zu ROM sichern
Code:
#instSINA_PARA_S.ReadWrite := #WRITE
#instSINA_PARA_S.hardwareId := #iqAchsdaten.Steuerdaten.HWIDIstwertTele111 // siehe oben
#instSINA_PARA_S.Parameter := 971
#instSINA_PARA_S.Index := 0   
#instSINA_PARA_S.ValueWrite1 := 1.0
#instSINA_PARA_S.AxisNo := #iAxisNo // hatte ich immer im Starter nachgesehen

Ist aus meiner Schrittkette zum Ref-Wert setzen und RAM->ROM sichern.
 
Zuletzt bearbeitet:
RAM nach ROM funktioniert leider noch nicht.
Reicht der Parameter p971? Die Vorschreiber wollten ja p977 in der CU beschreiben.
Wie lange dauert das Speichern?
Drehst du in deiner Schrittkette eine Schleife und wartest, bus du eine 0 zurückliest?
 
So, es funktioniert nun. p971 reicht aus.

Ich hab es mal ganz ausführlich programmiert, Fehlerbehandlung und Timeout fehlen allerdings noch.



Code:
REGION Para_Absolutwert


//Schrittkkette


CASE #nSchrittkettePara OF
  1:  // Startwerte setzen
    #FB_SINA_PARA_S_Instance.ReadWrite      := 1; //schreiben
    #FB_SINA_PARA_S_Instance.AxisNo         := #IAxisNo_Starter;
    #FB_SINA_PARA_S_Instance.hardwareId     := #HWID;
    #FB_SINA_PARA_S_Instance.Parameter      := 2599;
    #FB_SINA_PARA_S_Instance.Index          := 0;
    #FB_SINA_PARA_S_Instance.ValueWrite2    := #ISetAbsolutwertValue;
    #Set_Absolut_ok := 0;
 
    #nSchrittkettePara := 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 
        #nSchrittkettePara := 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 
        #nSchrittkettePara := 4; 
        #FB_SINA_PARA_S_Instance.Start  := False; 
    END_IF;


  4:  // Rückmeldung auslesen
    #FB_SINA_PARA_S_Instance.ReadWrite      := 0; //lesen
    #nSchrittkettePara := 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 
        #nSchrittkettePara := 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 
        #nSchrittkettePara := 11; 
        #FB_SINA_PARA_S_Instance.Start  := False; 
    END_IF;


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


  11:  // Startwerte setzen Geberpos setzen
    #FB_SINA_PARA_S_Instance.ReadWrite      := 1; //schreiben
    #FB_SINA_PARA_S_Instance.AxisNo         := #IAxisNo_Starter;
    #FB_SINA_PARA_S_Instance.hardwareId     := #HWID;
    #FB_SINA_PARA_S_Instance.Parameter      := 2507;
    #FB_SINA_PARA_S_Instance.Index          := 0;
    #FB_SINA_PARA_S_Instance.ValueWrite1    := 2.0;
 
    #nSchrittkettePara := 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 
        #nSchrittkettePara := 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 
        #nSchrittkettePara := 14; 
        #FB_SINA_PARA_S_Instance.Start  := False; 
    END_IF;


  14:  // Rückmeldung auslesen
    #FB_SINA_PARA_S_Instance.ReadWrite      := 0; //lesen
    #nSchrittkettePara := 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 
        #nSchrittkettePara := 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 
        #nSchrittkettePara := 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
        #nSchrittkettePara := 21;
        #Set_Absolut_ok := 2;
    ELSE
        #nSchrittkettePara := 44; 
    END_IF; 


  21:  // Startwerte setzen RAM nach ROM kopieren
    #FB_SINA_PARA_S_Instance.ReadWrite      := 1; //schreiben
    #FB_SINA_PARA_S_Instance.AxisNo         := #IAxisNo_Starter;
    #FB_SINA_PARA_S_Instance.hardwareId     := #HWID;
    #FB_SINA_PARA_S_Instance.Parameter      := 971;
    #FB_SINA_PARA_S_Instance.Index          := 0;
    #FB_SINA_PARA_S_Instance.ValueWrite1    := 1.0;
 
    #nSchrittkettePara := 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 
        #nSchrittkettePara := 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 
        #nSchrittkettePara := 24; 
        #FB_SINA_PARA_S_Instance.Start  := False; 
    END_IF;


  24:  // Rückmeldung auslesen
    #FB_SINA_PARA_S_Instance.ReadWrite      := 0; //lesen
    #nSchrittkettePara := 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 
        #nSchrittkettePara := 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 
        #nSchrittkettePara := 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
        #nSchrittkettePara := 31;
         #Set_Absolut_ok := 3;
    ELSE
        #nSchrittkettePara := 24; 
    END_IF; 


  31:  // Ende
    #nSchrittkettePara := 0;
 
ELSE  // Statement section ELSE
    ;
END_CASE;


(* --- Aufruf Parametrierung Siemens -- *)


#FB_SINA_PARA_S_Instance();


END_REGION
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht käme hier auch der FB38000 von Siemens in Frage
Nutze ich mit CU320 und 24 S120 Doppelmodulen und Epos.

(FB EncoderAdjustment Entry-ID: 109760317, V1.0, 08/2018)

Gruß
Tom

 
Zurück
Oben