Step 7 840D sl NCU Variablen und Antriebsparameter lesen/schreiben

Hallo Zusammen,

ich stehe aktuell auch vor dem Problem die Sinamics Antriebsparameter mit dem AGLink auslesen zu wollen. Beim Zugriff, u.A. auf den Parameter r0035 (AreaFeedDrive und Block M) mittels NCK_Demo.exe bekomme ich leider auch stets nur eine 0 als Wert zurück, alle Datenbytes zeigen 0 an.
Ich habe unterschiedliche Werte für den Unit-Parameter getestet, dieser scheint dem Achs-Index zu entsprechen.. kann das jemand bestätigen?
Wenn ich einen Wert verwende, dem keine Achse zugeordnet ist bekomme ich eine Fehlermeldung, ansonsten immer die 0...

@ Rainer Hönle:
Ist die oben diskutierte Funktion zum Umwandeln der Codierung der Antriebsparameter in der AGLink Version 4.7.0.7 (Demoversion, heruntergeladen ca. im Oktober 2015) schon integriert? Falls nein, könnte ich bitte auch das entsprechende Update bekommen? Danke!
 
Die Funktion sollte in der Version schon drin sein.
Zum Lesen von der Sinamics allerdings nicht die NCK- sondern die Drive-Funktionen verwenden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Verstehe ich das richtig: Ich kann die Antriebsparameter entweder mit der Drive Funktion von den Antrieben lesen, wenn ich eine direkte Verbindung zu diesen aufbaue oder aber mit der NCK-Read Funktion wie andere NCK Variablen auch über die Verbindung zur NC? Danke!
 
Das würde bedeuten, dass ich bei einer Maschine mit 8 Antrieben plus Sinumerik 840D (NCK und PLC) insgesamt 10 Verbindungen öffnen müsste um alle Daten auslesen zu können..?!
Aktuell stelle ich die Verbindung via S7 / TCP direkt mit der NCU her, dazu habe ich deren IP Adresse und den Slot (2 für PLC, 3 für NCK) eingestellt, das Auslesen von PLC und NCK Variablen funktioniert so schon.
Wie müsste ich denn die Verbindung konfigurieren um mich direkt mit einem Antrieb zu verbinden? Geht das überhaupt ohne Weiteres via Ethernet, oder sind dazu Adapter bzw. Gateways nötig?

Die Parameter der Antriebsobjekte und der Einspeisung (bzw. ALM) kann ich ja am HMI unter Inbetriebnahme --> MD --> Antrieb MD bz. Einspeisung MD anzeigen lassen. Daher sollten sie ja auch irgendwo in der NCU vorhanden sein, oder?
Die ebenfalls dort angezeigten Allgemeinen MD's, die MD's der Achsen und Kanäle kann ich problemlos über den NCK-Zugriff auslesen (AreaAxis, AreaChannel oder AreaNCK und Block M), aber nicht die der Einspeisung und der Antriebe...

Nach den hier im Thread genannten Infos zum Zugriff auf die Motortemperatur (r0035) ging ich davon aus, dass es mit den Antriebsdaten ebenso gehen sollte wie mit den anderen MD's...
Siehe Beitrag #25

Für AGLink muss man bereich_u_einheit in Breich und Einheit zerlegen


aus bereich_u_einheit = 0xA1 =>0b10100001
Bitmaske: aaauuuuu
a = bit [5-7] Area ==> 0b101 => 5
aus der Datei AGL_Defines.h im enum NCK_Area ergibt AGLink.Area = eNCK_AreaFeedDrive
u = bit [0-4] Unit ==> 0b00001 => 1
ergibt die AGLink.Unit = 1

Spalte = 0x23 => AGLink.Column: 35
Zeile = 1 => AGLink.Row = 1

bausteintyp => 0x1A
aus der Datei AGL_Defines.h im enum NCK_Block ergibt AGLink.Block = eNCK_BlockM

typ == 0x8 => eNCK_MDB_Float32

