Python Source um von Twincat nahezu ALLE Variablen auszulesen

drfunfrock

Level-1
Beiträge
934
Reaktionspunkte
72
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe irgendwann einmal PYADS welches auf Github zu finden, erweitert, um auch auf Structs Zugriff zu haben, ohne seine Variablenlisten manuell zusammenbauen zu müssen. Dieser Kode liesst alles alle Variablen selbst. Ein wenig Reverse-Engineering gab mir denn die Erkenntniss, dass Beckhoff Zugriffe wie

App.sMotor.Geschwindigkeit

per Substitution zusammenbastelt. Beckhoff benutzt einen undokumentierten ADS-Request um dann mit dem Handle eines FB, Struct oder Enum auf die Member zuzugreifen. Daher gibt es dann für jeden Member ein Objekt. Weil ich damals kein OO für SPS machte, habe ich den Zugriff auf FBs abgeschaltet. Eine Erweiterung sollte aber kein Problem sein.


Die Bibliothek funktionierte mit Python3 und hat ein Beispiel. Man liesst einmal alle Symbole und dann baut man per Regex Filter auf die Namen der Symbole Blöcke. Manuell geht das natürlich auch. Ich hatte damals wirklich alles in Structs gepackt. Das ganze lief mit Kivy zusammen. Für einen Datenlogger sollte das taugen.

Der lesende Zugriff auf einer 400Mhz Arm CPU ist nahezu unabhängig von der Blockgrösse und betrug in meinem Projekt etwa 5-10ms. Es lohnt also darüber nachzudenken, wie man seine Blöcke liesst. Block-Strukturen werden gecached, so dass diese nur einmal mit einem ADS-Request initialisiert werden.

Die ursprüngliche Absicht war eine HMI zu bauen, aber TF2000 ist einfach zu gut!
 

Anhänge

Zuletzt bearbeitet:
Hallo, der Beitrag ist schon etwas älter, aber ich versuche gerade das Script zum Laufen zu bekommen. Leider bekomme ich eine TypeError Exception mit der Info "The ads type 0x14 is not implemented!". Ich kann 0x14 aber nicht identifizieren auch hier in der ADS Implementierung taucht 0x14 nicht auf https://github.com/Beckhoff/ADS/blo...f6e51caf622da26adc13c/AdsLib/SymbolAccess.cpp. Hat hier jemand noch ne Ahnung was hier das Problem sein kann?
 
Zurück
Oben