drfunfrock
Level-1
- Beiträge
- 934
- Reaktionspunkte
- 72
-> 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!
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: