Hallo zusammen,
ich will mit Python auf einem Tool der IO-Karten bedient zugreifen. Dafür bietet dieses Tool ein DLL, die ich mit ctypes verwenden kann. In der DLL habe ich Get/SET-funktion mit denen ich die Werte der IO-Kanäle lesen bzw. verändern kann.
Meine Frage: Gibt es eine möglichkeit, dass ich über ein Pointer die Werte der Kanäle lesebzw. schreibe ohne jedes mal set bzw. get zu benutzen? z.b. IF(Get(Kanal_1) == 1) -> IF(ptr_Kanal_1 == 1)
Vielen Dank im Voraus!
ctypes + Pointer auf Funktionen
Ich hoffe nicht. Das wuerde naemlich bedeuten, dass deine IO-Karte ihren im Kernel angesiedelten IO-Raum in deinen Prozess einblenden kann/darf - und damit ist dann Polen offen, wie man so schoen sagt.
Und was genau stoert dich denn an den Gettern/Settern? Performance? Wenn nicht, und es geht nur um die aesthetik - dann kannst du dir ja ganz einfach ein Proxy-Objekt schreiben, welches Properties hat mit deren Hilfe du die getter/setter-calls versteckst, und in Python sieht's dann nach simplem Attributzugriff aus.
Und was genau stoert dich denn an den Gettern/Settern? Performance? Wenn nicht, und es geht nur um die aesthetik - dann kannst du dir ja ganz einfach ein Proxy-Objekt schreiben, welches Properties hat mit deren Hilfe du die getter/setter-calls versteckst, und in Python sieht's dann nach simplem Attributzugriff aus.
ich muss oft mit vielen diesen IO-Werten rechnen bzw. prüfen und ich meine, dass es besser für die lesbarkeit.
z.B. SET(AD1, get(Input_0) + get(Input_1)) ==> *ptr_AD1 = (*ptr_Input_0 + *ptr_Input_1)
Für Das Tool worauf ich über die DLL zugreife sind die IO-Kanäle variablen, die er im RAM des PCs verwaltet. daher wollte ich auf die RAM-Adresse direkt zugreiffen!?
z.B. SET(AD1, get(Input_0) + get(Input_1)) ==> *ptr_AD1 = (*ptr_Input_0 + *ptr_Input_1)
Für Das Tool worauf ich über die DLL zugreife sind die IO-Kanäle variablen, die er im RAM des PCs verwaltet. daher wollte ich auf die RAM-Adresse direkt zugreiffen!?
Also, ohne genaues ueber deine Karte zu wissen kann ich da mehr zu der Speicher-Geschichte nicht sagen.
Aber wenn deine DLL dir keinen Call anbietet, mit dem du eben genau die Speicher-Adresse bekommst, dann kommst du da auch nicht dran.
Und das, was du da machen magst, das liesse sich eben mit einem Proxy-Object erreichen, welches dir die Get/Set-calls kapselt.
Aber wenn deine DLL dir keinen Call anbietet, mit dem du eben genau die Speicher-Adresse bekommst, dann kommst du da auch nicht dran.
Und das, was du da machen magst, das liesse sich eben mit einem Proxy-Object erreichen, welches dir die Get/Set-calls kapselt.