damit kannst du jetzt mit API-Guide die Variable lesen

Diese Parameter kann ich ja bei der Lese-Funktion für die Antriebe garnicht angeben..?! Passen aber zur NCK-Read-Funktion..?!
Versteh das noch nicht so wirklich...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es sollte per AGLink ueber die NC gehen - ich denke Rainer hat dich nur falsch verstanden

mach am besten ein Wireshark-Log wie in #33 von den Variablen mit ein paar Orientierungswerten damit man die Variablen im Log finden kann
 
Ok, danke für die Antwort, ich werde das mit den Wireshark-Logs morgen ausprobieren.
Hoffe dass ich das mit der Anleitung aus diesem Thread hin bekomme, hab da keine Erfahrung. Melde mich dann mit den Logs wieder!
 
@Rainer

Liefern denn die Drive-Funktionen andere Werte als die NCK-Funktionen?

ich bin mir nicht sicher ob die Drives-Parameter-Nummern unbedingt zu den NC-Maschinendatum-Nr passen

am einfachsten ist wohl Wireshark zu starten, und dann direkt auf die HMI-Seite mit dem gewünschten MDs zu wechseln, Werte im HMI anschauen (und zum finden im Log aufschreiben) - dann kann der Rainer oder Thomas relativ schnell sagen welche Variablen es sind - oder was falsch läuft
 
So, anbei der Wireshark Mitschnitt...
Abgefragt habe ich mithilfe der NCK_Samples.exe die Motortemperatur (r35) des Antriebs der X-Achse (Index bzw. Unit = 1) und im 2. File der Spindel (Index bzw. Unit =8) .

Folgende Einstellungen:
Area: eNCKFeedDrive
Block: eNCK_BlockM
Länge: 4 (Byte)
Spalte: 35
Zeile: 1
Zeilenanzahl: 1
Einheit: 1 bzw. 8
DDE-Typ: eNCK_LE_Float32
MDB-Typ: eNCK_MDB_Float 32

Ergebnis war:
Datenbytes: 0,0,0,0
Wert: 0

im Wireshark Trace finde ich
Data: 41b5999c bzw. 419b3331
Keine Ahnung was das genau bedeutet bzw. wie ich da eine brauchbare Zahl rausbekommen soll, vermutlich jedenfalls nicht 0...
Das HMI Zeigt für die Motortemperatur 19,4 °C bzw. 22,7 °C an.

Außerdem habe ich die selbe Abfrage für Unit 4 gemacht. In meiner Maschine gibt es keine Achse mit dem Index 4, die Abfrage liefert einen unbekannten Fehler, Siehe Trace.

Könnte mir bitte noch einer von euch erklären was es mit den 2 Datentypen DDE / MDB auf sich hat? Bzw. für was ich die unterschiedlichen Endian-Kodierungen brauche? Danke für eure Hilfe!
 

Anhänge

  • Traces.zip
    2,6 KB · Aufrufe: 11
#1
Die Werte sind also da, nur werden sie nicht richtig dargestellt bzw. umgewandelt.
ja das passt so mit den Float-Werten

#2

bekommst du das gleiche Verhalten wie von NCK_Samples auch in deinem eigenen Code?
Zeig mal ein Minimal-Source-Beispiel/Auszug deiner Verarbeitung


#3
Außerdem habe ich die selbe Abfrage für Unit 4 gemacht. In meiner Maschine gibt es keine Achse mit dem Index 4, die Abfrage liefert einen unbekannten Fehler, Siehe Trace.

Was ist genau der AGLink-Fehlercode? im Protokoll sehe ich als Fehler-Class/Code (0x82/0x01) - sieht aber OK aus - es gibt keinen besonderen Fehlercode fuer nicht vorhanden - oder eher ein paar Varianten die auftauchen können
 
In meinem eigenen Programm hab ich's noch nicht ausprobiert, die muss ich erst noch anpassen.. werde ich gleich testen.
Der Fehlercode lautet: "Unbekannte Fehlermeldung vom AG (bitte melden!)"
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In meinem eigenen Programm hab ich's noch nicht ausprobiert, die muss ich erst noch anpassen.. werde ich gleich testen.

