Ich versuche mittels Serial Socket aus Xojo heraus (Mac) über einen
USB-RS485-Adapter DMX-taugliche Geräte, z.B. einen Movinghead,
anzusteuern. Der Adapter wird über einen Treiber von FTDI "FT232R"
angesteuert.
Um das notwendige Protokoll hinzubekommen, habe ich eine etwas tricky
Methode im Web gefunden (kenne nix anderes für die Erzeugung des
"Break"), ausprobiert und es funktioniert meist:
1 | if serial.open then
|
2 |
|
3 | serial.baud=50000 //Break erzeugen
|
4 | serial.reset //ist notw. um ohne erneutes Open den Speed zu ändern
|
5 | serial.write chrb(0)
|
6 | serial.xmitwait
|
7 |
|
8 | serial.baud=250000 //Universum senden
|
9 | serial.reset
|
10 | serial.write dmxbuf
|
11 | serial.xmitwait //wartet bis alle Zeichen aus dem Buffer sind
|
12 |
|
13 | end if
|
(chrb ist wie chr, liefert aber garantiert nur 1 Byte, dmxbuf ist ein
String mit der Länge von 512, wobei das erste Zeichen ein chrb(0) ist.)
Das funktioniert auch meistens (oft minutenlang), aber nicht immer. Vor
Allem wenn andere Programme auf dem Mac im Hintergrund aktiv sind,
beginnt der Movinghead gerne unvorhersehbar zu wackeln oder zu blitzen
... was irgendwie nix anderes heissen kann, als dass die 512 Bytes des
Universums nicht sauber rausgehen. Auch die Einkapselung der
Senderoutine mit der Compilerdirektive "no background tasks" brachte
keine Besserung.
Bei der Benutzung von professionellen DMX-Programmen passiert sowas
übrigens nicht (beim gleichen USB-Adapter), also müssen die irgendwie
einen anderen Zugang zu der virtuellen seriellen Schnittstelle haben.
Was ist die Ursache für meine Probleme mit dem serial Socket und wie
kann ich die beheben? Danke für Tips.