# Sinamics S120 CU320 Parameter per SFB53 schreiben



## elifendt (16 Juli 2012)

Hallo Antriebsfreunde,

ich bin gerade dabei einen Parameter der nicht auf einem Telegramm aufgelegt ist, per SFB53 zu ändern. 
Hab dabei allerdings ein paar Probleme. Bist jetzt hab ich folgendes: 

      CALL  SFB   53 , DB53
       REQ   :=M10.0
       ID    :=DW#16#1FED
       INDEX :=47
       LEN   :=16
       DONE  :=M11.2
       BUSY  :=M10.1
       ERROR :=M11.1
       STATUS:=MD14
       RECORD:=P#DB1.DBX0.0 BYTE 16
      SET   
      U     M     10.1                  
      R     M     10.0                 

Zu meinen Fragen: Muss ich immer einen DB mit 16 Byte erstellen zur Übergabe? Was geb ich bei Index an (soll ja glaub die Datensatznummer eingetragen werden, aber woher weiß ich die)? Ist die ID die Diagnose-Adresse der CU oder der einzelnen Achse?

Eigentlich will ich ja nur den Parameter p2587 - Verfahrweg per SPS verstellen. Vielleicht gibts da auch schon spezielle Vorlagen dafür. 

Wäre echt dankbar wenn mir jemand von euch helfen könnte!

Gruß
elifendt


----------



## miami (16 Juli 2012)

Schau dir dies mal an: http://support.automation.siemens.com/WW/view/de/29157692
Die Länge des DBs hangt von der Anzahl der zu übertragenden Parameter und derenFormat (BOOL, INT, WORD, REAL, etc.) ab.

Zumindest beim G120 kann man statt der PAP- auch die Peripherieadresse am SFB 52/53 verwenden.
Du solltest auch mit SFB53 die Antwort des Umrichters lesen.


----------



## elifendt (17 Juli 2012)

Danke für die Antwort. Die Anleitung hab ich bereits, allerdings steht dort auch nirgendwo, was als "INDEX" angegeben werden soll (oder ich find es nur nicht...).

Irgendwie funktioniert es einfach nicht, den Parameter p2587 zu verändern. 

      U     M    906.0
      =     L      6.0
      BLD   103
      CALL  SFB   53 , DB53
       REQ   :=L6.0
       ID    :=DW#16#1FFB
       INDEX :=47
       LEN   :=16
       DONE  :=
       BUSY  :=
       ERROR :=
       STATUS:=
       RECORD:=P#DB1550.DBX0.0 BYTE 16
      NOP   0

Als ID hab ich die Diagnose-Adresse der einzelnen Achse (nicht CU) angegeben. INDEX vermute ich das 47 passt. LEN die Länge meines DB1550 und das wars auch schon. 

Den DB1550 hab ich wie in der Vorlage verwendet. Folgende Werte hab ich darin gespeichert:
Anforderungsreferenz: 1
Anforderungs-ID: 1
Achse: 1
Anzahl der Parameter: 1
Attribut: 10
Anzahl der Elemente: 1
Parameter: A1B (für Parameter p2587)
Subindex: 0
Format: 7 (da Parameter p2587 ein Unsigned32 ist)
Anzahl der Werte: 1
Param_Wert: Word - W#16#500

Sieht irgendjemand meinen Fehler? Ich bekomme auch immer das Done Signal als Ausgang und am STATUS - Ausgang den Wert 16#00700200, was glaub ich soviel bedeutet das eigentlich alles ok ist und das der Wert geschrieben worden ist. Im Starter kommt allerdings nichts an!

Danke schonmal!

Grüße
eli


----------



## miami (17 Juli 2012)

Der INDEX am SFB52/53 ist immer 47.

Der SFB53 sagt dir nur, dass der Datensatz abgeschickt werden konnte, ob der Umrichter damit was anfangen kann weisst Du nicht. Dazu musst Du den SFB52 aufrufen und die Antwort des Umrichters lesen.

