照明ネットワーク

照明のネットワークに関する記事を書きます。照明の通信を行うのに使えるツールなども作成していく予定です。

【実験部屋】ネットワーク設定確認デモ

f:id:aisakakun:20210921010542j:plain
Gerd AltmannによるPixabayからの画像
照明ネットワークに関する情報も徐々に蓄積されてきておりますが、現場で通信ができない時などはその原因の調査をする技術や知識がなければ困惑することが多いと思います。

これまでTwitterや記事にて照明ネットワークやネットワークそもそもに関する内容について投稿してきました。
show-network-lab.hateblo.jp

今回の記事では、通信の基礎である「ネットワークの設定」について正しく理解できているかを確認できるものを作成しましたので、紹介したいと思います。最初は理解できなくとも、何度も選択肢から選んでいくうちに学んでいくことができると思います。ぜひご活用ください。

ネットワーク設定確認デモ

手順

  1. 送信元IPアドレスを選択肢から選んでください
  2. サブネットマスクを選択肢から選んでください
  3. 送信先IPアドレスを選択肢から選んでください
  4. サブネットマスクを選択肢から選んでください
  5. 「判定!」ボタンを押してください
  6. 「結果」以下にその結果が表示されます。










判定!

結果

未判定

「正常なネットワーク設定です。」以外の文言が表示された場合はパラメータを変更後再び試していただくなどを行う必要があります。

まとめ

文章を読むだけではやはり理解に苦しむこともあると考え、このようなものを作成しました。体験を通してその理解のお手伝いができればと考えました。今後も照明のネットワークに関する記事を更新していきます。

Art-Netについて

show-network-lab.hateblo.jp

sACNについて

show-network-lab.hateblo.jp

DMX512について

show-network-lab.hateblo.jp

【システム構成】SUPERBOWL Halftime

f:id:aisakakun:20200719015750p:plain
www.livedesignonline.com

ネットワーク設定

IPアドレス設定

設置箇所・スペアによりIPアドレス設定が異なります。IPアドレスを「10.*.*.*」で構成されているのはArt-Netが使用されているためでしょう。下記がVia12のIPアドレス一覧です。

f:id:aisakakun:20200719005215p:plain
Via12 IPアドレス
f:id:aisakakun:20200719005251p:plain
Via12 スペア IPアドレス

同じ場所にメインとスペアが設置されている場合、3セグメント目を変更し、4セグメント目を同じにすることで統一感を持たせていると思います。

重要注意項目

重要注意項目内容が非常に参考になります。

・全てのS400はバージョン6.0で使用してください

→バージョンを統一していない場合、動作が同一でない可能性があります。

・光ファイバーは、全長に関係なく5本を超えるケーブルで構成されてはなりません

→延長をすると予想外の信号ロスなどに繋がる可能性を懸念して、というのが一つ挙げられます。

・イーサコンやCAT5Eカプラはありません

→イーサコンやCAT5Eカプラを使用しないのはリスクがあると考えられている(?)

・RDMを演目中に使用しないでください。RDM検索中のDMXデータには信頼性がありません

→DMXとRDMは同じ信号線を使用するためです。

・全てのVIA12スイッチはそれぞれ独自のIPアドレスにし、同一ソフトウェアをロードしてください

→同じIPアドレスに設定すると通信がうまくいきません。ソフトウェアは同一でなければ同様の動作をしない可能性があります。

・全てのVIA12ポートスピードは"Auto Negotiate"にセットしてください

→基本設定と思いますが、設定箇所のため記載しているのだと思います。
参照:LDI Show Super Bowl LIV Halftime Show Lighting Network System(Important System Notes!より
|

まとめ

大規模のネットワークシステムの例としてSUPERBOWL Halftimeを挙げました。

sACNの特徴【優先度制御】

f:id:aisakakun:20200621030134p:plain
sACNの特徴の一つ:データパケットの優先度について説明します。

機能の目的

一方の卓の入力がなくなった時、もう一方の卓の入力を採用することを目的とします。

概略

ノードなどの受信者は同じユニバースの信号を受信した場合、それを区別する方法がありません。そこで、優先度を設定することで受信者はどちらのユニバースの値を使用したら良いのかを判断することができます。

詳細

優先度の範囲
最も低い優先度 最も高い優先度
0 200

優先度が高い信号が受信者に採用されます。例えば、優先度100,優先度101の卓が存在する場合、優先度101の卓の出力が採用されます。

f:id:aisakakun:20200621024142p:plain
優先度の異なる二つの卓から同一系統の入力がある場合

なぜバックアップとして使えるのか

優先度100で出力している卓と優先度101で出力している卓が存在する場合、既に説明した通り優先度の高い卓からの入力がそのまま採用されます。しかし、優先度の高い卓からの入力が何らかの理由(LANの接触、卓電源オフ等)で途絶えた場合、優先度の低い卓からの入力が採用されるようになります。一つの卓からの入力が途絶え、別の卓からの入力が使用可能になるため、バックアップとして使用可能です。

f:id:aisakakun:20200621024325p:plain
優先度が高い卓からの入力が何らかの理由でなくなった時の振舞い

対応していない卓について

優先度に対応していない卓などについては、デフォルトで優先度が100にするように規定されています。(E1-31-2016 p11<6.2.3 E1.31 Data Packet: Priority>)そのため、優先度が同じになります。優先度が同じな場合は、優先度がない場合と同じように出力されてしまいます。

注意

優先度の概念について理解してから使用することをオススメします。優先度1は優先度100より優先的に使用されません。

最後に

下記フリーソフトで優先度制御を試すことができます。
・sACNView
ぜひ試してみてください!

【実験部屋】M5StackでArt-Netをブロードキャスト出力する【M5Stack】

f:id:aisakakun:20200209141647p:plain

目的

M5Stackを使用しArt-NetのDMXパケット「ArtDMX」をWi-Fiで送信させること。

要求仕様

・メニュー画面の操作で「ブロードキャスト」「ユニキャスト」の選択をすることができる。
・メニュー画面の遷移を行うことができる。
・Art-Net出力(ArtDMX)の送信・停止を行うことができる。

結果

f:id:aisakakun:20200209141729p:plain

準備物

・通信確認用のPC(M5Stackが2つある場合は、前回作成のプログラム使用し、ユニバースを合わせれば受信可能です。)
・M5Stack Basic development kit

通信確認用PC

wiresharkが入っていれば、起動させることで準備完了です。その際PCの設定をIPアドレス・サブネットマスクをArt-Net規格に従った設定とすることを忘れないようにしてください。

M5Stack側(ソースコード)

ソースコードについてですが、要求仕様にも記載しましたように、メニュー選択も付け加えました。コードとしては、下記のような構成になっています。それぞれ機能毎にファイルを分けておりますので、必要に応じてコード削減など行えば、自由に使用することができますのでご活用ください。

コード名 役割
ArtNetSend_Broad_Uni.ino mainコード
connectWifi.cpp Wifi接続用のコード
firstMenuOpration.cpp 最初のメニュー:ブロードキャスト・ユニキャスト選択を行う画面
secondMenuOperation.cpp 二つ目のメニュー:ブロードキャスト・ユニキャスト選択に応じた送信内容画面の表示を行う画面
thirdMenuOperation.cpp 三つ目のメニュー:Art-Net(ArtDMX)出力を行うことができる画面。ボタン押下により、送信・停止が可能
ArtNetSend_Broad_Uni.ino : mainコード

mainコードです。各メニューに遷移する中心のコードになっています。

#include <M5Stack.h>

int menuPhase = 0;
int firstMenuSelectNum = 0;
int secondMenuSelectNum = 0;
//int thirdMenuSelectNum = 0;
int artnetSendFlag = 0;

void FirstMenu(void);
int SelectButton(int firstMenuSelectNum);
void SecondMenu(int firstMenuSelectNum);
int SecondSelectButton(int secondMenuSelectNum);
int ThirdMenu(int firstMenuSelectNum,int artnetSendFlag);
void ThirdSelectButton(void);

void setup() {
  // put your setup code here, to run once:
  M5.begin();
  M5.Lcd.setTextSize(3);
  firstMenuSelectNum = 0;
  secondMenuSelectNum = 0;
//  thirdMenuSelectNum = 0;
  FirstMenu();
}

void loop() {
  // put your main code here, to run repeatedly:
  //ボタン情報をアップデート
  M5.update(); 
  ///メニュー切り替え
  //メニュ-画面:0(FirstMenu)でボタンCが押された時、メニュー画面:1(Second Menu)へ遷移
  if(menuPhase == 0 && M5.BtnC.wasPressed()){
    M5.Lcd.clear();
    menuPhase = 1;
  //メニュ-画面:1(SecondMenu)でボタンCが押された時、メニュー画面:2(Third Menu)へ遷移
  }else if(menuPhase == 1 && M5.BtnC.wasPressed()){
    M5.Lcd.clear();
    //Sendが選択されたらメニュー画面:2へ、modoruが選択されたらメニュー画面:0へ
    if(secondMenuSelectNum == 1){
         menuPhase = 2; 
    }else{
         menuPhase = 0;
    }
  //メニュ-画面:2(ThirdMenu)でボタンCが押された時、メニュー画面:1(Second Menu)へ遷移
  }else if(menuPhase == 2 && M5.BtnB.wasPressed()){
    M5.Lcd.clear();
    artnetSendFlag = 0;
    menuPhase = 1;
  }else{
    //
  }
  //メニューごとの機能表示
  switch(menuPhase){
    case 0:
      FirstMenu();
      firstMenuSelectNum = SelectButton(firstMenuSelectNum);
      break;
    case 1:
      SecondMenu(firstMenuSelectNum);
      secondMenuSelectNum = SecondSelectButton(secondMenuSelectNum);
      break;
    case 2:
      artnetSendFlag = ThirdMenu(firstMenuSelectNum,artnetSendFlag);
      ThirdSelectButton();
      break;
    default:
      break;
  }
}
connectWifi.cpp : Wifi接続用のコード

Wi-Fi接続を行う用のコードです。M5StackのIP、ゲートウェイ、サブネットマスクを設定し、Wi-Fiに接続します。

#include <WiFi.h>
#include <M5Stack.h>

boolean ConnectWifi(const char* ssid,const char* password){
  //my IP setting
  IPAddress ip(2,21,1,1); //for fixed IP Address
  IPAddress gateway(2,21,1,254);
  IPAddress subnet(255,0,0,0);
  
  boolean state = true;
  int i = 0;
  WiFi.config(ip, gateway, subnet);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    M5.Lcd.print(".");
    if (i > 20){
      state = false;
      break;
    }
    i++;
  }
  if (state){
    M5.Lcd.println("");
    M5.Lcd.print("Connected to ");
    M5.Lcd.println(ssid);
    M5.Lcd.print("IP address: ");
    M5.Lcd.println(WiFi.localIP());
  } else {
    M5.Lcd.println("");
    M5.Lcd.println("Connection failed.");
  }
  return state;
}
firstMenuOpration.cpp:最初のメニュー:ブロードキャスト・ユニキャスト選択を行う画面

f:id:aisakakun:20200209132413p:plain
最初のメニュー

#include <M5Stack.h>

void FirstMenu(){
  M5.Lcd.setTextColor(0xFFFF);
  M5.Lcd.setTextSize(3);
  M5.Lcd.setCursor(40,80);
  M5.Lcd.print("Broadcast");
  M5.Lcd.setCursor(40,160);
  M5.Lcd.print("Unicast");
}

int SelectButton(int firstMenuSelectNum){
  if( firstMenuSelectNum == 0 && M5.BtnA.wasPressed()){//一行目が選択されている状態なら
      M5.Lcd.clear();
      M5.Lcd.fillTriangle(10,160,10,170,20,165,RED);
      firstMenuSelectNum = 1;
  }else if(firstMenuSelectNum == 1 && M5.BtnA.wasPressed()){//二行目が選択されている状態なら
      M5.Lcd.clear();
      M5.Lcd.fillTriangle(10,80,10,90,20,85,RED);
      firstMenuSelectNum = 0;
  }else{
  }
  return firstMenuSelectNum;
}
secondMenuOperation.cpp:二つ目のメニュー:ブロードキャスト・ユニキャスト選択に応じた送信内容画面の表示を行う画面

f:id:aisakakun:20200209133020p:plain
二つ目のメニュー

#include <M5Stack.h>

