Art-Netの規格の解説とRaspberryPiで扱った記録です。

 執筆中です。

目次

 

Art-Netとは?

 複数のDMX512を1本のEtherNetで一斉に送ります。IPv4のEtherNetを通せるネットワークなら何でも使えます。数ユニバースなら10BaseTなどの遅いネットワークでも送れるようです。

 送信方法には大きく分けて2つあります。ブロードキャストで一斉送信する「マルチキャスト」、個別に送る「ユニキャスト」です。

 対応状況は当初からあるマルチキャストに軍配が上がります。どのArt-Net機器もマルチキャストなら100%対応する様です。

 ここではマルチキャストを対象とします。マルチキャスト、すなわちブロードキャストがどんなものかを説明するのは大変なので割愛します。

 以下、ネットワーク用語が沢山出てきますが、ここでこれらの解説は致しませんのでご了承ください。

Art-Netの規格

 以下はArt-Net3をベースに書きます。

どれくらいのDMX512が送れるのか

 規格書によると、マルチキャストなら最大40ユニバース、ユニキャストなら1000BaseTで4000ユニバース以上とあります。DIY規模では40ユニバースもあれば余る程なので問題にならない上限だと思います。

Universeのナンバリング

 DMX512自体にスロットのアドレスがある様に、複数のDMX512を送るならユニバースごとにアドレスを割り振らないといけません。

 Art-Netには Net(ネット)/SubNet(サブネット)/Universe(ユニバース)というユニバースのアドレッシングが定義されています。大雑把に言うなら、送信側と受信側でこれらを合わせればいいのです。

 分かれてはいますが、実際のところは15bit長の数値で表すユニバースのアドレスです。

 ※ 初代Art-NetとArt-Net2の設定は8bit長でNet(ネット)がありません。16bit長のフィールド<Universe>で一括りにされ下位8bitを使います。
  Art-Net3から拡張された要素ですが、全体のバイト長は同じなので、Net(ネット)を0x00とすれば新旧の互換性があると言えます。

物理装置

 IPv4のEtherNetです。俗に言うLANです。

 ネットワーク装置はIPv4のEtherNetが通れば何でも構わないようです。十分な通信速度があれば、インターネット経由でもwi-fiでもいけると思います。

IPアドレス

 IPv4を用います。Aクラスと呼ばれるプライベートアドレスの一部を用います。

 プライベートアドレスですから、インターネットなどに接続しない、閉じたネットワークで使用しないといけません。インターネットを通す場合はVPNを用いましょう。

IPアドレスの範囲

機器へのIPアドレスの割り当て

 原則として範囲内であれば任意のアドレスを用いて構わないけれど、ネットワーク内での重複は避けなければなりません。

 割り当ての方法は2つあります。

 ※ OEMコードはArt-Net装置を作ったメーカーが持っているコードを用います。一般ユーザーが取得する必要はありません。自作するならArtisticLicence社に申請して取得します。

IPアドレスの算出方法

 規格書の丸写しですが次の通りです。

 必要な情報

 これらを使ってIPv4アドレスの2つ目、3つ目、4つ目の数値を得ます。

 仮の数値として次を使います。

◆ IPv4アドレスの1つ目の数値

◆ IPv4アドレスの2つ目の数値

◆ IPv4アドレスの3つ目の数値

◆ IPv4アドレスの4つ目の数値

 これらを組み合わせて次の数値になります。

 1つ目のxの値は2または10です。

ポート番号

 固定値 0x1936 です。10進数なら6454です。

疑問

 「ネットワークスイッチ」の意味が不明。現実にはどちらかで統一すれば使えるみたい。

送受信の考え方

マルチキャスト、ブロードキャスト

 ここではマルチキャストを扱いますが、ネットワーク的にはブロードキャスト通信を使います。ブロードキャストとは同じゾーンのすべての機器に一斉送信する方法です。

 ここまでにもちょくちょく出てきたブロードキャストアドレスがデータの送り先です。2.255.255.255又は10.255.255.255です。

 通常通信ですと特定のアドレスに向けて送信するのですが、この方法ならとにかく全部に全部が送られます。ユニバースが多いと受信側に余計な負荷をかけてしまいますが、送信元にとっては軽い方法です。

UDP送信

 機器間の通信のやり取りの方法です。TCPは相手に届いたか間違っていないか確認しながら行う丁寧な送信方法ですが、UDPは相手に届いているかなどお構いなしに一方的に送り付ける荒っぽい送信方法です。

 半面、送受信の手続きが簡単なので速度が速く負荷が少ないのが特徴です。DMX512のデータは常に変化し保存を前提としないデータですから、今間違っても次が正しければ済むのでUDPを使うことにメリットがあります。

 詳細は本一冊になるような内容なので割愛します。

