Art-Netの仕様の解説とRaspberryPiで扱った記録です。
現物の開発はこれからですが、仕様について調べた結果を自分向けのメモを兼ねて書いておきます。不定期にて内容が増えていくと思われます。
目次
ArtisticLicence.comが公開している「DMX over EtherNet」の一種です。
「DMX over EtherNet」とはDMX512をEtherNetで送受信する方法の総称です(レガシーDMX512をLANケーブルを使って送るだけの使い方は含まれません)。Art-Net以外にも「ACN」「sACN」「ETC-Net2」「ETC-Net3」「MA-Net」などがあります。一部は仕様が非公開だったり機器の製作・販売にはライセンス使用料を求められたりします。
Art-Netは仕様が公開されて無料で使える「DMX over EtherNet」です。
以下、ネットワーク用語が沢山出てきますが、ここでは細かく解説致しませんのでご了承ください。
2021年現在、4世代あります。3世代目のArt-Net3で大きな変更がされておりますが、上位互換ですので下位仕様に合わせて設定すれば世代が違っても共存出来ます。私の考えですが、Art-Net3を前提に装置を製作し、初代Art-Netに合わせた使い方をするのが無難な用法だと思います。
Art-Netは複数のDMX512を1本のEtherNetで送受信出来、直接受信も可能ですが、ノードと呼ばれる装置を用いて任意のユニバースをレガシーDMX512として取り出すことも可能です。ノードの存在が最大のメリットでしょう。もちろん、送受信機間でユニバースを合わせることはユーザーにとって重要な設定要素です。
ハードウェアはIPv4のEtherNetを通せるネットワーク装置です。TCP/IPやUDP/IPを通せるネットワークと言ってもいいでしょう。数ユニバースなら10BaseTやwi-fiなどの比較的遅いネットワークでも送れるようです。
データはUDP/IPと呼ばれる手法で送受信します。UDPは機器間のデータの受け渡しの方法、IPは機器間を結びつける方法を表しています。UDPはユーザーが意識する必要がないことですが、IPにおけるアドレス(IPアドレス)はユーザーが適切に設定しなければなりません(自動的に設定されるケースもあります)。
送受信方法(送受信モードと呼んだ方が伝わりやすいでしょうか)には2種類あります。「マルチキャスト(ブロードキャスト)」と「ユニキャスト」です。動作の違いを説明すると長くなるので割愛しますが、送受信機間でこの設定が合っていないと動作しませんのでユーザーにとっても重要な設定要素です。
ユーザーは「IPアドレス」「送受信モード」「ユニバース」の3つを設定して使うと思ってください。
以下、Art-Net3を基準に書きます。
仕様書によると、マルチキャストなら最大40ユニバース、ユニキャストなら1000BaseTで4000ユニバース以上とあります。DIY規模では40ユニバースもあれば余る程なので問題にならない上限だと思います。
DMX512自体にスロットのアドレスがある様に、複数のユニバースを扱うなら識別する何かを割り振らないといけません。
Art-Netには Net(ネット)/SubNet(サブネット)/Universe(ユニバース)というユニバースのアドレッシングが定義されています。大雑把に言うなら、送信側と受信側でこれらを合わせればいいのです。
分かれてはいますが、実際のところは15bit長の数値で表すユニバースのアドレスです。
※ 初代Art-NetとArt-Net2にはNet(ネット)がありません。16bit長のフィールド<Universe>で一括りにされ、下位8bitをSubNet(サブネット)/Universe(ユニバース)と同様に使います。Art-Net3から拡張された要素ですが、データのバイト長は同じなので、Net(ネット)を0x00とすれば新旧の互換性があります。下記のArt-Netのパケットプロトコルを参照してください。
IPv4のEtherNetが通るネットワーク装置を用います。
俗に言うLANですが、物理的な形式は限定されていません。RJ45ケーブル(LANケーブル)を使うLANだけでなく、インターネット経由でもwi-fiでも理屈では使えます。
IPv4を用います。クラスAと呼ばれるアドレスの一部です。
ただし、インターネットなどに接続しない、閉じたネットワークで使用しないといけません。インターネットを通す場合はVPNを用いましょう。
上記の範囲内であれば任意のアドレスを用いて構わないのですが、ネットワーク内での重複は避けなければなりません。
割り当ての方法は2つあります。
※ OEMコードはArtisticLicence.comが発行するベンダーコードです。Art-Net装置のメーカー(ベンダー)を表すコードですから、一般ユーザーが取得する必要はありません。DIYとはいえ、自作するなら必要かもしれません。
重複の可能性を完全に排除出来ませんが、重複の可能性は宝くじで上位を取るくらいだそうです。
OEMコードが分かっていれば自動設定できることなので、ユーザーが手入力しなければならない機器は少ないと思います。装置を作る際に必要なこと、くらいに思っていいでしょう。
算出に必要な情報
これらを使ってIPv4アドレスの2つ目、3つ目、4つ目の数値を得ます。
例として次の値を使います。ArtisticLicence.comの仕様書にある内容です。
IPv4の4つの数値は次の様に得ます。
固定値 0x1936 です。10進数なら 6454 です。
この記事ではマルチキャストを扱いますので、ネットワーク的にはブロードキャスト通信を使います。ブロードキャストとは同じゾーンのすべての機器に一斉送信する方法です。
ブロードキャストアドレスがデータの送り先です。2.255.255.255 又は 10.255.255.255 です。
通常通信ですと特定のアドレスに向けて送信しますが、この方法ならとにかく全部が全部に送られます。ユニバースが多いと受信側に無用なデータ受信を強いてしまいますが、送信側にとっては負荷が少なく、装置の構築も簡単な方法です。
機器間のデータのやり取りの方法です。同類のTCPは相手に届いたデータが正しいか確認しながら行う丁寧な送受信方法ですが、UDPは相手に正しく届いたかなど気にせず一方的に送り付ける荒っぽい方法です。DMX512は後者と同類です。
一抹の不安を感じる半面、送受信の手続きが簡単なので負荷が少なく処理速度が速いのが特徴です。DMX512のデータは常に変化し保存を前提としませんから、今間違っていても次が正しければ済むのでUDPを使うことにメリットがあります。
Art-NetはUDP/IPを用いて送受信されますのでEtherNet内ではパケットという単位でデータが扱われます。そのパケットの中身について説明します。
パケットプロトコルには何種類かありますが、今回扱うのは「ArtDmx」だけです。
ArtDmx以外はユニキャストやネットワーク管理で用いるパケットプロトコルですが、マルチキャストでDMX512のデータを送るのならArtDmxだけでも機能します。
パケットプロトコル:ArtDmx (Art-Net3基準) | ||||||
フィールドNo. | 名前 | データ種類 | データ長 | ビット | 説 明 | |
初代Art-Net Art-Net2 | Art-Net3,4 | |||||
1 | 1 | ID | ASCII テキスト | 8byte | - | 8バイトのASCIIテキストでArt-Netのパケットだと宣言する。 'Art-Net'+0x00 文字コード:0x41 0x72 0x74 0x2d 0x4e 0x65 0x74 0x00 |
2 | 2 | OpCode | Int16 2バイト整数 | 2byte | - | 別表に定義されたOpCodeを用いてパケットの種類を宣言する。 ArtDmxでは 0x5000 を用いる。 リトルエンディアンなので、0x00 0x50 の順で送信される。 |
3 | 3 | ProVerHi | Int8 1バイト整数 | 1byte | - | Art-Netプロトコルリビジョン番号の上位バイト ※ データとしては次のフィールド<ProVerLow>と合わせた2バイト整数である。 |
4 | 4 | ProVerLow | Int8 1バイト整数 | 1byte | - | Art-Netプロトコルリビジョン番号の下位バイト ※ ProVerの送信は、フィールド<ProVerHi>とフィールド<ProVerLow>を合わせ、ビッグエンディアンの2バイト長のデータだと考えていい。 ※ 現在値は14(0x000E)である。フィールド<ProVerHi>は0x00、フィールド<ProVerLow>は0x0Eとなる。 |
5 | 5 | Sequence | Int8 1バイト整数 | 1byte | - | パケットの順番を0x00から0xFFの範囲でローテーションでカウントする。パケットが順番通りに届かない場合に補正をするためのカウンタ。 1バイトのインクリメント・カウンタなので0xFFの次は0x00となる。 用いなくても構わないらしく、その場合は固定値(0x00)とする。 |
6 | 6 | Physical | Int8 1バイト整数 | 1byte | - | DMX512が入力された物理ポートの番号を表す。 Art-NetのNet(ネット)/SubNet(サブネット)/Universe(ユニバース)を表す物ではない。 ※ 受信機にとってはNet/SubNet/Universeが絶対であり、送信機側のハードウェアの都合を受信機が認識する必要は無いと思うので、個人的には「蛇足データ」の様に思える。 ※ 今後の検証によるが、0x00を用いれば良いと思われる。 |
7 フィールド <Universe> という名前で Int16 2バイト整数 | 7 | SubUni | Int8 1バイト整数 | 1byte | 7-4 | 4bit(0-15の数)でSubNet(サブネット)を表す。 |
3-0 | 4bit(0-15の数)でUniverse(ユニバース)を表す。 | |||||
8 | Net | Int8 1バイト整数 | 1byte | 7 | ※ 使用しない。常に0。 | |
6-0 | 7bit(0-127の数)でNet(ネット)を表す。 ※ Art-Net3以降で使われるフィールド。 [注意] 初代Art-NetおよびArt-Net2ではフィールド<Net>とフィールド<SubUni>を合わせてInt16(リトルエンディアン)のフィールド<Universe>として扱う。 この場合、下位バイトはフィールド<SubUni>と同じ、上位バイト(Art-Net3のフィールド<Net>)は固定値(0x00)とする。 | |||||
8 | 9 | LengthHi | Int8 1バイト整数 | 1byte | - | フィールド<Data>のデータ長を表す。フィールド<Length>と合わせた2バイト整数の上位バイト。 データ長が512スロットなら0x02となる。512=0x0200 |
9 | 10 | Length | Int8 1バイト整数 | 1byte | - | フィールド<Data>のデータ長を表す。フィールド<LengthHi>と合わせた2バイト整数の下位バイト。 データ長が512スロットなら0x00となる。ビッグエンディアンの2バイト長のデータと考えていい。 |
10 | 11 | Data | Int8 1バイト整数 | 1-512 byte | - | DMX512のスロットデータ。可変長。 StartCodeは含まれない(?)。 |
※ 実質2バイト数として扱うフィールドが幾つかありますが、エンディアンが統一されていないので注意が必要です。
Art-Net機器を作ってみよう!という無謀ネタです。
Art-Netの部分だけなら、LinuxサーバーとLANを設定出来てプログラムを書けるプロなら数時間で組めると思います。パケットデータを一方的に送って勝手に受けるだけですから。
レガシーDMX512のデバイスまで作ると範囲は広がりますが、幸いレガシーDMX512の製作だけなら実績があります。
無料で使え、他と比べて簡素で、対応している調光卓が多いからです。ちゃんと動く中華電器のノードが安価なのもあります。
RaspberryPiをRasbianで稼働させPython3でプログラムします。安価なマイコンボードですが、ウェブカメラも構成できる処理能力がありますので、動画に比べたら誤差にも等しいデータ量のDMX512を扱うのは楽勝です。私個人が楽勝でないことは言うまでもありませんが・・・
RaspberryPiの概要は この記事 が分かりやすいでしょうか。
・・・以下、まとめ中