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



## goonie (4 Januar 2015)

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?
Wenn ich den Absolutwert in der  Startermaske setze und RAM->ROM ausführe bleibt der Geber justiert.


----------



## ChristophD (4 Januar 2015)

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


----------



## goonie (4 Januar 2015)

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 nullHuraaaa!!! 

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


----------



## zako (4 Januar 2015)

goonie schrieb:


> 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


----------



## goonie (5 Januar 2015)

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.


----------



## srosenbe (11 Januar 2015)

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


----------



## zako (11 Januar 2015)

.... hast Du  einen Multiturnabsolutwertgeber , oder einen Singleturnabsolutwertgeber?
sind die Mechaniken gleich?
Gleicher Offset?
Linear oder Rundachse?
Hast Du mit Lageverfolgung ausprobiert?


----------



## Draco Malfoy (12 Januar 2015)

--->> 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


----------



## Knaller (13 Januar 2015)

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


----------



## StGo (26 Mai 2016)

Muss das hier für nochmal aufgreifen...



goonie schrieb:


> Hallo ChristophD
> 1. p2507 mit sfb53 auf 2 geschrieben,Objekt=2(Antrieb)
> 2. sfb52 bis p2507=3 meldet
> 3. p977=1,Objekt=1(Controller)
> ...



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


----------



## Ralle (6 September 2018)

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?


----------



## Howard (6 September 2018)

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


```
#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


```
#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

```
#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.


----------



## Ralle (6 September 2018)

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?


----------



## Ralle (6 September 2018)

So, es funktioniert nun. p971 reicht aus.

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




```
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
```


----------



## rs90 (9 April 2019)

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


----------



## Blockmove (9 April 2019)

Wow ... Da lernt man SEW zu schätzen


----------