void SecondMenu(int firstMenuSelectNum){
  M5.Lcd.setTextColor(0xFFFF);
  M5.Lcd.setTextSize(2);
  M5.Lcd.setCursor(40,180);
  M5.Lcd.print("Send");
  M5.Lcd.setCursor(160,180); 
  M5.Lcd.print("modoru");
  if(firstMenuSelectNum == 0){
    M5.Lcd.setCursor(40,40);
    M5.Lcd.println("dst:IP Address:");
    M5.Lcd.setCursor(120,60);
    M5.Lcd.println("2.255.255.255");
    M5.Lcd.setCursor(40,120);
    M5.Lcd.print("Universe:");
    M5.Lcd.setCursor(120,140);
    M5.Lcd.println("127:15:15");
  }else if(firstMenuSelectNum == 1){
    M5.Lcd.setCursor(40,40);
    M5.Lcd.println("dst:IP Address:");
    M5.Lcd.setCursor(120,60);
    M5.Lcd.println("2.21.21.2");
    M5.Lcd.setCursor(40,120);
    M5.Lcd.print("Universe:");
    M5.Lcd.setCursor(120,140);
    M5.Lcd.println("127:15:13");
  }
}

int SecondSelectButton(int secondMenuSelectNum){
  if( secondMenuSelectNum == 0 && M5.BtnA.wasPressed()){//一行目が選択されている状態なら
      M5.Lcd.clear();
      M5.Lcd.fillTriangle(10,180,10,190,20,185,RED);
      secondMenuSelectNum = 1;
  }else if(secondMenuSelectNum == 1 && M5.BtnA.wasPressed()){//二行目が選択されている状態なら
      M5.Lcd.clear();
      M5.Lcd.fillTriangle(130,180,130,190,140,185,RED);
      secondMenuSelectNum = 0;
  }else{
  }
  return secondMenuSelectNum;
}
thirdMenuOperation.cpp:三つ目のメニュー:Art-Net(ArtDMX)出力を行うことができる画面。ボタン押下により、送信・停止が可能

f:id:aisakakun:20200209133506p:plain
三つ目のメニュー

#include <M5Stack.h>
#include <ArtnetWifi.h>

// Artnet settings
ArtnetWifi artnet;
const int startUniverse = 32767; // CHANGE FOR YOUR SETUP most software this is 1, some software send out artnet first universe as 0.
const char broadcastHost[] = "2.255.255.255"; // CHANGE FOR YOUR SETUP your destination
const char unicastHost[] = "2.21.21.1"; // CHANGE FOR YOUR SETUP your destination
const char* ssid = "ssid"; // CHANGE FOR YOUR SETUP
const char* password = "password"; // CHANGE FOR YOUR SETUP

boolean ConnectWifi(const char* ssid,const char* password);

int ThirdMenu(int firstMenuSelectNum, int artnetSendFlag){
  if(artnetSendFlag == 0){
    ConnectWifi(ssid,password);
    if(firstMenuSelectNum == 0){
      artnet.begin(broadcastHost);
    }else if(firstMenuSelectNum == 1){
      artnet.begin(unicastHost);
    }else{
      //
    }
    artnet.setLength(3);
    artnet.setUniverse(startUniverse);
    M5.Lcd.setCursor(0, 50);
    M5.Lcd.setTextSize(2);
    M5.Lcd.setTextColor(GREEN);
    M5.Lcd.print("Please push the C button");
    delay(2000);
    artnetSendFlag = 1;
  }else{
    //
  }
  return artnetSendFlag = 1;
}

void drawLine(){
  int start_x = 0;
  int start_y = 100;
  int max_x = 320;
  int max_y = 240;
  M5.Lcd.fillRect(start_x,start_y,max_x - start_x, max_y - start_y,BLACK);
  for(int y = start_y; y < max_y ; y += 10){
    M5.Lcd.drawLine(start_x,start_y,max_x - 1,y,0x7BE0);
    delay(10);
  }
}

void ThirdSelectButton(){
  if(M5.BtnC.wasPressed()){//一行目が選択されている状態なら
    M5.Lcd.clear();
    M5.Lcd.setCursor(0, 50);
    M5.Lcd.setTextColor(RED);
    M5.Lcd.print("Art-Net Sending..");
    // set the first 3 byte to all the same value. A RGB lamp will show a ramp-up white.
    for (uint8_t j = 0; j < 255; j++) {
      for (uint8_t i = 0; i < 3; i++) {
        artnet.setByte(i, j);
      }  
      artnet.write();
    }
    drawLine();
  }else if(M5.BtnA.wasPressed()){//二行目が選択されている状態なら
    M5.Lcd.clear();
    M5.Lcd.setCursor(0, 50);
    M5.Lcd.setTextColor(0xB7E0);
    M5.Lcd.print("Art-Net Stopped");
    
  }else{
    //
  }
}
現状と今後の変更予定内容:

【現状】Art-Net出力の送信はボタンCを押下してから一定時間で停止します。
【変更予定内容】ボタンによる割り込み処理を加え、ボタンAの押下により強制停止できるように変更加えていきます。
【現状】Unicastで送信するIPアドレスは固定のIPアドレスです。
【変更予定内容】IPアドレスも変更できるように変更加えていきます。
【現状】ユニバースは32767の固定ユニバースです。
【変更予定内容】ユニバースを可変とするように変更加えていきます。

まとめ

M5Stackで画面遷移・ArtDMX出力を行う物を作りました。簡単な受信確認などに使用可能と思いますのでこの内容を改良して使用してみてください。

参照サイト:
・固定IPアドレスの設定:
qazsedcftf.blogspot.com
参照本:

みんなのM5Stack入門

みんなのM5Stack入門

使用したM5Stackはこちら。

【実験部屋】Art-Netの出力をM5Stackでモニターする【Wi-Fi】【M5Stack】

f:id:aisakakun:20200202222948p:plain

目的

Luminet Monitorを使用しArt-NetのDMXパケット「ArtDMX」をWi-Fiで送信し、Wi-Fiで指定のユニバースをM5Stackが受信し、受信したユニバースの中から特定の値を読み取り、M5Stack上に描画すること。

準備物

・Luminet Monitor(ArtDMX出力ツールとして使用)
Luminet Monitor | ルミネックス
・M5Stack Basic development kit

PC側

ArtDmxを出力するためのソフトウェア「Luminet Monitor」を下記リンクよりダウンロードしてください。
(Art-DMXを出力するソフトであればなんでも良いです。)
Luminet Monitor | ルミネックス
f:id:aisakakun:20200202224252p:plain:w500
画面左下の「DMX Generator」の「Add generator」をクリックすると「DMX Generator」のなかに一つGenerator1が表示されます。今回はユニバース0:0:1を使用するので、「Start」列を「1」にしてください。
「Function」列をダブルクリックすると機能を変更することができます。
「Control」に変更し、「Control」と表示されている箇所を右クリックし「Control panel」をクリックするとフェーダの画面が表示されます。

f:id:aisakakun:20200202224732p:plain:w500
フェーダ画面
ch1 ~ ch9のフェーダを適当に調整し、調整が完了したらフェーダ画面を閉じて、「DMX Generator」の「State」列にチェックを入れてください。
これでPC側の準備は完了です。wireshark(通信ログ確認ソフト)を確認し、このように表示されていれば成功です。
f:id:aisakakun:20200202225200p:plain:w500
wiresharkの通信ログ

M5Stack側(ソースコード)

M5Stack側ですが、下記ソースコードのSSID、passswordをご自身の環境の設定に変更してM5Stackに書き込んでください。

#include <ArtnetWifi.h>
#include <M5Stack.h>
#include <WiFi.h>

const char* ssid = "SSID"; //接続するアクセスポイントのSSIDに書き換える
const char* password = "password";//接続するアクセスポイントのパスワードに書き換える

//Art-Net setting
ArtnetWifi artnet;

//M5Stack Lcd setting
int pos_x = 40;
int pos_y = 140;
int height = 80;
int width = 80;

//Wi-Fiの接続確認
boolean ConnectWifi(void)
{
  boolean state = true;
  int i = 0; 
  WiFi.begin(ssid,password); //Wi-fi APに接続する
  while(WiFi.status() != WL_CONNECTED){ //Wi-Fi AP接続待ち
    delay(500);
    M5.Lcd.print(".");
    if(i > 20){
      state = false;  
      break;
    }
    i++;
  }
  if(state){
    M5.Lcd.print("\r\nWiFi connected\r\nIP address:");
    M5.Lcd.println(WiFi.localIP());
  }else{
    M5.Lcd.println("");
    M5.Lcd.println("Conection failed.");
  }
  return state;
}

//M5Stackに描画する際にRGB値を使用するため
uint16_t getColor(uint8_t red, uint8_t green, uint8_t blue){
  return ((red>>3)<<11) | ((green>>2)<<5) | (blue>>3);
}

void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data)
{
  if(universe == 1){
    for(int i = 0; i < 3; i++){
      M5.Lcd.fillRect(pos_x + i*width, pos_y,height,width,getColor(data[0+i*3],data[1+i*3],data[2+i*3]));
    }
  }else{
    //受信なしで黒に
    M5.Lcd.fillRect(pos_x,pos_y,height,width*3,BLACK);
  }
}

void setup() {
  // put your setup code here, to run once:
  M5.begin();
  M5.Lcd.setTextSize(2);
  ConnectWifi();
  artnet.begin();

  // onDmxFrame will execute every time a packet is received by M5Stack.
  artnet.setArtDmxCallback(onDmxFrame);
}

void loop() {
  // put your main code here, to run repeatedly:
  artnet.read();
}

私が参照したサイトはこちらです。
参照サイト
qiita.com

結果

f:id:aisakakun:20200202225924j:plain
結果
ArtDMXのch1(Red)ch2(Green)、ch3(Blue)とし、ch4〜ch6、ch7〜ch9も同様に考えています。
それぞれの合成色はそれぞれの四角に色として現れます。

まとめ

ArtDMXの出力をモニタするプログラムについて紹介しました。Art-Netについて知るにはプログラムを通して実践的に学ぶと理解が進みやすいです。プログラミングに抵抗がない方は是非試してみてください。
M5Stackについては以下の本を参照しました。

みんなのM5Stack入門

みんなのM5Stack入門

使用したM5Stackはこちら。

関連記事

ArtDMXについては下記記事を参照ください。
※1:
show-network-lab.hateblo.jp

RDMnet LLRPとは?【第一回】

f:id:aisakakun:20200126215843p:plain
Artistic Licence社のCEO Wayne HowellがLinked inのページで公開している記事で、
「LLRPは流れを変える(ゲームチェンジャー)潜在的な能力を持っている。お気に入りのメーカーに"LLRPをサポートしていますか?"と聞いてください。もしサポートしていないなら、なぜしていないのか聞いてください。」と述べています。それほど注目している技術、ということです。
参照先:https://artisticlicence.com/WebSiteMaster/Publicity/HelpDesk17-Low-level-recovery-Oct2018.pdf
※Artistic Licence社 = Art-Netの規格を作成した会社

LLRPについて書いていきたいと思いますが、量が少し多いので分割して書いていきます。
今回は、その概要の第一回です。

結論

  1. RDMnetとはイーサネットでRDM通信要求など行うもの
  2. LLRPはRDMnetの中の機能の一つ
  3. LLRPはマルチキャスト通信である = ネットワーク部が異なっても通信可能

参照先:ANSI E1.33 - 2019 Entertainment Technology -- (RDMnet) -- Message Transport and Device Management of ANSI E1.20 (RDM) compatible and similar devices over IP Networks
https://tsp.esta.org/tsp/documents/published_docs.php

目的

RDMnetの機能の一部であるLLRPは「マルチキャストでRDM通信要求を行うもの」です。ネットワークの設定がうまくいっていない場合でも通信出来ることを目的としています。

RDMnetとは

RDMnetとはRDM通信要求をイーサネット上で行うプロトコルです。RDM自体はRS485の半二重通信であり、RDMnetはRDMに対応したノード(Ether/DMX変換器)に「RDM検索を行ってください」「RDM器具リストを送信してください」など指示を送るものです。そのため「RDM通信要求をイーサネット上で行うプロトコル」という表現をしています。
RDMnetはユニキャスト通信(1対1通信)※で行われており、ネットワークが異なる(=サブネットマスクとIPアドレスの組み合わせで決まる)と通信ができません。
show-network-lab.hateblo.jp

LLRPはRDMnetの中の機能の一つ

LLRPとはLow Level Recovery Protocolの略称で、RDMパラメータの中の一部の送信を行うことが出来る機能です。

LLRPはマルチキャスト通信である

ここがWayne Howellが注目している部分になります。今までRDM情報の設定などを行うにはネットワーク部が一致していなければ行うことができませんでした。しかし、LLRPはマルチキャストであるのでネットワーク部が一致していなくても通信を行うことができます。さらに、LLRPはRDMnetのスイート(部品)とされていますが、sACNやArt-Net、 RDMnetやオーディオプロトコルのDanteの一部のツールとしても使用することが可能です。この言及から、Art-Netの機能の一部であるArtRDMもLLRPに対応していくあるいは、何か他のアプローチをしてくる可能性があります。

まとめ

LLRPというプロトコルについて概要を説明しました。
今までイーサネットRDMはユニキャスト通信かArtRDMのユニキャスト/ブロードキャストでしか行うことができず、ネットワーク部の正常な設定が必須でした。しかしLLRPによるイーサネットRDMのマルチキャスト通信の実現により、ネットワークの意識をせずに通信が問題なく行うことができるようになる、ということをWayne Howellは伝えたかったのだと思います。ただし、この場合だとユーザーはArt-NetではなくsACNを使用していく気がします。(sACNはマルチキャストであり、LLRPでのイーサRDM通信もマルチキャストであるため)。そこについてはWayne Howellがどのように考えているのかについても同時に考えていきます。第二回ではLLRPについてのより詳しい内容について記述し、それほど革新的な物なのかについて言及していきます。(マルチキャストでイーサRDMが行える以外の魅力については分からなかったため)
RDMnetについて知りたい方はRDMnetの規格が下記URLより会員登録などすると読めるようになります。 https://tsp.esta.org/tsp/documents/published_docs.php
照明ネットワーク全般についてはこちらがオススメです。

Art-Netの機能:ノードの設定の変更【ArtAddress】

f:id:aisakakun:20200111183923p:plain

Art-Net4の機能の一つ:ArtAddressについて説明します。規
※Art-Net4(v1.4)は2017年1月22日にドキュメントが出ています。そのため、少なくとも2017年以降に発売した製品が対象の解説になっています。

結論

  1. ポート毎のノードの系統を設定
  2. ポート毎のマージモードを変更(LTP/HTP)
  3. ポート毎の受信プロトコルをsACN / Art-Netにする

参照先:Specification for the Art-Net 4 Ethernet Communication Protocol https://artisticlicence.com/WebSiteMaster/User%20Guides/art-net.pdf

目的

ArtAddressは「ノードのポートの設定を変更する機能」です。遠隔でポート出力関連の設定を変更することを目的としています。

ノードのポートの出力系統の変更

ポート毎に出力系統の変更をすることができます。規格における
・SwIn[4]
・SwOut[4]
がそれに該当します。系統の設定(0:0:1 etc..)につきましては、Art-Netの系統のみ変更することができます。sACNの系統を変更することはできません。

マージモードを変更(LTP/HTP)

ノードのポート毎の合成方法を変更することができます。LTPモードとHTPモードの2つのどちらかを設定することができます。
・HTP (Highest Takes Precedence=最大値優先実行)
・LTP(Latest Takes Precedence=直近値優先実行)

受信プロトコルをsACN/Art-Netにする

Art-Net4では、Art-NetというプロトコルをRDM通信を行うためのプロトコルとしての使用することを可能としています。DMX信号出力のためにsACNを選択するかArt-Netを選択するか。Art-NetでDMX信号出力とRDM通信を行うか。下記のパターンを設定することができます。

DMX出力:sACN RDM通信:Art-Net

f:id:aisakakun:20200111191757p:plain
sACNでDMX出力、Art-NetでRDM通信
Art-NetをRDMツールとして利用する場合、上図のような設定になります。DMX出力を行うプロトコルとしてsACNを選択し、RDMツールを使用するプロトコルをArt-Netにすることが出来るノードについては確認できておりませんが、Art-Netプロトコル上はそのような機能を持ったノードの設定を行うことが出来るようになっています。Art-NetをDMX出力プロトコルとして使用している卓がほとんどであると思いますので、このような対応を行うノードが誕生する可能性は低いと思います。

DMX出力:Art-Net RDM通信:Art-Net

f:id:aisakakun:20200111192343p:plain
Art-NetでDMX出力 Art-NetでRDM通信
Art-NetでDMX出力・RDM通信を行う設定をすることができます。通常はArt-Netを出力プロトコルとして選択しておけばこのようなことができます。sACNでのDMX出力に対応するために、この機能も追加されたということでしょう。

まとめ

