DMX-Sender mit Xojo: Serial Port instabil?

OP (Firma: Q3) #4969618
Lesenswert?

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.
Gast #4969808
Lesenswert?

Die Senderoutine muss in einen eigenen prozess der mit sehr hoher 
priorität im Hintergrund läuft. kommunikation zwischen dem hauptprogramm 
und dem Prozess über shared-memory...dazu ein ein output buffering etc.

Ich befürchte mit deiner "spielzeugsprache" bekommt man das nicht ohne 
weiteres hin..

Professionelle DMX Interfaces erledigen die Erzeugung des DMX Frames im 
Interface selber..so vermeidet man Timing-Probleme mit dem Host System, 
die trotz der o.g. Optionen auftreten können.
Persönliche Seite #4969827
Lesenswert?

Statt mit Kanonen auf Spatzen zu schießen könnte man hier auch direkt 
mit dem USB-Seriell-Adapter kommunizieren und die zu übertragenden Daten 
an der  Betriebssystem-API vorbei transferieren.

Der FT232R ist in der libftdi ausreichend gut dokumentiert.

https://www.intra2net.com/en/developer/libftdi/documentation/group__libftdi.html

Break & Co. können mit ftdi_set_line_property2 gesendet werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren