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

Zuviel Werbung?
-> Hier kostenlos registrieren
Du hast recht - "Normale" NCK Abfragen mit mehr als 18 Parametern werden auch gesplittet.
Jedoch keine Zugriffe auf die eNCK_AreaFeedDrive / BlockM, Block0x82, Block0x83...
Woher kommt das denn?!! Ich hatte vermutet, dass das AGLink einfach stur das RW-NCK-Array in 18-Variablen große Stücke teilt, egal welcher Bereich oder Block abgefragt wird.. Aber scheinbar ist dem nicht so? Findet da noch irgendwie eine Optimierung statt?


es werden immer so viele Variablen in eine PDU gesteckt wie reinpassen, bei deinem Test 11 passt sogar noch mehr rein (darum kein Splitting) und von der NC kommt "Wrong kontext" (0x8104) was soviel heisst wie "Mag ich nicht machen"
es sieht nicht so aus als würde AGLink etwas falsch machen (sonst würde es eher Protokoll-Fehler geben) - soweit ich das verstanden habe gibt es keine bereichsbezogene Joberstellung - nur bei der Datenverarbeitung nach dem Response wird Endian-gedreht - aber die NC liefert eh nur einen Fehler, da kommen ja keine Daten

die Drive-Blöcke sind irgendwie "besonders", verhalten sich anders als alle anderen Blöcke mit denen ich so Kontakt hatte
z.B. sind nur die Daten aus den 0x8x-Blöcken Endian-geswappt (alle anderen NC-Blöcke kommen im x86-Format), ich habe hier einen Test der 800 Variablen als ein Auftrag aus den unterschiedlichsten Blöcken ließt (aber eben keine 0x8x-Blöcke) und alles läuft so wie man es erwartet, ich vergleiche die Ergebnisse automatisch mit Single-Reads und alles passt

Es könnte sein das im Drives Bereich die Regel gilt: max 18 Variablen (Ich hab schon mal in irgendeiner Doku gelesen das man NC-Alarme nicht mit anderen Variablen in einer Abfrage mischen darf - so wirkt das hier auch, nur noch mit einer Mengenbegrenzung was sehr verwunderlich ist)

ich schau mal in die Logs

Würde mich schonmal interessieren ob in der aktuellen Version auch noch solche Bugs hat, bzw. wie die sich verhält...

würde mich auch - ein Update muss man glaube ich kaufen
 
Zuletzt bearbeitet:
sind 19 Variablen genau die Grenze? was passiert wenn du 20 Byte oder besser String-Werte(wie finden?) aus dem Antrieb abfragst, geht es dann?
 
@Thomas_v2.1

ja du hast recht - aber dein Dissector zeigt 22 variablen und die pdu groesse stimmt - aus Post #120, Test6_Spinner.pcapng, Paket 54 - macht du keine Prüfung?

Edit: ich war auch kurz verwirrt - ich sage alles ist in Ordnung - nur die NC verhält sich bei diesen Blöcken anders
 
Zuletzt bearbeitet:
@Thomas_v2.1

ja du hast recht - aber dein Dissector zeigt 22 variablen und die pdu groesse stimmt - aus Post #120, Test6_Spinner.pcapng, Paket 54 - macht du keine Prüfung?

Ja, habs oben noch ergänzt.
Nein, es gibt keine Prüfung. Wird über eine Grenze zugegriffen fängt das die Funktion ab welche die Bytes aus dem Puffer holt, und dann gibt es einen Dissector Error. Das ist bei eigentlich Standardvorgehensweise in den dissector-codes. Für solche Unstimmigkeiten im Protokoll wäre das "Expert Info" Feld zuständig (z.B. PDU länger/kürzer als angegeben), ich nutze das aber nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe mir das Log angesehen. Da sollte kein Fehler kommen. Sieht für mich eher aus, wie wenn die NCK hier zusätzliche Einschränkungen bei diesen Bereichen hat. Bitte einmal mit 20 bzw. 21 Variablen testen und das Log einstellen. Dann kann ich sehen, wo die exakte Grenze liegt. Eventuell kann ich das dann in ACCON-AGLink abfangen.
Tritt das bei allen Firmwaren auf oder ist dies firmwareabhängig?
 
