Was habt ihr nur mit dem Return-Wert? in .Net werden alle COM-Fehler von Microsoft auf Exceptions gemappt - das kann man gar nicht verhindern - und es kommt keine Exception
Ich will da jetzt auch nicht lange drauf herum reiten, aber das stimmt nicht so ganz. Der Entwickler des COM-Objects kann durchaus beeinflussen was zurück gegeben wird. Und wenn ein E_Fail zurückgegeben wird, dann ist das nicht unbedingt ein Fehler in der COM-Komponente, sondern wirklich dass das Aktivieren des Projektes fehlgeschlagen ist. Das "Problem" in TwinCAT 2 ist, dass die Meldungen was der Fehler ist, nicht wirklich zurück gegeben wurden. Das müsste zusätzlich zum E_Fail als Text zurückgegeben werden. Das liegt wohl so ein bisschen in der Historie. Das Automation Interface ist so gewachsen, wie Kunden Funktionalität gebraucht haben. Das sieht in TwinCAT 3 ganz anders aus. Hier war es von vorn herein Teil des Gesamtkonzeptes, so dass da auch mehr Fehlermeldungen geliefert werden bzw. das ganze Verhalten optimiert wurde.
Nichts desto trotz muss man speziell in TwinCAT 2 schauen was dahinter steckt. Mit dem AutomationInterface bedient man quasi TwinCAT fern und man nutzt die selben Kommandos die auch in der Oberfläche verwendet werden. Ein OpenConfiguration lädt das Projekt. Unmittelbar danach versucht der SystemManager automatisch Kontakt zum eingestellten Zielsystem aufzubauen etc.. Und auch auf der Oberfläche kann man in dieser Zeit das Projekt nicht aktivieren. Man bekommt es halt nur nicht mit, weil die Zeiten so kurz sind. Die Rückgabe S_OK kommt aber tatsächlich vom SystemManager, der damit zurück gibt, dass das Projekt erfolgreich geladen wurde.
Andere Kommandos, wie z.B. StartTwinCAT stößt der SystemManager auch nur an und wartet bis die Laufzeit OK zurück meldet. Wenn diese das Tut heißt das auch nur, dass diese im RunMode ist und die Treiber etc. geladen wurde. Trotzdem muss sich das System dann noch vollständig hochfahren. Z.B. muss das Bussystem vollständig aufgestartet sein etc. bevor man mit dem System was anfangen kann. Aber auch das ist von der Oberfläche aus das selbe. Auch wenn die Laufzeit bereits anzeigt, dass TwinCAT im RunMode ist, kann man sich nicht sofort mit der SPS einloggen. Man muss halt nur schnell genug sein, damit man das auf der Oberfläche überhaupt merkt. Für letzteres gibt es aber ja dann die Möglichkeit mit IsTwinCATStarted zu schauen ob es vollständig aufgestartet ist. Die Rückmeldungen der Komponenten sind also korrekt, auch wenn dir das nicht weiter hilft. Für TwinCAT 2 musst Du wohl leider mit den Sleep-Zeiten leben. Funktionen wie IsTwinCATActivated gibt es leider nicht.