【Max】USBDMXProでDMXを送受信する時のデータの意味をまとめておく

どーも、ぐるたか@guru_takaです。

USBDMXProとMaxでDMX送受信する機会があり、自前で実装しました。そのときに学んだことを備忘録としてまとめます。

MEMO
有名どころのDMX変換パッチに「dmxusbpro – DMX 512 external for Max」がありますが、以下3つの理由で不採用にしました。

  • 情報が古い
  • 受信側に対し、時々不具合っぽいのがある
  • 商用ではコンタクト必要

DMX送信について

DMX送信では、以下のような配列を送ると、指定したDMXアドレスに値を送信できます。

下記は最低限の配列値になります。

送信する配列
126 6 2 0 0 $1 231

意味は以下の通りです。

126 メッセージ開始の合図(16進数:0x7E)
6 メッセージのタイプ
2 DMXチャンネル数のLSB
(配列内の送信チャンネル数+1を256で割ったときの余り)
0 DMXチャンネル数のMSB
(配列内の送信チャンネル数+1を256で割ったときの商)
0 DMXチャンネル0の値(使用しないが、常に存在)
$1 DMXチャンネル1に送信する変数値
231 メッセージ終了の合図(16進数:0xE7)

上記で紹介したのは、DMXの全体のチャンネル数が1としたものです。もし2つの場合は、126 6 3 0 0 $1 $2 231となります。

参考 Pure Data vs Enttec Pro

詳細は公式のDMX USB Pro Widget API Specificationをご覧ください。色々なメッセージのタイプも載っています。

以下、公式ドキュメント内にあるDMX USB Pro Widget API Specificationの説明テーブルです。

参考 DMX USB Pro Widget API Specification 1.44ENTTEC
MEMO
500chに向かってDMX送信するときは、126 6 245 1 0 …となるので、注意しましょう!

DMX受信について

DMX受信のデータ配列はこちらになります。下記は最低限の配列値です。

送信する配列
126 5 3 0 0 0 $1 231

意味は以下の通りです。

126 メッセージ開始の合図(16進数:0x7E)
5 メッセージのタイプ
3 DMXチャンネル数のLSB
(配列内の送信チャンネル数+2を256で割ったときの余り)
0 DMXチャンネル数のMSB
(配列内の送信チャンネル数+2を256で割ったときの商)
0 DMXチャンネル0の値(使用しないが、常に存在)
0 DMXの受信ステータス(0:正常、1:異常)
$1 DMXチャンネル1に送信された変数値
231 メッセージ終了の合図(16進数:0xE7)

送信と異なるのは、メッセージのタイプと、DMX受信ステータスがあることでしょう。こちらも、公式のDMX USB Pro Widget API Specification 1.44に記載されていますので、チェックしてみると良いです。

公式ドキュメントでは、DMX受信にて、以下のようにLabel5と書かれいており、また受信ステータスの詳細もあります。

受信については、日本語での情報が殆どない中で、以下のopenFrameworksでのDMX受信を確認するソースが参考になりました。実際にMaxでシリアル通信して、受信データを確認してみると、直感的に理解できるので、オススメですよ!
参考 Receive DMX-512 with openFrameworksnakayasu.com

最後に

以上になります。データの送受信に関して理解するときは、公式ドキュメントを読むのが1番の近道かもしれないなぁ…と思いました。

それくらい日本語や海外の情報が少なかったです。特に受信側はほぼ皆無で泣きそうになりました。なんだかんだ最後に頼れるのは、公式ですね!

DMX送信のパッチは以下のGitHubが参考になりますので、気になる方は参考にしてみて下さい!
参考 thomasfredericks/DMX_USB_PRO_MAXGitHub

コメントを残す