Art-Netプロトコルにおける、ArtAddressについて紹介しました。ノードのポートの設定を行う機能です。

照明ネットワークについて詳しく知りたい方は下記の本がおすすめです。

関連記事

上記の内容で不明点ある場合は、下記記事を参照ください。
※1:show-network-lab.hateblo.jp
※2:show-network-lab.hateblo.jp

Art-Netの機能:DMXを送信する【ArtDMX】


Art-Net4の機能の一つ:ArtDMXについて説明します。規格におけるArtDMXの項には、ArtDMXに関連する機能についても紹介されています。そこについても紹介します。
※Art-Net4(v1.4)は2017年1月22日にドキュメントが出ています。そのため、少なくとも2017年以降に発売した製品が対象の解説になっています。

結論

  1. 調光卓(Controller)、ノード(Node)、メディアサーバー(Media Server)からDMX512パケットを伝送
  2. ユニキャストでの伝送が推奨されている
  3. 別の卓からの同じ系統を合成出力する(関連機能)

参照先:Specification for the Art-Net 4 Ethernet Communication Protocol https://artisticlicence.com/WebSiteMaster/User%20Guides/art-net.pdf

目的

ArtDMXは「DMX512をEthernet経由で伝送するArt-Netの基本的な機能」です。Ethernet経由でDMX512信号を伝送することを目的としています。

ユニバースの設定

出力先のノード(Node)は、ポート毎に出力するユニバースの設定を行う必要があります。設定することによりノード(Node)は、調光卓(Controller)から出力されるユニバースを出力するかどうかの判断をすることができます。

変化がない時は4秒間隔で送信

調光卓(Controller)を操作する中でも、レベルの変更がないユニバースも存在すると思います。そういうユニバースは、4秒間隔で出力するように規定されています。送信元がArt-NetだけでなくsACN にも対応している場合は、sACNの再送信間隔である800ms〜1000msに設定するよう推奨されています。

送信設定について


ArtDMXは規格上、ユニキャストが推奨されています。

ブロードキャストに設定する基準

一つのユニバースの出力先のIPアドレス(送信先ノード数)が40を超える場合は、ブロードキャストにしてもよいと記載してあります。実際は40超えていなくてもブロードキャストにするケースはあると思います。設定の簡易性とネットワーク負荷のバランスをとって設定すれば良いと思います。

データの合成

Art-Netでは複数の調光卓(Controller)やノード(Node)から同じユニバースが送信されることを許容しています。しかし、同じユニバースが入力された場合、それらを区別しなければ連続して入力される二つの入力により、出力がパタつきます。そのような場合には下記の対策を取ることを例に挙げています。

  1. エラー状態を示すか待ちを加える
  2. 自動でデータを合成する

ちなみに、Art-Netの規格では2つの調光卓(同一ユニバース)の入力まで良いという制約があります。ノード(Node)によっては別のユニバースの合成まで許容しているケースがあると思います。それはその製品の優位性であり、Art-Netで規定されているものではありません。

合成の種類

合成(Merge)のオプションは高いレベルを優先するHTPモードと最新の入力を優先するLTPモードがあります。これらの設定はArtAddressという機能で設定することが可能です。

合成の入力が止まった場合

合成では同一系統2入力まで許容されています。そのうちの一つの系統の入力が途切れた場合、10秒間だけ入力を待ちます。10秒を超えた場合、合成の入力は解除されたと判断し、ノードはマージモードを解除します。

ノードに複数入力があるときの注意

ノードに複数の入力がある場合、同じユニバースを別のポートで設定しないようにしてください。ノードにはIPアドレスは一つなので、受信側は同じユニバースをIPアドレスで区別することができなくなります。同じユニバースを使用する際はこの点に注意しましょう。

※1:Art-Netとは?変遷に迫る。 - 照明ネットワーク


まとめ

Art-Netプロトコルにおける、ArtDMXについて紹介しました。最も基本的な機能なのでレベル変化が無い時の送信間隔、送信方法はユニキャスト推奨である、ということについては覚えておいても良いと思います。

照明ネットワークについて詳しく知りたい方は下記の本がおすすめです。

関連記事

上記の内容で不明点ある場合は、下記記事を参照ください。
※1:show-network-lab.hateblo.jp
※2:show-network-lab.hateblo.jp