TwinCat mit Python?

Zuviel Werbung?
-> Hier kostenlos registrieren
Hat nun jemand Erfahrungen mit TwinCAT und Python?

Ich suche dringend Hilfe. Dazu eine kurze Beschreibung wie weit ich derzeit bin.
Es gibt eine aufwendige Simulation, Visualisierung basierend auf Python, Panda3D usf. Diese soll nun an eine Maschinensteuerung unter TwinCAT angeschlossen werden. Im Wesentlichen 4 Servomotoren + Encoder, Notaussystem usf.

Über die ADS-Script-DLL kann ich direkt Variablen aus TwinCAT auslesen, und solche beschreiben. Das geht in Python über ein makepy, welches mir die ADS-Script-DLL in Python verfügbar macht (sogar mittels Early-bindig). Das funktioniert auch, allerdings viiiiiel zu langsam. Das benötigt etwa 500ms für das Auslesen EINER Variablen. Das kann doch nicht sein!

So weit bin ich.
Weiss jemand weiter?
Hat vielleicht schon jemand die ADS-DLL oder die ADS-OCX unter Python eingebunden? Das sollte ja auch möglich sein, makepy klappt noch, beim Aufruf von Funktionen bekomme ich dann aber immer einen Fehler.

Bitte um Hilfe!
 
Kannst du vielleicht den Webservice verwenden? Ich weiß, dass man mit Python Webservice-Consumer programmieren kann. Es gibt Beispiele für verschieden Sprachen im Infosys, Python ist leider nicht dabei, aber viellicht hilfts. Aber auch wenn es funktioniert, dürfte der Programmieraufwand deutlich höher liegen als bei der Script-dll.
 
Zuletzt bearbeitet:
Ich suche dringend Hilfe. Dazu eine kurze Beschreibung wie weit ich derzeit bin.
Es gibt eine aufwendige Simulation, Visualisierung basierend auf Python, Panda3D usf. Diese soll nun an eine Maschinensteuerung unter TwinCAT angeschlossen werden. Im Wesentlichen 4 Servomotoren + Encoder, Notaussystem usf.

Über die ADS-Script-DLL kann ich direkt Variablen aus TwinCAT auslesen, und solche beschreiben. Das geht in Python über ein makepy, welches mir die ADS-Script-DLL in Python verfügbar macht (sogar mittels Early-bindig). Das funktioniert auch, allerdings viiiiiel zu langsam. Das benötigt etwa 500ms für das Auslesen EINER Variablen. Das kann doch nicht sein!

So weit bin ich.
Weiss jemand weiter?
Hat vielleicht schon jemand die ADS-DLL oder die ADS-OCX unter Python eingebunden? Das sollte ja auch möglich sein, makepy klappt noch, beim Aufruf von Funktionen bekomme ich dann aber immer einen Fehler.

Bitte um Hilfe!

Bist Du schon weitergekommen?
Ein Möglichkeit wäre es die Bibliothek ctypes (http://docs.python.org/library/ctypes.html) zu benutzen. Aber Erfahrung habe ich damit noch keine...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für den Hinweis. Nach meinen Informationen ist ctypes noch langsamer, weil ja die dlls zur Laufzeit mit eingebunden werden und dabei ein gewisser Overhead entsteht. Zudem gibt's dabei ziemliche Probleme mit den Typkonvertierungen, weil nicht alle C-Typen in Pyton rübergemappt werden. Aber danke für den Hinweis. Wir haben's nun über einen Webserver gelöst, dabei geht zwar auf den letzten Metern die TwinCat-Echtzeit verloren, aber immerhin haben wir eine schnelle Kommunikation.
Zudem haben wir ein interessantes Phänomen festgestellt. Wenn man 2 Instanzen gleichzeitig laufen lässt verkürzt sich die Zugriffszeit jeder einzelnen Instant dramatisch von den oben beschriebenen 500ms wenn nur eine Instanz läuft auf etwa 30ms, wenn zwei Instanzen zugleich auf TwinCat zugreifen. Warum - keine Ahnung.
 
Danke für den Hinweis. Nach meinen Informationen ist ctypes noch langsamer, weil ja die dlls zur Laufzeit mit eingebunden werden und dabei ein gewisser Overhead entsteht. Zudem gibt's dabei ziemliche Probleme mit den Typkonvertierungen, weil nicht alle C-Typen in Pyton rübergemappt werden. Aber danke für den Hinweis. Wir haben's nun über einen Webserver gelöst, dabei geht zwar auf den letzten Metern die TwinCat-Echtzeit verloren, aber immerhin haben wir eine schnelle Kommunikation.
Zudem haben wir ein interessantes Phänomen festgestellt. Wenn man 2 Instanzen gleichzeitig laufen lässt verkürzt sich die Zugriffszeit jeder einzelnen Instant dramatisch von den oben beschriebenen 500ms wenn nur eine Instanz läuft auf etwa 30ms, wenn zwei Instanzen zugleich auf TwinCat zugreifen. Warum - keine Ahnung.

Könnte es sein, dass Ressourcen neu aufgebaut werden, wenn du nur eine Instanz hast?
 
Hallo zusammen,

ich weiss nicht was dieses Python ist. Aber die Ausgangsfrage war, oder C# ???

Ich habe gute Erfahrungen mit der ADS-OCX und Delphi gemacht, passt auch zu deiner Anwendung. Vielleicht ein anderer Lösungsvorschlag.

Gruß, Voxe
 
Zurück
Oben