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

Zuviel Werbung?
-> Hier kostenlos registrieren
@Hans54216: Den Typ der in der Antwort kommt, habe ich noch nicht implementiert. Werde dies nachholen. Kannst Du mir per PN eine Emailadresse schicken, an die ich dann die Version zum Testen mailen kann? Ich hoffe, ich komme heute noch dazu ansonsten hast Du die Version morgen.
 
sieht aus als ob die Werte von den Drives Endian-Verdreht kommen

Code:
byte[] Buff = { 65, 183, 210, 16 };
Array.Reverse(Buff);
float value = BitConverter.ToSingle(Buff, 0);
 
Ja, hab ich mir auch gedacht. Nach dem Umkehren des Arrays passt der Wert.

Umwandeln des Buffer zum Ausgabewert erfolgt aber normalerweise durch das AGLink per "CreateString".
 
Zuviel Werbung?
-> Hier kostenlos registrieren
LLM scheint recht zu haben. Die "internen" NC-Variablen haben eine andere Byteorder als die "externen" Antriebsvariablen. Kannst Du mal Test machen, ob dies auch bei den anderen Typen (Word, Dword, Int, UInt, ...) in den Blöcken 0x80 bis 0x85 der Fall ist? Dann kann ich ein automatisches Drehen einbauen.
Oder weiß einer hier im Forum etwas darüber, in welchen Bereichen (oder bei welchen Typen) die Drehung erfolgen muss?
 
Hab es nur für Block 0x82 getestet. Typen: int16, int32, uint32, float

Da musste der Puffer jeweils umgekehrt werden.

Lesen/Schreiben scheint somit immer Byte-weise zu funktionieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry - das Wireshark-Log bringt eh nicht soo viel denn AGLink kann die Werte ja schon lesen - muss also die internen Typen schon kennen

wäre schön (und wenn du kaum Zeit/Lust hast reicht auch nur ein int32 in jedem Block) wenn du noch die anderen Blöcke testen könntest
Schonmal Danke für die AGLink-Bug Meldung denk dann an dich wenn ich mal Antriebsdaten lesen muss :)

Und kannst du nochmal genau erklären wo die Variablen-Parameter genau herkommen ich hab die in meinem NC-Varselektor damals nicht gefunden (war irgendeine 2013 Version) - oder
öffnest du eine spezielle Datenbank?
 
Zuletzt bearbeitet:
Mal so nebenbei:
Wie ist denn der Aufbau der Variablen mit dieser Syntax ID 0x82?

Was ich aus den bereitgestellten Logfiles und den Screenshots entnehmen konnte:
Code:
0: Länge 8 bytes
1: aa	a2	??

2: bb	00	
3: bb	02	Parameternummer

4: cc	00
5: cc	01	??

6: dd	82	??
7: ee	01	??
Wäre schön wenn das plugin das auch richtg entschlüsseln könnte. Ich habe leider kein Zugriff auf die entsprechende Hardware.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry - das Wireshark-Log bringt eh nicht soo viel denn AGLink kann die Werte ja schon lesen - muss also die internen Typen schon kennen

Kannst du oder jemand hier schreiben, Screenshots machen, wie ich das Wireshark-Log lesen kann? Speziell wie ich auf den eNCK_Block oder den Rückgabewert z.B. 22.0°C finde.

wäre schön (und wenn du kaum Zeit/Lust hast reicht auch nur ein int32 in jedem Block) wenn du noch die anderen Blöcke testen könntest
Schonmal Danke für die AGLink-Bug Meldung denk dann an dich wenn ich mal Antriebsdaten lesen muss :)

Wenn ich weiß für was die anderen Blöcke sind, kann ich diese Testen.

und was fehlt dir dann noch?

Beispiel:

Code:
V1_M_r0035_35:
   STRUCT
   SYNTAX_ID : BYTE  := B#16#82;
   bereich_u_einheit : BYTE := B#16#A1;
   spalte : WORD := W#16#23;
   zeile : WORD := W#16#1;
   bausteintyp : BYTE := B#16#1A;
   ZEILENANZAHL : BYTE := B#16#1;
   typ : BYTE := B#16#8;
   laenge : BYTE := B#16#4;
   END_STRUCT ;

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

aber man sollte vielleicht noch einen AWL, NCVAr-DB oder var-Quellen-Parser anbieten...

Laut dem Eintrag bist du von Bausteintyp => 0x1A auf eNCK_BlockM gekommen.
Bausteintyp ist auch M. Variable wird aber per eNCK_Block0x82 gelesen.

Hab mir ein bisschen Code geschrieben, der die Werte der .awl Quelle für AGLink umwandelt. Funktioniert aber nur bei NCK oder Kanal MDs. Bei Area Drives scheint Unit und Block anders vergeben zu werden.

Und kannst du nochmal genau erklären wo die Variablen-Parameter genau herkommen ich hab die in meinem NC-Varselektor damals nicht gefunden (war irgendeine 2013 Version) - oder
öffnest du eine spezielle Datenbank?

Ich öffne die normale Datenbank, die beim NC-Var-Selector dabei ist. (ncv_SinamicsServo.mdb)

NC-VAR-Selector.pngncv_SinamicsServo _ Datenbank.png
 
@Hans54216: Kannst Du mit dem NC-Var-Selektor so ein Massen-Export für AWL oder Var-Dateien machen und damit einfach alles exportiert was so da ist. Ich kann dann schauen, ob ich
darin die Blöcke 0x80-0x85 finde und ggf. auf deren Bedeutung schließen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Hans54216: Kannst Du mit dem NC-Var-Selektor so ein Massen-Export für AWL oder Var-Dateien machen und damit einfach alles exportiert was so da ist. Ich kann dann schauen, ob ich
darin die Blöcke 0x80-0x85 finde und ggf. auf deren Bedeutung schließen?
Mit dem NC-Var-Selektor kann man keinen richtigen Massen-Export machen. Mann muss jede Variable einzeln anklicken und zur Auswahl hinzufügen.
Die Auswahl wird dann jedoch in eine Datei exportiert. Inhalt der .var Datei entspricht der Auswahl aus der Datenbank.

Ich schick dir die Datenbanken. Somit hast du jede Menge Maschinendaten. Informationen zu den MDs gibts auf DocOnCD oder DocOnWeb.
 
@hans54216: Habe Dir ein Update von ACCON-AGLink geschickt, in dem die Variablen mit den neuen Typen entsprechend gedreht werden. Bitte mal testen und rückmelden, ob jetzt alles ok ist. Danke.
 
Kannst du oder jemand hier schreiben, Screenshots machen, wie ich das Wireshark-Log lesen kann? Speziell wie ich auf den eNCK_Block oder den Rückgabewert z.B. 22.0°C finde.

Ich habe dir dazu mal eine kleine Anleitung erstellt, ich hoffe es ist einigermaßen nachvollziehbar. Für die Screenshots habe ich das von dir hier im Forum angehängte Logfile verwendet.
 

Anhänge

  • Anleitung Analyse NCK mit Wireshark.pdf
    984,7 KB · Aufrufe: 73
@Rainer Hönle: Hatte heut ein wenig mehr Zeit zum Testen.
Vom Lesen her sieht alles gut aus. Hast du beim schreiben der Variable auch das
Umkehren eingebaut? Buffer muss jedenfalls noch Umgekehrt werden, bevor der Wert richtig ankommt.
 
Habe das beim Schreiben noch nicht eingebaut. Wollte erst abwarten, ob das Lesen funktioniert. Beim Schreiben hab ich allerdings die Herausforderung zu erkennen, ob die Variablen gedreht werden müssen oder nicht. Beim Lesen erkenne ich das am Typ. Beim Schreiben muss ich mir da noch etwas dazu überlegen. Aber da fällt mir sicher noch etwas ein. Es kann allerdings sein, dass ich diese Änderung erst nach der SPS-Messe einpflegen kann.
 
Zurück
Oben