Sinamics S120 CU320 Parameter per SFB53 schreiben

elifendt

Level-1
Beiträge
94
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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.
 
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!
 

Anhänge

  • sfb53.jpg
    sfb53.jpg
    21,9 KB · Aufrufe: 70
  • DB_SFB52.jpg
    DB_SFB52.jpg
    89,8 KB · Aufrufe: 67
  • sfb52.jpg
    sfb52.jpg
    23,6 KB · Aufrufe: 54
  • DB_SFB53.jpg
    DB_SFB53.jpg
    73 KB · Aufrufe: 61
Hab so gemeint: Der Ausgang STATUS steht während dem Schreibvorgang auf 700200, wenn dieser beendet ist, steht STATUS auf 700000.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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...
 
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. ;)
 
Zuletzt bearbeitet:
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...
 

Anhänge

  • Lesen.jpg
    Lesen.jpg
    62 KB · Aufrufe: 33
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 

Anhänge

  • DB_SFB52_neu.jpg
    DB_SFB52_neu.jpg
    75 KB · Aufrufe: 38
Zuletzt bearbeitet:
Das Auslesen ist meiner Meinung nach zweitrangig.
Erst wenn klappt! Vorher brauchst Du das zur Diagnose.


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:
Code:
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.

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.
 
Zuletzt bearbeitet:
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.

DB+FC.jpg

Danke im Voraus schon mal.

Grüße
elifendt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 
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.
 

Anhänge

  • Par_zugr.zip
    37,8 KB · Aufrufe: 26
  • Der FB 20.pdf
    74,1 KB · Aufrufe: 27
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.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
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...
 
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
 
Zuletzt bearbeitet:
Zurück
Oben