d.h. fuer einen Leseauftrag in diesem Bereich könnte gelten:
-alle Variablen müssen die gleiche Unit haben?
-maximal 20 Stück?

die Frage ist:
-ist das bei allen Variablen aus den 0x8x-Bereichen so?
-ist das für jede Firmware gültig (können das neuere vielleicht doch?)
 
hab noch in eine Doku was gefunden

https://cache.industry.siemens.com/dl/files/613/25076613/att_75580/v1/P3_PL_de-DE.pdf

unter: 2.12.2 FB 2: GET NC-Variable lesen

Beim Lesen von kanalspezifischen Variablen dürfen in einem Auftrag (FB 2-Aufruf) über Addr1 bis Addr8 nur Variablen von genau einem Kanal adressiert werden.
...
Bei den Bereichen V bzw. H dürfen nicht verschiedene logische Achsnummern in einem Auftrag zugeordnet werden (bei Nichteinhaltung: Error:= TRUE, State:= W#16#02).

und du bewegst dich ja im V oder H Bereich

und darunter stehen im PFD noch erlaubte Gruppen-Mischungen
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, den letzten Post hab ich verstanden, das davor eher nicht so ganz..
Der Auszug aus der Doku erklärt also, warum in einem Auftrag immer nur eine Unit gelesen werden kann, weil es von Siemens schlichtweg nicht vorgesehen / erlaubt ist. (warum auch immer?)
Außerdem ist offenbar die Anzahl der Variablen, die pro Anfrage von der PLC bzw. NCK gelesen werden können beschränkt, und zwar auf max. 18 Variablen.
Wie mein letzter Test gezeigt hat, splittet AGLink daher Aufträge mit mehr als 18 Variablen in mehrere Anfragen, sowohl bei der PLC wie auch bei der NCK.
Ausnahme: Die V / H Bereiche der NCK.
Aber warum? Kontrolliert die Funktion, die im AGLink das Splitting bewirkt, welcher Bereich abgefragt wird?
Ich bin davon ausgegangen, dass die Aufträge einfach "doof" in 18er Blöcke zerlegt werden, ohne zu berücksichtigen welche Variablen aus welchen Bereichen gelesen werden sollen??!

Ich habe die Tests mal noch etwas erweitert, und teste auch das Verhalten im BlockM, Ergebnisse folgen.
Wäre es dann möglich im AGLink Mechanismen zu integrieren, die dafür sorgen, dass die Maximalzahl von 18 Variablen auch bei V/H nicht überschritten, und keine unterschiedlichen Units in einer Anfrage gemischt werden?
Ich mache das momentan recht umständlich (zahlreiche verschachtelte Schleifen) in meinem Code, was sicher auch zu meinen schlechten Timing-Ergebnissen beiträgt...
 
ACCON-AGLink splittet die Anfrage wenn entweder der Request oder der Response nicht mehr in ein Paket passen würde. Dies sind bei der PLC der NCK 19 Variablen. Die Anfrage einer NCK-Variablen ist pro Variable um zwei Bytes kleiner als die Anfrage eine PLC-Variablen. Deshalb passen bei einer NCK-Anfrage mehr Variablen in einen Request. Bei "normalen" NCK-Variablen scheint dies alles zu klappen. Nur in den speziellen Bereichen scheint es noch weitere Grenzen zu geben. Deshalb auch meine Bitte, einmal 20 und 21 Variablen anzufragen. Denn 19 schein zu klappen, 22 geht schief (obwohl es in den normalen Bereichen gut geht). Wo genau liegt die Grenze? Ist dies firmwareabhängig? Wenn das alles klar ist, kann ich ggf. eine entsprechende Anpassung in ACCON-AGLink einbauen.
Grundsätzlich macht ACCON-AGLink an dieser Stelle, was die Paketgröße anbelangt, alles richtig. Eine "doofe" Zerteilung halte ich nicht für sinnvoll, da die Perfomance leiden wird. Deshalb müssen wir die exakten Einschränkungen wissen.
Ich hoffe, die Zusammenhänge sind jetzt etwas klarer.
 
Ok, den letzten Post hab ich verstanden, das davor eher nicht so ganz..
war nur geschnatter unter Leuten die das Protokoll genau kennen

Außerdem ist offenbar die Anzahl der Variablen, die pro Anfrage von der PLC bzw. NCK gelesen werden können beschränkt, und zwar auf max. 18 Variablen.
1. falsche Annahme von dir

die maximale Anzahl pro PDU-Auftrag(=kleinste Einheit) ergibt sich aus:
1. der groesse einer Variablenanfrage(12 bytes bei PLC, 10 bytes bei NC)
2. der groesse der Daten im Ergebnis (1 Byte bei bool, 4 Byte bei Real, usw.)
d.h. es gibt normalerweise keine feste Grenze sonder ist von der Mischung als auch von den Variablen-Typen abhängig
bei z.B. einem 220 Byte String geht nur eine Variable weil die PDU dann schon voll ist

Wie mein letzter Test gezeigt hat, splittet AGLink daher Aufträge mit mehr als 18 Variablen in mehrere Anfragen, sowohl bei der PLC wie auch bei der NCK.
Ausnahme: Die V / H Bereiche der NCK.
Aber warum? Kontrolliert die Funktion, die im AGLink das Splitting bewirkt, welcher Bereich abgefragt wird?
Ich bin davon ausgegangen, dass die Aufträge einfach "doof" in 18er Blöcke zerlegt werden, ohne zu berücksichtigen welche Variablen aus welchen Bereichen gelesen werden sollen??!
2. falsche Annahme von dir (basierend auf deiner 1. falschen Annahme)

von deinen Float32 Werten passen einfach 22 Stueck in eine Anfrage/und Ergebnis rein (daher splittet AGLink auch nicht) - aber die NC mag das trotzdem nicht
AGLink macht kein falsches Splitting und auch keine bereichsbezogene "Optimierung" - der 0x8x-Block verhaelt sich einfach anders, moeglicherweise wird das direkt auf einen anderen
Kontroler durchgeroutet (das könnte die Endianess-Verdrehung erklären) der das einfach nicht kann/mag/will (warum auch immer)

Ich habe die Tests mal noch etwas erweitert, und teste auch das Verhalten im BlockM, Ergebnisse folgen.
dann kann man vielleicht ein Schema erkennen

gut wäre es wenn du eine ganz kleine Bool/Byte-Variable und eine grosse String-Variable, Size > 8, findet wuerdest - dann koennte man damit einen Anzahl- und Datenmengen-Test machen

Wäre es dann möglich im AGLink Mechanismen zu integrieren, die dafür sorgen, dass die Maximalzahl von 18 Variablen auch bei V/H nicht überschritten,
und keine unterschiedlichen Units in einer Anfrage gemischt werden?
wenn es sich bei deinen Tests definitiv zeigt das die 0x8x-Bloecke durchweg das Verhalten zeigen kann man bestimmt mit den Deltalogics drueber reden - aber
wenn es nur ein kleiner Spezialfall ist (der auch noch nicht ordentlich Beurteilt wurde) kann ich mir kaum vorstellen das sie ihren Produktivcode aendern
(da hängen ja auch andere Kunden drann)

Ich mache das momentan recht umständlich (zahlreiche verschachtelte Schleifen) in meinem Code,
was sicher auch zu meinen schlechten Timing-Ergebnissen beiträgt...
Das kann ich mir nicht vorstellen - wenn du einen Algorithmus schreibst der die Unit und Anzahl-Zerlegung bei diesen Bloecken macht bist
du immer noch um ein vielfaches schneller als die NC sein kann

du musst ja "nur" die 0x8x-Bloecke rausfiltern und deren Anzahl begrenzen - fuer die anderen Bloecke funktioniert die optimierung von AGLink ja richtig
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, danke euch für die Erklärungen, jetzt hab ich's glaub ich auch verstanden...
Im Anhang die neuen Ergebnisse, bei den Float32 scheint die Grenze bei 19 Vars zu liegen, 19 funktioniert noch, 20 nicht mehr.
Ich versuche mal zum Vergleich in den 0x8Y Bereichen noch Parameter zu finden, die keine Floats sind und diese zu lesen.

Anhang anzeigen Test_Ergebnisse7.zip
 
du hast die Tests entfernt wo CNC_Prog und RP0 auch mal unten und nicht oben stehen - dieser Test zeigt ein weiteres Problem auf

Ich versuche mal zum Vergleich in den 0x8Y Bereichen noch Parameter zu finden, die keine Floats sind und diese zu lesen.

Es reicht wenn du den Test mit einer Schleife (wie bei 50xRPA[0]) auf die selbe Variable machst - dann musst du weniger schreiben
 
Das sollten eigentlich die Tests 6.X sein, und 7.X sein, aber da bin ich wohl beim Kopieren durcheinander gekommen.
Korrigiere ich gleich nochmal.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
jetzt sollte auch nur noch die 83.07.00 NC (Spinner) fuer die Tests reichen - die meldet schon mal Fehler wo die andere einfach nur Müll macht - also nutzen wir das schon mal als bessere Eingrenzung (damit kann man dann den Algorithmus bauen)
damit wir erstmal in der Lage sind zu verstehen was die Eingrenzungen sind müssen wir herausfinden wann AGL40_WRONG_KONTEXT kommt

bei bestimmten Blöcken, Breichen, Unit-Vermischung, Variableanzahl usw. - genau die Linie finden damit man ein Testprogramm schreiben kann das Zugriffe erstmal validiert - daraus ergibt sich dann später der "bessere" Split-Algorithmus

Test 02.1 verstoesst schonmal gegen die Info aus der Doku - keine Unit-Vermischung in H und V-Breich - oder?

-keine Unit-Vermischung in V bzw. H Area
(https://cache.industry.siemens.com/dl/files/613/25076613/att_75580/v1/P3_PL_de-DE.pdf) Seite 2-100 in Achtung-Block
Bei den Bereichen V bzw. H dürfen nicht verschiedene logische Achsnummern in einem
Auftrag zugeordnet werden (bei Nichteinhaltung: Error:= TRUE, State:= W#16#02).


eNCK_AreaFeedDrive = 5, // V: Vorschubantrieb
eNCK_AreaMainDrive = 6, // H: Hauptantrieb


UND:
Beim Lesen von kanalspezifischen Variablen dürfen in einem Auftrag (FB 2-Aufruf)
über Addr1 bis Addr8 nur Variablen von genau einem Kanal adressiert werden.


UND:
In einem Auftrag können NC-Variablen innerhalb einer Gruppe kombiniert werden:
Bereich
Gruppe 1 C[1] N B A T
Gruppe 2 C[2] N B A T
Gruppe 3 V[.] H[.]

Für Kanal 3 bis Kanal 10 gelten die gleichen Regeln, wie in der vorstehenden Tabelle in
Gruppe 1 und Gruppe 2 beispielhaft dargestellt wurden.

also keine channel unit vermischung, keine v, h unit vermischung - sonst geht erstmal alles, bis auf deine anzahl-problematik

kannst du das ein wenig testen
 
Zuletzt bearbeitet:
So, habe den Test jetzt noch um eine Abfrage von Int8 (d.h. BuffLen =1 Byte), Int16 (d.h. BuffLen =2 Byte) und Int32 (d.h. BuffLen =4 Byte, wie auch die Float32 Vars, die ich bisher drin hatte) erweitert.
Wie's aussieht, sind die Datentypen / längen egal, es geht nur um die Anzahl. 19 funktionieren, 20 nicht...

Anhang anzeigen Test_Ergebnisse8.zip
 
jetzt ist nur die Frage ob die Menge-Eingrenzung bei allen 0x8x-Bloecken (oder auch anderen) - oder allgemein im Feed und MainDrive so ist
mit dem 8,16,32...bit Typen - die restlichen Tests kann du mal auskommentieren, dann sieht es schon besser aus mit integration in AGLink ... die Deltalogics lesen bestimmt mit :)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Update von der Main
-habe die Tests in einen Funktion gesteckt
-Benchmarking hinzugefügt
-das Variablen-lesen mit Option alle-Einzeln, alle-als-Block und Smart(mein Splitting) erweitert
-noch ein paar Area-Variablen hinzugefügt
-deinen Test deaktiviert - bringt jetzt erstmal nichts den laufen zu lassen

die SMART-Version sollte funktionieren

wenn nicht probier mal die

split_vh_blocks = true -> unique Blöcke in V,H
split_vh_max_items = true -> max 19 vars in V, H

zu setzen
 

Anhänge

  • main.zip
    10,8 KB · Aufrufe: 34
Zuletzt bearbeitet:
Heute bin ich nicht am Institut, morgen wieder... Dann teste ich noch, wie sich die anderen 0x8Y Blöcke und der Block M bei der Anzahl von Variablen verhalten.
Welche anderen Blöcke sind den für die Bereiche V/H noch relevant?
Und hast du noch eine Vermutung was in den anderen 0x8er Blöcken stehen könnte? Ich hab noch nichts gefunden was Sinn machen könnte, habe aber auch keine Idee wonach ich suchen soll.
 
nochmal das Internet durchforstet

in einem PDF hab ich diese nackte Liste gefunden

area=5 ist FeedDrive
Block sind genau die Bloecke S,M,0x80-0x85

Code:
area    block    name
5    1A    /DriveVsa/Drive/R0035
5    1A    /DriveVsa/Drive/R0078
5    1A    /DriveVsa/Drive/R0081
--
5    80    /DriveVsa/CuPre/4955
5    80    /DriveVsa/CuPre/4956
5    80    /DriveVsa/CU/P0009
5    80    /DriveVsa/CU/P0972
5    80    /DriveVsa/CU/P0976
5    80    /DriveVsa/CU/P0977
5    80    /DriveVsa/CU/P2106
5    80    /DriveVsa/CU/R3996
5    80    /DriveVsa/CU/R3988
5    80    /DriveVsa/CuPre/103
5    80    /DriveVsa/CuPre/3954
5    80    /DriveVsa/CuPre/4950
5    80    /DriveVsa/CuPre/4951
--
5    81    /DriveVsa/CuLinkPre/4951
5    81    /DriveVsa/CuLinkPre/4950
5    81    /DriveVsa/CuLinkPre/3954
5    81    /DriveVsa/CuLinkPre/103
5    81    /DriveVsa/CuLinkPre/4956
5    81    /DriveVsa/CuLinkPre/4955
--
5    82    /DriveVsa/DcPre/4955
5    82    /DriveVsa/DcPre/4956
5    82    /DriveVsa/DcPre/103
5    82    /DriveVsa/DcPre/3954
5    82    /DriveVsa/DcPre/4950
5    82    /DriveVsa/DcPre/4951
5    82    /DriveVsa/DC/P0046
5    82    /DriveVsa/DC/P0899
5    82    /DriveVsa/DC/P9725
5    82    /DriveVsa/DC/P9726
5    82    /DriveVsa/DC/P9727
5    82    /DriveVsa/DC/R0020
5    82    /DriveVsa/DC/R0021
5    82    /DriveVsa/DC/R0026
5    82    /DriveVsa/DC/R0027
5    82    /DriveVsa/DC/R0033
5    82    /DriveVsa/DC/R0035
5    82    /DriveVsa/DC/R1300
5    82    /DriveVsa/DC/R1438
5    82    /DriveVsa/DC/R9728
5    82    /DriveVsa/DC/R9798
5    82    /DriveVsa/DC/R9898
--
5    83    /DriveVsa/LM/P0899
5    83    /DriveVsa/LmPre/4951
5    83    /DriveVsa/LmPre/4950
5    83    /DriveVsa/LmPre/3954
5    83    /DriveVsa/LmPre/103
5    83    /DriveVsa/LmPre/4956
5    83    /DriveVsa/LmPre/4955
--
5    84    /DriveVsa/TbPre/4955
5    84    /DriveVsa/TbPre/4956
5    84    /DriveVsa/TbPre/103
5    84    /DriveVsa/TbPre/3954
5    84    /DriveVsa/TbPre/4950
5    84    /DriveVsa/TbPre/4951
--
5    85    /DriveVsa/TmPre/4951
5    85    /DriveVsa/TmPre/4950
5    85    /DriveVsa/TmPre/3954
5    85    /DriveVsa/TmPre/103
5    85    /DriveVsa/TmPre/4956
5    85    /DriveVsa/TmPre/4955

und

name    area    block
/acx/drv_cu_pre/103    5    0x80
/acx/drv_dc_pre_assistent/9    5    0x80
/acx/drv_cu_pre/3954    5    0x80
---
/acx/drv_culink_pre/103    5    0x81
/acx/drv_culink_pre/3954    5    0x81
---
/acx/drv_dc_pre/3954    5    0x82
/acx/drv_dc_pre/103    5    0x82
/acx/drv_dc_pre_assistent/10    5    0x82
/acx/drv_dc_pre_assistent/301    5    0x82
---
/acx/drv_lm_pre/103    5    0x83
/acx/drv_lm_pre/3954    5    0x83
---
/acx/drv_tb_pre/103    5    0x84
/acx/drv_tb_pre/3954    5    0x84
---
/acx/drv_tm_pre/103    5    0x85
/acx/drv_tm_pre/3954    5    0x85

vielleicht kannst du ja was mit den kuerzeln Anfangen

wobei du ja schon folgendes herausgefunden hast - mit bisschen Ideen von mir

0x80 --> "Control-Unit-MD" im HMI <-- hier steht in der obigen Liste immer was mit "CU" passt also zu "Control Unit"
0x81 ??? <-- hier stehen in der Liste immer was mit "CULink"??? (irgendwas mit Topologie??? CU-Link-Kommunikations- Objekt???)
0x82 --> "Antriebs-MD" im HMI <-- hier steht in der Liste immer was mit "DC" (Drive Components?)
0x83 --> "Einspeisungs-MD" im HMI<-- in der Liste mit "LM" (Line Module?)
0x84 ??? <-- in der Liste mit "TB" (Terminal Board?)
0x85 ??? <-- in der Liste mit "TM" (Terminal Module?)

zu "TB" und "TM"
https://cache.industry.siemens.com/dl/files/870/108605870/att_825248/v1/FB2_0306_de.pdf (2-1) (TB = Terminal Board (SINAMICS))
Mit Hilfe des am Antriebsbus ankoppelbaren "NCU-Terminalblock" können weitere digitaleNCK-Ein-/Ausgänge sowie analoge NCK-Ein-/Ausgänge angeschlossen werden(nachfolgend als externe NCK-E/A-Peripherie bezeichnet).
Der "NCU-Terminalblock" dient als Trägerbaugruppe für maximal 8 DP-KompaktAufsteckmodule.Je NCU können bis zu 2 "NCU-Terminalblöcke" angeschlossen werden.

TM = Terminal Module (SINAMICS)
 
Zuletzt bearbeitet:
Zurück
Oben