Art-Netのパケットプロトコル

 Art-NetはUDP/IPを用いて送受信されますのでEtherNet内ではパケットという単位でデータが扱われます。そのパケットの中身について説明します。

 次の「ArtDmx」以外にもパケットプロトコルが幾つかありますが、これらはユニキャストやネットワーク管理で用いられます。

 今回はマルチキャストを使いますので、扱うのは「ArtDmx」だけです。

パケットプロトコル:ArtDmx (Art-Net3基準)
フィールドNo.名前データ種類データ長ビット説  明
初代Art-Net
Art-Net2
Art-Net3,4
11IDASCII
テキスト
8byte-8バイトのASCIIテキストでArt-Netのパケットだと宣言する。
'Art-Net'+0x00
文字コード:0x41 0x72 0x74 0x2d 0x4e 0x65 0x74 0x00
22OpCodeInt16
2バイト整数
2byte-別表に定義されたOpCodeを用いてパケットの種類を宣言する。
ArtDmxでは 0x5000 を用いる。
リトルエンディアンなので、0x00 0x50 の順で送信される。
33ProVerHiInt8
1バイト整数
1byte-Art-Netプロトコルリビジョン番号の上位バイト
※ データとしては次のフィールド<ProVerLow>と合わせた2バイト整数である。
44ProVerLowInt8
1バイト整数
1byte-Art-Netプロトコルリビジョン番号の下位バイト
※ ProVerの送信は、フィールド<ProVerHi>とフィールド<ProVerLow>を合わせ、ビッグエンディアンの2バイト長のデータだと考えていい。
※ 現在値は14(0x000E)である。フィールド<ProVerHi>は0x00、フィールド<ProVerLow>は0x0Eとなる。
55SequenceInt8
1バイト整数
1byte-パケットの順番を0x00から0xFFの範囲でローテーションでカウントする。パケットが順番通りに届かない場合に補正をするためのカウンタ。
1バイトのインクリメント・カウンタなので0xFFの次は0x00となる。
用いなくても構わないらしく、その場合は固定値(0x00)とする。
66PhysicalInt8
1バイト整数
1byte-DMX512のデータが入力された物理ポートの番号を表す。
Art-NetのNet(ネット)/SubNet(サブネット)/Universe(ユニバース)を表す物ではない。
※ 受信機にとってはNet/SubNet/Universeが絶対であり、送信機側のハードウェアの都合を受信機が認識する必要は無いと思うので、個人的には意味が無い「蛇足データ」の様に思える。
※ 今後の検証によるが、0x00を用いれば良いと思われる。
7
フィールド
<Universe>
という名前で
Int16
2バイト整数
7SubUniInt8
1バイト整数
1byte7-44bit(0-15の数)でSubNet(サブネット)を表す。
3-04bit(0-15の数)でUniverse(ユニバース)を表す。
8NetInt8
1バイト整数
1byte7※ 使用しない。常に0。
6-07bit(0-127の数)でNet(ネット)を表す。
※ Art-Net3以降で使われるフィールド。
[注意] 初代Art-NetおよびArt-Net2ではフィールド<Net>とフィールド<SubUni>を合わせてInt16(リトルエンディアン)のフィールド<Universe>として扱う。
この場合、下位バイトはフィールド<SubUni>と同じ、上位バイト(Art-Net3のフィールド<Net>)は固定値(0x00)とする。
89LengthHiInt8
1バイト整数
1byte-フィールド<Data>のデータ長を表す。フィールド<Length>と合わせた2バイト整数の上位バイト。
データ長が512スロットなら0x02となる。512=0x0200
910LengthInt8
1バイト整数
1byte-フィールド<Data>のデータ長を表す。フィールド<LengthHi>と合わせた2バイト整数の下位バイト。
データ長が512スロットなら0x00となる。ビッグエンディアンの2バイト長のデータと考えていい。
1011DataInt8
1バイト整数
1-512
byte
-DMX512のスロットデータ。可変長。
StartCodeは含まれない(?)。

 ※ 実質2バイト数として扱うフィールドが幾つかありますが、エンディアンが統一されていないので注意が必要です。

Art-NetをRaspberryPiで扱うには

基本方針

 RaspberryPiをRasbianで稼働させPython3でプログラムします。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS