DHD Fernsteuerung PFL

Hallo Freunde,

ich hänge gerade an der Umsetzung den PFL Status eines DHD RM3200D mit mAirlist PFL zu verknüpfen. Da das Pult keine Setlogics beim Ein/Ausschalten des PFL Tasters ausgibt, kann ich nicht mit PFL SetLogic arbeiten.
Dank eures Wikis können auch die Rohdaten empfangen/gesendet werden. Siehe hier:

https://wiki.mairlist.com/config:remotecontrol:dhd#scripting

Glücklicherweise übermittelt das DHD beim PFL Tastendruck Rohdaten, die ausgelesen werden könnten:

Unbenannt

Jetzt müsste ich quasi nur noch den Befehl nutzen:

procedure OnDHDCommand(Remote: IDHDRemote; ID: cardinal; Len: integer;
Data0, Data1, Data2, Data3, Data4, Data5, Data6, Data7: byte);
begin
end;

nutzen und den Kanal (08) und den Zustand (01) abgleichen und einen Execute Command ausführen.

Jetzt aber mein Dilemma. Für was steht ID, Len und welche DataX sind welche Werte aus dem Bild. Ich zähle 16 Zeichen als recieved Message, oben habe ich aber nur 7 Datasätze. Über Hilfe wäre ich sehr dankbar, welcher Datenwert was bedeutet und was es mit ID und Len auf sich hat.

Danke euch im Voraus.

Mir kommt es so vor, als sei Len die Länge des gesamten Datenwortes, in Deinem Falle 0000051600080100 also 16 Stellen. Die ID schätze ich auf 516. Data<n> dürften in Deinem Falle

Data0 = 00
Data1 = 08
Data2 = 01
Data3 = 00
Data4…7 = <unassigned>

sein. Um die Daten auszuwerten, nimm obige Prozedur:

procedure OnDHDCommand(Remote: IDHDRemote; ID: cardinal; Len: integer;
Data0, Data1, Data2, Data3, Data4, Data5, Data6, Data7: byte);
begin
  if (ID = 516) AND (Data1 = 8) AND (Data2 = 1) then begin
    // PFL einschalten
  end;
end;

So stelle ich mir das jedenfalls vor. Hab ich recht?
 

Vermutliche Grüße

TSD

1 Like

Fast richtig.

Beachte nur, dass die Angaben im Monitor hexadezimal sind. Der Vergleich muss also ID = $516 lauten.

Und Len ist die Anzahl der tatsächlich empfangenen/belegten Datenbytes (Data0 bis Data7). Im obigen Beispiel müsste es den Wert 4 haben.

2 Likes

Mega. Ihr habt mir sehr weitergeholfen. Dank eurer Hilfe klappt nun der Hinweg vom Pult zu mAirlist 1A.

var
  i: integer;

procedure OnLoad;
  begin
    i := 0;
  end;


procedure OnDHDCommand(Remote: IDHDRemote; ID: cardinal; Len: integer; Data0, Data1, Data2, Data3, Data4, Data5, Data6, Data7: byte);
begin
  if (ID = $516) AND (Data1 = 8) AND (Data2 = 1) then begin
    ExecuteCommand('PLAYER 1-1 EXTRAPFL ON');
  end;
  if (ID = $516) AND (Data1 = 8) AND (Data2 = 0) then begin
    ExecuteCommand('PLAYER 1-1 EXTRAPFL OFF');
  end;
  if (ID = $516) AND (Data1 = 9) AND (Data2 = 1) then begin
    ExecuteCommand('PLAYER 1-2 EXTRAPFL ON');
  end;
  if (ID = $516) AND (Data1 = 9) AND (Data2 = 0) then begin
    ExecuteCommand('PLAYER 1-2 EXTRAPFL OFF');
  end;
  if (ID = $516) AND ((Data1 = 10) OR (Data1 = 11)) AND (Data2 = 1) then begin
    ExecuteCommand('CARTWALL MODE PFL');
    i := i + 1;
  end;
  if (ID = $516) AND ((Data1 = 10) OR (Data1 = 11)) AND (Data2 = 0) then begin
    i := i - 1;
      if i = 0 then begin
        ExecuteCommand('CARTWALL MODE ON AIR');
      end;
  end;
end;

Jetzt möchte ich gern den Rückweg realisieren. Leider bekomme ich dahingehend ein comma (’,’) expected in der Zeile DHDRemote(0).SendPacketRaw. Ich habe da irgendwo einen Denkfehler

