Gewisse Unsichehreiten beim richtigen Umgang mit Clustern in Ausblick auf externen Co
Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
30.03.2011, 19:44 (Dieser Beitrag wurde zuletzt bearbeitet: 30.03.2011 20:05 von Reyneke.)
Gewisse Unsichehreiten beim richtigen Umgang mit Clustern in Ausblick auf externen Co
Moin, ich hätte da ein oder zwei oder mehrere Fragen bezüglich Einbindung von bereit vorhandenem Quellcode nach LabView. Ich danke allen, die sich Zeit nehmen diesen Bericht zu lesen im Vorraus.
Eines vorweg: Es soll eine Verknüpfung zwischen LabView und EtherCAT mittels des EtherCAT Masters von Kithara Software konstruiert werden. Bisher steht (und läuft) der Master. Er erkennt auch angeschlossene Slaves und generell macht das, was ich bisher habe einen guten Eindruck.
Jetzt treten jedoch die ersten Fragen auf. Zum einen gibt es den Datentyp KSEcatDataObjInfo, in dem sich eine Verknüpfung auf KSEcatDataVarInfo befindet, die jedoch so ausschaut:
Code:
KSEcatDataVarInfo* vars[1]
, was mich ein wenig verunsichert. Ist es ein Pointer auf das erste Ergebnis, ein Feld angefüllt mit Informationen oder gar ein Feld voller Pointer auf die einzelnen Ergebnisse? Mein Tipp, da man die einzelnen Dateninformationen über, z.B. eine for-Schlefie mit vars[i] ansprechen kann, ist letzteres, aber so ganz sicher bin ich mir nicht, ebensowenig wie ich mir unsicher bin, wie sich das am Einfachsten nach LabView übersetzen lässt.
Die andere Frage, wäre, wie man einen void ** - pointer übermittelt. Meines Verständnisses nach, ist das eine doppelt verkettete Adresstruktur, also ein Pointer auf einen Pointer. Leider schmiert mir der Rechner mit einem Bluescreen ab, wenn ich das versuche so umszusetzen, das ich der Call Library Function einen u32 Wert überliefere.
Habt ihr einen Tipp für mich, wie ich diese Beiden Schwierigkeiten lösen kann, bitte?
Mit freundlichen Grüßen
- Reyneke
Edit: Ich bitte um Entschuldigung, wenn ich gerade programmiertechnisch wie der Ochs vom Berg stehe und einige sich gerade an den Kopf fassen. Mitunter, dank meiner ADHS, sehe ich den Wald vor lauter Bäumen nicht.
Anzeige
04.04.2011, 09:13 (Dieser Beitrag wurde zuletzt bearbeitet: 04.04.2011 09:16 von rolfk.)
RE: Gewisse Unsichehreiten beim richtigen Umgang mit Clustern in Ausblick auf externen Co
Grundsätzlich ist C in dieser Hinsicht sehr flexible um nicht zu sagen undeutlich.
Dein Vorbild:
KSEcatDataVarInfo* vars[1];
ist ausserhalb jeglichen Kontextes undeutlich zu interpretieren und eigentlich auch nur durch Dokumentation oder entsprechende Codebeispiele (die testbar funktionieren) eindeutig festzulegen.
Es geht um eine Variablendeklaration und dabei wird ein Pointer angelegt auf ein Array, das eventuel, möglicherweise, vielleicht, je nach Lust und Laune, eines, zwei, mehr oder kein Element enthalten kann. In C ist ein Pointer einfach ein Pointer.
Das Ganze liesse sich auch so schreiben:
KSEcatDataVarInfo** vars;
und wäre qua C syntax equivalent und ohne Probleme aneinander zuweisbar. Die einzige wirkliche Einschränkung in C ist der Datentyp des Pointers selber (KSEcatDataVarInfo), der Level der Referencierung, und wenn der Pointer als const deklariert wird, was bedeutet dass dieser Pointer nach einer ersten Initialisierung nicht mehr verändert werden kann.
C++ hat da ein paar weitere Syntaxfeatures hinzugefügt und stellt sich ein klein wenig (aber kaum nennenswert) strikter auf.
Ein void Pointer is auch einfach ein Pointer auf irgendwas. Gleiches Problem wie oben, aber die Einschränkung des Datentyps des Pointers entfällt komplet. Ein void Pointer is kompatibel mit jedem anderen Pointer, ob mit oder ohne Datentyp.
In LabVIEW ist ein void Pointer als Funktionsparameter einfach ein pointersized Integer, als Element in einer Struktur hauptsächlich viel Mühe, Schweiss und Kopfzerbrechen. Für mich ist jeder Pointer innerhalb einer Struktur auch gleich der Punkt wo ich schon lange jeglichen LabVIEW Diagramvodoo aufgebe und direkt in C eine DLL schreibe die das Ganze in viel LabVIEW-freundlichere Parameter umsetzt.
Doch leider schmiert mir mein VI, mit dem ich teste, bereits im Laufen ab, bzw. wenn er mir die Informationen auf dem VI darstellen soll. Es kommt keine Fehlermeldung, es beendet sich einfach. Ich vermute, dass einer der Ein- und Ausgabe Faktoren falsch deklariert ist, aber so richtig komme ich gerade nicht weiter.
RE: Gewisse Unsichehreiten beim richtigen Umgang mit Clustern in Ausblick auf externen Co
Ookay, manchmal steckt der Teufel in der Gewohnheit. Ich hatte die Variablen an der Node initialisiert. Die Integervariablen mit 0 ... und die Strings? Tja, aus alter Gewohnheit mit "NULL", was dann auch voellig legitim interpretiert wurde. Das Resultat war obenstehendes Phaenomen.
Jetzt muss ich den Error 1097 finden, der scheinbar auftritt wenn die Funktion wieder zurueckgekerht ist. Nunja - immerhin sehe ich bereits, dass die Wrapperfunktion korrekt laeuft.
14.04.2011, 10:59 (Dieser Beitrag wurde zuletzt bearbeitet: 19.04.2011 19:26 von rolfk.)