LowLevelMahn
Level-2
- Beiträge
- 767
- Reaktionspunkte
- 90
-> Hier kostenlos registrieren
Keine PCU50.
vielleicht einen Switch mit Mirror-Port-Funktion nutzen?
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Keine PCU50.
//read from nc
int result = AGL_NCK_ReadMixEx(p_connection, &data_rw[0], data_rw.size(), TIMEOUT, USERVAL);
printf("Result: %s\n", agl_result_str(result));
if(result != AGL40_SUCCESS)
{
if(result != AGL40_UNKNOWN_PLC_ERROR) // den lassen wir trotzdem durch
{
assert(false);
}
}
if(result == AGL40_SUCCESS)
{
for(...)
{
...
}
}
Was anderes: Ich glaub ich hab rausbekommen was die Blöcke 0x80, 0x82 und 0x83 machen..
Jew. Mit AreaFeedDrive
0x80 --> "Control-Unit-MD", unit 1 == Control-Unit Nr. 1
0x82 --> "Antriebs-MD", eigentlich die gleichen Daten wie im Block M, aber die Unit zu Achsen Zuordnung ist anders (durcheinander, hab noch kein System gefunden)
0x83 --> "Einspeisungs-MD" , unit 1 == Einspeisung Nr. 1 --> Das sind die Daten, die mir noch gefehlt haben :smile:
Vlt. bekomme ich ja noch raus für was die anderen 0x8X Blöcke sind.
Das mit dem Code.. Naja, ich hab nie programmieren gelernt, ich bin Maschinenbauer. Ich pfusch mir das nur so aus Beispielen (Internet) zusammen.
Ist auch keine "professionelle" Software die ich hier baue, sondern "nur" Forschung an der Uni.
Ich versuch's besser zu machen.... Danke für die Korrektur!
Wo ist der Flaschenhals zu erwarten, irgendwelche Erfahrungen?
Wie empfiehlt es sich denn hier grundsätzlich anzusetzen?
Multithreading? Dachte z.B. daran für jede Maschine einen eigenen Thread zu starten, evtl. jew. noch einen Thread für PLC und NCK... haltet ihr das für sinnvoll?
Momentan nutze ich die "normalen" ReadMixEx anfragen, habe aber in der Doku auch gelesen, dass es eine Art zyklischer Leseaufträge gibt. Verstehe aber nicht wie das funktionieren soll, hat da evtl. jemand ein Beispiel?
Und gibt es da irgendwelche Nachteile / Probleme? Wird dadurch die Steuerung belastet bzw. evtl. die eigentliche Funktion der Maschine beeinträchtigt?
arbeitest du da oder Student?Ja, heute war ich wieder am Institut und habe weiter getestet...
kannst du den mehr-als-19-Variablen-Test (mit dem Fehler) auch in die main.cpp bauen - dann haben die Deltalogics gleich ein Beispiel - und es koennte zusätzlich noch ein Antriebs-Variablen bezogenes Problem seinWenn man versucht von der PLC in einem Auftrag mehr als 19 Variablen zu lesen, wird der Auftrag vom AGLink automatisch in mehrere Job's mit max. 19 Variablen je Job zerlegt.
Beim lesen von der NCK ist dies bislang nicht der Fall, was dazu führt dass bei Aufträgen mit mehr als 19 Variablen ein Fehler auftritt.
bitte auch mit Logausgabe und Wireshark-LogHabe vergessen deinen neuen Test laufen zu lassen, werde das Morgen nachholen.
Das sieht fuer mich ganz klar nach einer Firmware-Einschränkung aus - warum auch immer die NCK das nicht erlaubtAußerdem hab ich ja das Problem, dass ich für jeden der NCK_AreaFeedDrive-Bereiche bzw. für jede Unit einen eigenen Aufruf starten muss, da sonst auch ein Fehler auftritt.
AGLink und dein Code sollte die Dauer nicht verdoppeln - teste mal im Release-Mode, und wie machst du dein Benchmarking (clock oder sowas ist unbrauchbar da Genauigkeit: +-10-20ms)Laut Wireshark log, dauert es ca. 7-10 ms, bis ich von der NCK eine Antwort auf eine Anfrage bekomme, in meinem Code komme ich so (laut MS Visual Studio Debugger) auf ca. 20-35ms. für eine Abfrage.
bei so wenigen Variablen könnte es nicht so relevant seinWerde morgen auch nochmal testen, was so als Untergrenze erreichbar ist, wenn ich nur einen Bereich lese. Die Tests waren nebenbei bemerkt überwiegend im Leerlauf, hoffe dass sich das im aktiven Betrieb nicht noch verschlechtert.
dann sieht man vielleicht auch was bei den Drives das Problem istHabe von Deltalogic auch noch einmal ein Update bekommen, das die NCK Fehlercodes richtig ausgeben können soll, auch das hab ich noch nicht getestet.
// Test 12
printf("\n\nTest 12 50x RPA[0] \n");
printf("----------------------------------------------------------------\n");
{
nck_vars_t vars;
for(size_t i = 0; i < 50; ++i)
{
vars.push_back(rpa0);
}
read_print_nck_vars(connection, vars);
}
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen