Funktionen für Velleman K8055

@Torben:

Wäre es ohne allzugroßen Aufwand möglich, für das Velleman-K8055-Interface noch die Funktionen ReadDigitalChannel und ReadAnalogChannel zugänglich zu machen? Das wäre großartig!

Vorauseilenden Dank

TSD

Leider aufwändiger als es aussieht. Um die Thread-Safety sicherzustellen, laufen die Zugriffe auf die K8055.DLL alle abgeschottet in einem eigenen Thread innerhalb des Fernsteuerungs-Objektes. Wenn man von “draußen” (Script) einen Auruf durchführen würde, könnte der mit denen der Fernsteuerung kollidieren, was dann zum Crash führt.

Die Fernsteuerung pollt die Werte (zumindest die digitalen) aber ohnehin schon zwecks Verarbeitung der Fernsteuerungsbefehlen. Wenn ich nun dafür sorgen würde, dass die zuletzt ausgelesenen Werte nicht weggeworfen sondern zwischengespeichert werden, könnte man sie über das IK8055Remote-Interface auslesbar machen.

1 Like

Oje. Hintergrund ist, bei der Steuerung eines externen Gerätes beim Laden des Skripts etwas über dessen Schaltzustand zu erfahren: Ist es schon eingeschaltet? Dann Steuerung erstmal nicht freigeben. Wenn nicht, kann gesteuert werden. Das ginge mit ReadDigitalChannel sehr elegant, und ich wüßte auch nicht, wie man das anders lösen könnte.
 

Abgefragte Grüße

TSD


Edit: Hmm, wenn man an diesen zwischengespeicherten Wert käme, dann könnte es gehen. Wie lange könnte man den denn speichern, ohne daß das Memory platzt?

Edit 2: Ist eigentlich wurscht, wie lange gespeichert wird. Für die Initialisierung ist ja nur wichtig, welches das Ergebnis der letzten Polling-Abfrage ist, denn die ist (im Rahmen von Δtpolling) identisch mit dem aktuellen Zustand des Geräts.

Also Antwort: Ja, das wäre hilfreich!

Ob ich das mal nach oben pushen darf?

Man soll ja nicht unverschämt sein, aber vielleicht … wenn @Torben gerade im Flow ist …? *hoff*

Abendbrotzeit. Büro ist geschlossen. :wink:

1 Like

Da ohnehin gerade Neuheitenmesse ist: Hat sich denn in dieser (immerhin accepted) Sache etwas getan?

Dezenter Push.  

Netter Versuch :face_with_hand_over_mouth:

Es ist wirklich schwierig, mal eine ruhige Minute für solche Sachen zu finden…

  IK8055Remote = interface(IRemote) ['{AC12427B-6801-4EEA-8F5B-454FA771182E}']
    // ...
    function ReadDigitalChannel(Channel: integer): boolean;
    function ReadAllDigital: integer;
    // ...
end;

Kommt in Snapshot 5049.

1 Like

Vielen Dank!!
 

Wie kann ich mir die integer in ReadAllDigital vorstellen?

Genau wie in der Doku von Velleman beschrieben - die unteren fünf Bits sind der Zustand der Eingänge.

ReadDigitalChannel extrahiert dir das gewünschte Bit und wandelt es in ein Boolean.

Aha, sollte ich vielleicht auch mal lesen. Danke!

Für alle Interessierten: Ein Wert von z. B. 25 bedeutet, daß die Channels 1, 4 und 5 gesetzt sind:

1 ⋅ 2⁰ + 0 ⋅ 2¹ + 0 ⋅ 2² + 1 ⋅ 2³ + 1 ⋅ 2⁴  =  1 + 0 + 0 + 8 + 16  =  25 
^        ^       ^        ^       ^
Bit 1    |       Bit 3    |       Bit 5
         Bit 2            Bit 4

Die weitere Auswertung müßte dann im Skript erfolgen.

1 Like

Und noch ein Hinweis für mögliche Interessenten: Velleman hat die Geräte K8055(N) und VM110(N) aus dem Programm genommen. Deren Nachfolger laufen jetzt unter der Bezeichnung WSI8055N für den Bausatz, die betriebsfertige Variante heißt jetzt WPI110N.