Die Parameternummer habe ich als INT definiert und dezimal angegeben.
Wenn P2587 Unsigned32 ist, dann must Du den Wert als DWORD definieren (DW#16#500)

Poste mal deinen DB1550 und den DB mit der Antwort.


----------



## elifendt (17 Juli 2012)

Danke, das war schon mal der erste Fehler meinerseits! Aber es funktioniert immer noch nicht, leider. 

Hier mal die zwei Aufrufe mit den entsprechenden DBs. Vielleicht hilft das dir / euch ja weiter. Wär echt super!


----------



## ChristophD (17 Juli 2012)

Hi,

STATUS - Ausgang den Wert 16#00700200 bedeutet meines Wissens nach das der Auftrag noch aktiv ist und läuft.

Gruß
Christoph


----------



## elifendt (17 Juli 2012)

Hab so gemeint: Der Ausgang STATUS steht während dem Schreibvorgang auf 700200, wenn dieser beendet ist, steht STATUS auf 700000.


----------



## ChristophD (17 Juli 2012)

Hi,

ok dann passt das.
Steht bei Error was drinne außer 0?


----------



## elifendt (17 Juli 2012)

Hab den Ausgang ERROR mal auf einen Setze-Merker gelegt. Dort kommt nie was anderes als 0 raus. Irgendwie schreibt er ja auch was, aber wohin kapier ich irgendwie nicht...


----------



## miami (17 Juli 2012)

Dein 2. Bild (online) zeigt ja die Antwort vom Umrichter. Die ist aber die auf einen Leseauftrag!
Bitte ändere die Auftragsreferenz, damit der Antrieb sicher erkennt, dass ein neuer Auftrag vorliegt.
Es wäre auch hilfreich den Antwort-DB so anzulegen, dass man direkt die Antwort lesen kann (und nicht einfach die Stuktur vom Schreib-DB drüberstülpen!) Am besten den Antwort DB immer wieder neu runterladen (am besten mit mit Nullern oder FF) und dann den Request am SFB52 anlegen, dann siehst Du wenn was reingeschrieben wurde. 

Ich finde übrigens, die Beschreibung des S120 (Kap. 10.1.4) schlechter, als die Beschreibung des G120 (Kap. 7.2.6). Ich denke, dass bis auf die Achsnummer, die beim G120 immer 1 ist, eh alles das gleiche ist. 

Ich habe noch ein Beispiel ausgegraben, hier habe ich allerdings eine Struktur im Instanz-DB statt eines globelen DBs verwendet; dafür ist es aber für den S120.


----------



## elifendt (18 Juli 2012)

Danke für deine Antwort. 

Das Auslesen ist meiner Meinung nach zweitrangig. Ich kann ja im Starter wenn ich online bin nachschauen ob der Wert angekommen ist oder nicht, darum hab ich mich mit dem Auslesen nicht so intensiv beschäftigt. Aber meiner Meinung nach muss ich beim Auslesen (mit SFB52) den DB an der Stelle Anforderungs_ID mit auslesen beschalten werden, oder ist das falsch? Und im Kapitel 7.2.6.2 ist der DB so beschrieben fürs Lesen wie ich ihn hab (siehe Anhang). Ist das trotzdem verkehrt? 

Den Unterschied zwischen dem Uhrzeit-synchr Projekt und meinem Aufruf vom SFB53 seh ich auch nicht. Im Gegenteil, eigentlich ist er fast identisch. Vielleicht ist es auch noch zu früh am morgen und ich sehs einfach noch nicht. Ich such mal weiter...


----------



## elifendt (18 Juli 2012)

so kaum eine Stunde später - nach dem 1. Kaffee - und schon kapier ich mehr. Also jetzt schaut mein Auslese-DB wie im Anhang aus.

Was muss ich denn jetzte eigentlich beim Aufruf von dem SFB53 bei ID angeben? Ich arbeite mit ProfiNet und würde dort einfach die Diagnose-Adresse von der zugehörigen Achse angeben. Passt das denn?


----------



## miami (18 Juli 2012)

elifendt schrieb:


> Das Auslesen ist meiner Meinung nach zweitrangig.


Erst wenn klappt! Vorher brauchst Du das zur Diagnose.




elifendt schrieb:


> Aber meiner Meinung nach muss ich beim Auslesen (mit SFB52) den DB an der Stelle Anforderungs_ID mit auslesen beschalten werden, oder ist das falsch? Und im Kapitel 7.2.6.2 ist der DB so beschrieben fürs Lesen wie ich ihn hab (siehe Anhang). Ist das trotzdem verkehrt?


Da ich nicht sicher bin, ob ich deine Formulierung verstanden habe (ich hatte noch keinen Kaffee), formuliere ich es mal selber:
Du musst mit dem SFB53 einen Auftrag an den Umrichter senden und solltest/kannst dann mit dem SFB52 die Antwort lesen.
Der Antrieb antwortet auf jeden Auftrag mit einer Antwort. Dabei kannst Du die Antwort ruhig in einen eigenen DB schreiben.

Dein neuer Screenshot zeigt, dass der Umrichter den Schreibauftrag nicht ausführen konnte, hier meine Interpretation:

```
01 
82 -> Schreibauftrag nicht vollständig erledigt
03
01 -> Ein Parameter konnte nicht beschrieben werden
44 -> Dieser Parameter hat den Fehler *
02 -> Anzahl der Fehlerwerte 
0005 -> Fehlerwert 1 (Falscher Datentyp)
0000 -> Fehlerwert 2 

* Wenn der Auftrag mehrere Parameter beschreibt, dann steht in der Antwort für jeden Parameter das Ergebnis, 
es sei den alle waren erfolgreich, dann erfolgt nur die Quittierung mit "02" in Byte 2.
```
Das Ergebnis verwirrt mich, das bei einem falschen Datentyp nur ein Feherwert ausgegeben werden sollte.



elifendt schrieb:


> Was muss ich denn jetzte eigentlich beim Aufruf von dem SFB53 bei ID angeben? Ich arbeite mit ProfiNet und würde dort einfach die Diagnose-Adresse von der zugehörigen Achse angeben. Passt das denn?


Ich habe bisher immer die IO-Adresse verwendet. Ich hatte Kontakt mit dem Autor der Applikation zum Parameerzugriff under sagte mir, es gehe sowohl die IO als auch die PAP Adresse. Mit PAP ist dabei wohl die Diagnoseadresse gemeint.


----------



## elifendt (14 September 2012)

Hallo, 

entschuldigung das ich mich so lange nicht gemeldet habe. Bin jetzt aber wieder dran das Problem zu lösen. 
Versuch gerade den Parameter 2587 (A1B) auszulesen. Allerdings bekomme ich immer die Fehlermeldung bzw. Status: DW#16#DE80C200. Gibts irgendwo eine Liste mit den Fehlern und den Interpretationen oder kann mir jemand sagen, was dieser Status bedeutet? 
ich hab als Anhang den Aufruf vom SFB52 und den dazugehörigen DB angehängt. 




Danke im Voraus schon mal.

Grüße
elifendt


----------



## elifendt (14 September 2012)

Habe gerade im Netz folgendes Skript gefunden: 
http://cache.automation.siemens.com...8566021_FAQ/38566021_NET_topology_SFB52_d.pdf

Bei mir ist es so aufgebaut, das ich über eine CP343-1 Lean auf einer CPU317F hänge und an dieser ist meine CU320PN angesteckt. Das heißt, dass ich mit dem FB52 und FB53 anstatt dem SFB52 und SFB53 arbeiten muss (siehe letzte 2 Seiten auf dem PDF). Kann mir das jemand bestätigen? Hat jemand damit schon Erfahrung?


----------



## miami (14 September 2012)

1. Du musst erst mit SFB 53 einen Leseauftrag an den SINAMICS senden, und dann kannst Du mit SFB52 die Antwort lesen!
SFB53 sendet den Auftrag an den SINAMICS, z.B. den Leseauftrag für P3587. Quittiert er dies positiv, heist das nur, dass der Datensatz erfolgreich übertragen wurde!
Die Antwort musst Du dann mit dem SFB52 lesen. Auch hier quittiert der SFB nur die erfolgreiche Übertragung. Du musst dann den übertragenen Datensatz auswerten und ihr z.B. den übertagenen Parameterwert entnehmen.
Ich verwende übrigens immer die I/O Adresse am Anschluß ID, Du scheinst die Diagnose Adresse zu verwenden, sollte aber beides gehe.


2. Die Fehlermeldungen kannst Du analysieren, wenn Du den Aufruf des SFB5x markierst, und F1 drückst. Dann findest Du die Onlinehilfe zum SFB5x.
Ganz am Ende findest Du den Hinweis/Link, dass der STATUS beim SFB54 erläutert ist. Dort findest Du (relativ weit hinten) die Fehlerinformatioen (STATUS[x]).
16#DE80C200 bedeutet demnach:
DE Fehler beim Datensatzlesen
80 Fehler nach IEC...
C2 Resource beschäftigt 
00 (egal)


Ich habe mal ein BSP beigefügt, dass ich für den G120 erstellt habe. Wenn Du die Antriebsobjektnummer in Byte 2 einträgst, dann solltest Du damit die Hoch und Rücklaufzeiten (und 16 Fehlermeldungen) auslesen können (DB 101 senden und mit DB103 empfangen) . Vergiss nicht im OB1 den Anschluß "Address" an deine Konfiguration anzupasssen. Mit steigender Flanke an START geht es los... 

Den Aufbau der Aufträge und Antworten findest Du hier: http://support.automation.siemens.com/WW/view/de/59737625 Kap.10.1.4. Da steht auch wie Du die Antriebsobjektnummer bestimmst.


----------



## miami (14 September 2012)

elifendt schrieb:


> Habe gerade im Netz folgendes Skript gefunden:
> http://cache.automation.siemens.com...8566021_FAQ/38566021_NET_topology_SFB52_d.pdf
> 
> Bei mir ist es so aufgebaut, das ich über eine CP343-1 Lean auf einer CPU317F hänge und an dieser ist meine CU320PN angesteckt. Das heißt, dass ich mit dem FB52 und FB53 anstatt dem SFB52 und SFB53 arbeiten muss (siehe letzte 2 Seiten auf dem PDF). Kann mir das jemand bestätigen? Hat jemand damit schon Erfahrung?



Kannte bisher nur die Aussage, SFB52/SFB54 funktionieren nur auf den lokalen Schnittstellen. Von FB52/FB53 wusste ich bisher nichts.


----------



## elifendt (14 September 2012)

das war wohl ein Schnellschuss. Ich hab ja meine CU an der CPU hängen und somit keine CP dazwischen... Ich geh ja nur über die CP auf die CPU. Sorry... 

Was mein Problem, dass das Auslesen nicht funktioniert nicht löst...


----------



## miami (14 September 2012)

elifendt schrieb:


> das war wohl ein Schnellschuss. Ich hab ja meine CU an der CPU hängen und somit keine CP dazwischen... Ich geh ja nur über die CP auf die CPU. Sorry...
> 
> Was mein Problem, dass das Auslesen nicht funktioniert nicht löst...


OK, dann sollte mein FB funktionieren.


----------



## elifendt (19 September 2012)

So, ich bin gerade dabei deinen FB20 einzubinden! Erstmal Herzlichen Dank dafür! 

Jetzt les ich Parameter aus, die ich quasi im DB101.DBB6 eingebe. Wenn ich allerdings öfters den gleichen Wert auslese (im übrigens ziemlich egal welchen) kommen immer die Werte: 160000; FFFF0401 oder der Fehler 8003 raus. Also ich bekomm nicht immer das gleiche Ergebnis, wenn ich immer den selben Parameter auslese. Hast du das Problem auch schon mal gehabt? Und weiß du dazu eine Lösung?

Ach ja, wenn der Fehler kommt, dann steht im Instanz-DB unter RD_REC_STATUS: DE80C200


----------



## miami (19 September 2012)

elifendt schrieb:


> Jetzt les ich Parameter aus, die ich quasi im DB101.DBB6 eingebe.


Ja da wird die Nummer des ersten zu lesenden Parameters eingetragen.


elifendt schrieb:


> Wenn ich allerdings öfters den gleichen Wert auslese (im übrigens ziemlich egal welchen) kommen immer die Werte: 160000; FFFF0401 oder der Fehler 8003 raus. Also ich bekomm nicht immer das gleiche Ergebnis, wenn ich immer den selben Parameter auslese. Hast du das Problem auch schon mal gehabt? Und weiß du dazu eine Lösung?
> 
> Ach ja, wenn der Fehler kommt, dann steht im Instanz-DB unter RD_REC_STATUS: DE80C200



Hast Du das mehrfach am laufen? Also ich habe bisher das Lesen nur per HMI oder Wertetabelle getriggert, vlt. braucht der SINAMICS etwas Ruhe zwischen den Aufgträgen?


> DE80C200= resource busy; The module currently processes the maximum possible jobs for a CPU.



Wo stehen denn die 160000 und FFFF0401? Kannst Du mal die beiden zusammengehörenden DBs posten?


----------



## elifendt (19 September 2012)

Ich les die Parameter mit einem Merker in der Variablen Tabelle aus. Ist nicht ständig, sondern von mir per Hand angestoßen. 
Die Werte stehen im DB103.DBD6. 
Ich hab die DB´s und den FB-Aufruf als Bild angehängt.


----------



## elifendt (19 September 2012)

Hab noch was festgestellt: 
Wenn nur done kommt, dann kommt als Ergebnis im DB103.DBD6  FFFF0401 raus
Wenn dagegen done und drive_error ansteht kommt als Ergebnis 160000 raus. 
Hab nur durch den done, den Start wieder abgelöscht und hab nicht gesehen, das gleichzeitig auch noch der drive error sporadisch kommt.


----------



## miami (19 September 2012)

Du solltest entweder den Auftrags DB auf die tatsächlich benötigte Länge kürzen (A_2_... und A_3_... löschen), oder drei Parameter anfordern. Da mein FB immer den gesamten DB zum Antrieb sendet und evt. hat der Sinamics ein Problem damit.
Ist die DO (Antriebs Objekt) Nummer richtig? 
Bitte beachte, dass im Antwort-DB nur die empfangenen Daten überschrieben werden und evt noch Reste von vorherigen Empfang folgen können. Ggf. solltest Du den DB vorher mit 00 überschreiben.


Meine Analyse der Antwort: 

01
81 Auftrag mit Fehler beendet
00
01 
44 Fehler bei diesem Parameter (Du hast ja nur einen angefragt)
02 Anzahl Fehlerwerte
00 unzulässige Parameternummer
16 Parameteraddresse unzulässig

Ich finde in der Anleitung zum G120 ist die Fehlerantwort besser beschrieben und habe dir die beiden Seiten beigefügt.

Die Struktur meines Antwort-DBs gilt natürlich nur für die erfolgriche Übertragung von 2 REAL und 16 INT Werten. Bei Fehler oder anderen Parameterformaten musst Du das selber interpretieren, nur die Struktur im Header (H_...) passt immer.


----------



## miami (19 September 2012)

elifendt schrieb:


> Hab noch was festgestellt:
> Wenn nur done kommt, dann kommt als Ergebnis im DB103.DBD6 FFFF0401 raus.



Für den P201 (Leistungsteil Aktueller Typ) erwarte so was wie 

00 Referenz
01 Leseauftrag erfolgreich
00 DO Nummer
01 Anzahl Parameter
06 Format: unsigned16 (also WORD)
?? Anzahl der Indexwerte (vermutlich 01, aber evt. werde ja alle Motormodule genannt)
64 Wert des Parameters (100Dez = S120, wenn ich die Parameterliste des S120 richtig interpretiert habe)

evt. folgen noch weitere Werte, wenn tatsächlich mehrere Motormodule ausgegeben werden sollten.



elifendt schrieb:


> Wenn dagegen done und drive_error ansteht kommt als Ergebnis 160000 raus.


Dann wurde der Auftrag bearbeitet, aber der Umrichter hat einen Fehler gemeldet, 
Vlt. hast Du ja auch ein Problem mit der Zugriffsstufe ???



elifendt schrieb:


> Hab nur durch den done, den Start wieder abgelöscht und hab nicht gesehen, das gleichzeitig auch noch der drive error sporadisch kommt.


Ich würde START erst löschen wenn ich die Antwortbits analysiert habe.


----------



## elifendt (19 September 2012)

Danke für deine Antworten, aber irgendwie komm ich nicht weiter. Hab mal meine DB´s angepasst auf die Länge von einem Wert. 
Wenn ich aber das Auslesen anstarte über den FB20 dann spiegelt er mir obwohl er ja den done ausgibt nicht mal mehr die Reference. Ich hab mein Beispiel nochmals angehängt. 
Ich würde gern den Parameter p2587 - EPOS Tippen Verfahrweg auslesen. Dabei handelt es sich um einen Unsigned32, quasi ein DW. Was meiner Ansicht nach auch passen müsste. Wo könnte denn noch ein Fehler sein???


----------



## miami (19 September 2012)

Also, ich habe eben mit meinem G120 nochmal getestet. Um möglichst gleich mit Dir zu sein, habe ich P18 ausgelesen, das ist der FW Version, die liegt auch in unsigned32 vor.

Anbei das Projekt (STEP 7 V5.5 SP2, STARTER V4.3.1.2, WinCC flex 2008 SP3 (habe ich aber aus dem Projekt gelöscht) )

Nimm mal unverändert das Programm (bis auf die Parametrierung im OB1). Öffne die Wertetabelle und setze START auf 1. Es sollte nur DONE kommen und in Zeile 11 müsste die FW Version zu lesen sein. (Bei mir 4503007dez für die V4.50.3007).
Ich sehe keinen Grund warum das nicht gehen sollte. 

Ich habe auch mal statt der IO-Adresse (256) die Diagnose Adresse (2043 oder 2042) genommen, ging beides auch.


Wenn das klappt, dann ändere die Parameternummer. Vermutlich musst Du auch die die Nummer des Antriebobjektes (in H_Axis) anpassen und dort die deines Motormodules angeben müssen.


----------



## elifendt (19 September 2012)

Danke für deine Bemühungen! Ich werde das Anfang nächste Woche testen und dich wissen lassen ob es funktioniert. (Ich hab spontan noch einen Montage-Ausflug gewonnen und komm erst dann wieder dazu.)=


----------