könnte mir vorstellen das im NCK_Sample ein Fehler drinn ist - bitte auch einen kurze Auszug aus deinem Code (C, C++, C#?) damit man sehen
kann ob du es richtig machst

"Unbekannte Fehlermeldung vom AG (bitte melden!)"

Dann gibt es dafür noch keinen spezifischen AGLink-Fehlercode - ist aber nicht schlimm
 
Ich habe es nun mit meinem eigenen Programm getestet, mit dem selben Ergebnis.
Der Code ist:

Code:
NCKDataRW RWNCK[1];       // Array mit RWNCK Strukturen
LPNCKDataRW pRWNCK;      // Pointer auf RWNCK Struktur

byte *pOut[1];                     // Array mit Pointer auf den Byte Puffer
pRWNCK = &RWNCK[1];       // Pointer auf RWNCK Struktur


// RWNCK Struktur initialisieren
pRWNCK->DDEVarType = eNCK_LE_Float32;
pRWNCK->BuffLen =4; 
pOut[1]= (byte*)calloc(pRWNCK->BuffLen, sizeof(byte));
pRWNCK->Buff = pOut[1];
pRWNCK->Area = eNCK_AreaFeedDrive;
pRWNCK->Block = eNCK_BlockM;
pRWNCK-> Unit = 1;
pRWNCK-> Row = 35;
pRWNCK-> Line = 1;
pRWNCK-> LineCount = 1; 

// NCK Abfragen 
int RetValNCK = AGL_NCK_ReadMixEx (pParasNCK->ConnNr, RWNCK, 1,1,0);

// CSV Datei für Ausgabe erstellen
ofstream output;
output.open(test.csv, ios::out | ios::app);

if (RetValNCK == AGL40_SUCCESS)
{
      output << &pOut[1];
}
else 
{
      output << "ERROR";
}

Die Werte die in der CSV Datei stehen sind auch immer 0. Wobei ich mir hier nicht sicher bin, wie ich korrekter weise eine Float-Zahl aus dem Hex-Wert im Byte-Puffer bekommen kann...
Ich habe die Abfragen mit Wireshark überprüft, die Anfragen werden richtig gesendet und es kommen auch wie vorher die richtigen Werte zurück, es sollte also am Puffer bzw. der Konvertierung liegen.


Ein weiterer seltsamer Fehler: Wenn ich mehrere Antriebs-Variablen aus der NCK abfrage, bekomme ich für alle den Wert der 1. abgefragten Variable.
Beispiel: Ich habe die Motortemperatur (r35) für die Achsen X (unit = 1) Y (unit = 2) und Z (unit = 3) abgefragt.

Werden die Werte einzeln aus der Steuerung gelesen erhalte ich für alle 3 unterschiedliche Werte, die den im HMI angezeigten entsprechen (z.B. 19,4 °C für die X-Achse, 23,5°C für die Y-Achse und 24,8°C für die Z-Achse. Also prinzipiell sind die Werte vorhanden und können ausgelesen werden.
Starte ich nun aber eine NCKReadMixEx Abfrage mit allen 3 auf einmal, bekomme ich für alle 3 Variablen den gleichen Wert, nämlich den ersten gelesenen (hier 19,4 der X-Achse).
Dies konnte ich sowohl mit der NCK_samples.exe als auch meinem eigenen Code reproduzieren.

Mehr noch: Wenn ich bei der NCKReadMixEx Abfrage zuerst einen ganz anderen Bereich lese (ich habe testweise den Namen des NC-Programms gelesen), bekomme ich im Wireshark Log bei den r35 Werten (allen 3) die Fehlermeldung: "Object does not exist" und garkeine Werte zurück...

Siehe die Traces. Anhang anzeigen Traces2.zip
 
Zuletzt bearbeitet:
Zurück
Oben