# TwinCat mit Python?



## mimuel (11 Februar 2011)

Hi,

wer hat Erfahrung mit TwinCat und Python?
Oder würdet ihr C# empfehlen?

Danke Michael


----------



## Anaconda55 (13 Februar 2011)

Ich würde sagen, dass kommt immer auf die Anwendung drauf an.
Erzähl doch erst mal, was Du machen willst.


----------



## Palmstroem (19 April 2011)

*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!


----------



## tom_x (19 April 2011)

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.


----------



## e6o5 (9 Juni 2011)

Palmstroem schrieb:


> 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!
> ...



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...


----------



## Palmstroem (10 Juni 2011)

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.


----------



## drfunfrock (10 Juni 2011)

Palmstroem schrieb:


> 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?


----------



## Voxe (10 Juni 2011)

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


----------