procedure OnCartwallOnAirModeChange(OldMode, NewMode: TCartwallOnAirMode);
  begin
if NewMode = oamOnAir then
  DHDRemote(0).SendPacketRaw($516; 4; 0; 10; 0; 0);
//      DHDRemote(0).SendPacket($516; 4; 0; 11; 0; 0);
else if NewMode = oamPFL then
//      DHDRemote(0).SendPacket($516; 4; 0; 10; 1; 0);
  end;

Dann nimm halt Kommata:

procedure OnCartwallOnAirModeChange(OldMode, NewMode: TCartwallOnAirMode);
  begin
if NewMode = oamOnAir then
  DHDRemote(0).SendPacketRaw($516, 4, 0, 10, 0, 0);
//      DHDRemote(0).SendPacket($516, 4, 0, 11, 0, 0);
else if NewMode = oamPFL then
//      DHDRemote(0).SendPacket($516, 4, 0, 10, 1, 0);
  end;

:wink:

Ersetzte Grüße

TSD

// Called when the cartwall switches its on air mode (on air, off air, PFL)
procedure OnCartwallOnAirModeChange(OldMode, NewMode: TCartwallOnAirMode);
  begin
    if NewMode = oamOnAir then begin
      DHDRemote(0).SendPacketRaw($516, 4, 0, 10, 0, 0, 0, 0, 0, 0);
      DHDRemote(0).SendPacketRaw($516, 4, 0, 11, 0, 0, 0, 0, 0, 0);
    end;
    if NewMode = oamPFL then begin
      DHDRemote(0).SendPacketRaw($516, 4, 0, 10, 1, 0, 0, 0, 0, 0);
    end;
  end;

Mit etwas Umschreibearbeit gelang es mir dank deiner Hilfe das Script fehlerfrei zu bekommen.
Bedauerlicherweise führt der Rückweg nicht zum Erfolg und die PFL Taste leuchtet nicht, obwohl es derselbe übertragene Wert ist.

Ich danke euch Tondose und Torben für eure Hilfe.

Oder einfach diese beiden Methoden von DHDRemote(0) benutzen:

procedure SetPFL(iChannel: word; iValue, iAutoMute: boolean);
procedure SetFaderOn(iChannel: word; iValue: boolean);

:wink:

Ach Mensch. Danke Torben. Jetzt klappt die PFL Schiene mit Player und Cartwall reibungslos. Ich hatte ewig nicht gerafft, dass iValue ein boolean Wert ist. Dank eines Scriptes im Forum für ein 4200 hab ich dann die Syntax gecheckt.

Letzte Frage noch zum Post zuvor und deinem Bild. Hatte ich einen falschen Kanal angegeben, oder wie? Lese daraus, dass ich hätte Kanal 116 nehmen müssen?

$516 ist nicht der Kanal sondern die ID des Befehls.

Interessanterweise ist das dast identisch mit $116, nur ein Bit mehr gesetzt. Ich nehme an, dass dieses Bit irgendwie zur Unterscheidung von “PFL setzen” und “PFL wurde gesetzt” benutzt wird.

Okay, danke dir. Da sieht man mal wie schnell es kompliziert werden kann.

Ein letztes Problem zum Thema PFL, welchem ich ratlos gegenüber stehe. Ich möchte mit zwei unterschiedlichen Tasten die ExtPFL der Playlist starten/beenden. Der eine Taster hat die Logic 43 und der andere 642. In der mAirlist Konfig habe ich die 43 als Logic für die ExtPFL hinterlegt und in der Toolbox die Lampen als Logic gesteuert (43 OR 642 active). Sofern ich die ExtPFL mit der Maus starte, Leuchten beide Tasten und erlöschen, sobald ich die ExtPFL schließe. Das klappt schon mal. Allerdings haben die Tasten noch keine ausführende Funktion und da geht das Problem los.

Beide Tasten müssen ja unter Logic -> Befehle das ExecuteCommand erhalten. Also habe ich bei 43 als auch bei 642 sowohl den Start- als auch Stop-Befehl hinterlegt.
Jetzt kommt das Spaßige. Drücke ich eine der beiden Tasten öffnet sich das ExtPFL Fenster zweimal. Das verstehe ich nicht. Es ist doch nur eine Logic bzw. Taste mit einem Befehl verknüpft. Denke ich schon wieder irgendwo unlogisch?

Hallo,

ich konnte das Problem dank mAirlist-eigener Funktionen umgehen. In der Konfig unter Verschiedenes -> Optionen -> “Nur ein einzelner Element-Eigenschaften-Dialog darf gleichzeitig geöffnet sein” aktivieren, den zweiten Taster der Logic 43 (erster Taster) folgen und schon klappt die korrekte Anzeige und Steuerung der PFL mit nur einem Dialog.

Maybe someone is willing to explain this topic to me in English via DM? I also have the RM3200-D and cannot get the PFL part to work. I guess the solution is in this topic…? I also have no idea how the script part works in mAirList. I have read the DHD wiki on this topic but the script part still makes no sense to me :see_no_evil: Thanks!

Hi Rene, welcome to the Forum.

Here is a general explanation for this topic. What do you want to achieve exactly regarding PFL?
 

Prelistened regards

TSD

Hi Tondose, Thanks for helping me. I can find the Faderstart logic for my players and Cartwall with the DHD monitor. In the example below it is 225 or 52. But when I press the PFL button on the mixer I only see:
Receive: 00000516 00 03 01 00
There is no (SETLOGIC XXX X), the code I need to use for PFL. So I don’t know how to find the PFL Logic to function correctly.

Now I learned the option “Background scripts” (I had not noticed it before…) I have PFL working with this script:

var
  i: integer;

procedure OnLoad;
  begin
    i := 0;
  end;


procedure OnDHDCommand(Remote: IDHDRemote; ID: cardinal; Len: integer; Data0, Data1, Data2, Data3, Data4, Data5, Data6, Data7: byte);
begin
  if (ID = $516) AND (Data1 = 3) AND (Data2 = 1) then begin
    ExecuteCommand('PLAYER 1-1 PFL ON');
  end;
  if (ID = $516) AND (Data1 = 3) AND (Data2 = 0) then begin
    ExecuteCommand('PLAYER 1-1 PFL OFF');
  end;
  if (ID = $516) AND (Data1 = 4) AND (Data2 = 1) then begin
    ExecuteCommand('PLAYER 1-2 PFL ON');
  end;
  if (ID = $516) AND (Data1 = 4) AND (Data2 = 0) then begin
    ExecuteCommand('PLAYER 1-2 PFL OFF');
  end;
  if (ID = $516) AND (Data1 = 5) AND (Data2 = 1) then begin
    ExecuteCommand('PLAYER 1-3 PFL ON');
  end;
  if (ID = $516) AND (Data1 = 5) AND (Data2 = 0) then begin
    ExecuteCommand('PLAYER 1-3 PFL OFF');
  end;
  if (ID = $516) AND ((Data1 = 6) OR (Data1 = 11)) AND (Data2 = 1) then begin
    ExecuteCommand('CARTWALL MODE PFL');
    i := i + 1;
  end;
  if (ID = $516) AND ((Data1 = 6) OR (Data1 = 11)) AND (Data2 = 0) then begin
    i := i - 1;
      if i = 0 then begin
        ExecuteCommand('CARTWALL MODE ON AIR');
      end;
  end;
end;

But I don’t hear any sound, some extra details; My PFL is on different sound channels for all players, since I use a MADI interface between the DHD and my computer I have much audio channels left. I thought this was easy to also use PFL when a track is playing (to hear the end of the current playing track). But this somehow makes my setup much more complicated I guess?

First of all we should have a look at the mAirList audio device configuration, particularly its PFL bits. Nevertheless, there could be some issues with the DHD’s internal routing. Where do you want to have the PFL signal come out of? Does your mixer sport any separate PFL speaker?

Having the PFL return routed separately for each player is no common practice, you’re seeing right now by yourself: you are facing problems what to do with all these signals inside your mixer. My recommendation is to route one single PFL signal back to your mixer, wherein you scoop it to your PFL device.

In combination with the above script and these settings my PFL works as it should:

I don’t have a seperate PFL speaker. I can listen to the PFL signal via the CRM and my headphones.

But I prefer to have the PFL part over other channels (but still audible over the CRM and headphones), like this:

Ofcourse then there is no sound when I click the PFL button with the above script, so I guess I need to do some configuration changes on the DHD?

Okay, if it is working the first way, then you will have to have a look inside your DHD configuration. (Yor preference over the latter configuration is wise, so you can prelisten an audio which is on air.)

However, to simplify matters I strongly recommend to choose only one single PFL channel for all of the four Playback devices (MADI 17+18, for instance). More is not necessary, as you will prelisten only one single channel at a time (or mAirList will sum up multiple PFLs anyway, respectively).

Routed regards

TSD