Art-Netの規格の解説とRaspberryPiで扱った記録です。
執筆中です。
目次
IPv4のEtherNetです。俗に言うLANです。
ネットワーク装置はIPv4のEtherNetが通れば何でも構わないようです。十分な通信速度があれば、インターネット経由でもwi-fiでもいけると思います。
IPv4を用います。Aクラスと呼ばれるプライベートアドレスの一部を用います。
原則として範囲内であれば任意のアドレスを用いて構わないが、ネットワーク内での重複は避けなければならない。
割り当ての方法は2つある。
Art-NetはUDP/IPを用いて送受信されますのでEtherNet内ではパケットという単位でデータが扱われます。そのパケットの中身について説明します。
次の「ArtDmx」以外にもパケットプロトコルが幾つかありますが、これらはユニキャストやネットワーク管理で用いられます。
今回はマルチキャストを使いますので、扱うのは「ArtDmx」だけです。
パケットプロトコル:ArtDmx | ||||||
フィールド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 | 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ではフィールドが存在しない。 | |||||
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バイト数として扱うフィールドが幾つかありますが、エンディアンが統一されていないので注意が必要です。