Art-Net介绍
Art-Net概述
Art-Net是一个基于TCP/IP协议族的以太网协议,通过UDP传输DMX512协议数据和RDM协议数据(Remote Device Management,远程设备管理),用于在节点(Node)和控制器(Controller,硬件控台,或者上位机软件,例如Madrix等)之间通信。主要解决原来DMX512协议的一些限制:通常DMX512在其物理层使用单向的RS-485,传输距离,带宽,通用性,构建复杂网络方面都有缺陷。
设备连接拓扑
通常会有一个转换设备,用于将Art-Net协议转为DMX512协议,或者反过来。
作为节点端,输出设备(接收Art-Net数据包,输出DMX数据)
作为控制端,输入设备(接收DMX数据,输出Art-Net数据到PC上位机控台软件,然后PC上位机再输出Art-Net数据)
协议版本
Art-Net已经历过4个版本,并且向下兼容。Art-Net I广泛使用广播,域的限制为40个。Art-Net II主要使用单播数据包,域增加到256个。于2011年发布的Art-Net III解决了管理更多域的问题,使得可以支持32768个域(2^15)。Art-Net IV于2016年发布,使得一个IP地址支持超过1000个端口。在协议内部,Art-Net IV被称为14版本。
Art-Net 4包含了新的方案来处理支持多个DMX端口的网关。以前,支持四个以上DMX端口的网关需要多个IP地址(多寻址)。这对用户和开发人员来说都是一个烦恼,而且在某些硬件平台上确实无法实现。新方案允许一个网关(或任何Art-Net产品)支持超过1000个DMX端口。它是通过在4种Art-Net数据包中添加一个名为BindIndex的字段来实现的,即:ArtPollReply、ArtAddress、ArtInput和ArtTodData。BindIndex允许所有Art-Net设备识别数据包所引用的"DMX端口Page"。
从开发人员的角度来看,这种变化非常小,而且将很快实现产品设计。并且它与以前的版本100%向后兼容。
Art-Net可以编址3万多个域。以前,每4个一组的DMX端口地址被限制在域的一个连续的16个地址中。Art-Net 4解决这一限制,因为开发人员可以选择单独识别每个DMX端口。这就意味着在每个ArtPollReply中编码一个DMX端口。使用这种机制,可以为所有DMX端口分配一个完全独立的域。
sACN作为一种传输DMX数据的方法越来越受欢迎。但是,它缺乏发现设备、配置设备或传输RDM数据的能力。Art-Net 4通过选择给定的网关端口是否应该将sACN或Art-Net转换为DMX输出,从而整合了管理sACN的能力。这允许用户选择Art-Net作为发现、管理和RDM工具,同时将sACN用于实时控制数据。
域地址
在Art-Net 4规范中理论上域的个数上限为32768(2^15)。实际的可传输域的个数受物理网络带宽和是否使用广播影响。下表给出了一个可参考的经验值。
寻址方式 | 10兆 | 100兆 | 1000兆 |
---|---|---|---|
单播 | 40 | 400 | 4000+ |
DMX512域的端口地址被编码进了15-bit的数值中,如下表。
Bit 15 | Bits14-8 | Bits7-4 | Bits3-0 |
---|---|---|---|
0 | Net | Sub-Net | Universe |
高字节称为“网络”,它由Art-Net 3引入,之前版本为0。不同的节点拥有不用的网络值。低字节的高半字节称为子网地址,同样每个节点拥有不同的子网地址,低半字节用于定义节点内的每个单独的DMX512域。
这意味着任何节点拥有:
- 一个“网络”开关。
- 一个“子网”开关。
- 一个“域”开关,该开关对应于已实现的每路DMX512输入或输出。
产品设计者可选择性的将它们实现为软或硬开关。(硬开关,例如物理上的拨码器,表示DMX端口是输入还是输出。软开关是逻辑上的,例如设备的配置界面切换DMX端口是输入还是输出。)
术语解释
- 节点:将DMX512转换到Art-Net或从Art-Net转换DMX512的设备称为节点。
- 控制器:中控或者监控设备(灯光控台)称为控制器。
- 端口地址: 一帧DMX数据可以指向32768个地址中的任何一个。端口地址由15-bit组成,结构为:网络(Net,7 bits) + 子网(Sub-Net, 4 bits) + 域(Universe, 4 bits).
- 网络:16个连续的子网或者256个连续域称为一个网络。一共128个网络。
- 子网:16个连续的域称为一个子网(不要和TCP/IP网络中子网掩码概念混淆)。
- 域:单帧DMX512包含512个通道称为一个域。
- 直接广播:当网络第一次连接时,控制器既不知道网络中有多少个节点,也不它们的IP地址。直接广播地址允许控制器在网络中发送一个ArtPoll的广播给到该网络中的所有节点。(假设当前网段是192.168.1.0/24,那么你可以指定192.168.2.255发送一个特定网络的广播,即便控制器是.1.x网段,但是节点都在.2.x网段,因为路由器会转发这个广播。)
- 受限广播:255.255.255.255就是一个受限广播地址,路由器只会在同网段广播此包,而不会跨网络转发这个广播。
以太网实现
通用注意事项:
数据包格式以类似于c语言结构体的方式指定,其中,根据位数,所有数据项都被认为是INT8、INT16或INT32类型的无符号整数。
没有隐藏的填充字节,除了在数据包的末尾,它可以对齐到2或4个字节的倍数。
协议被设计为通用的,用于处理将来版本可能对端口数进行扩充。许多的数据位包含未使用的位置。它们可能在将来的版本中使用。发送时这些位应该填充0,而不是让接收方检查。
所有包的定义其长度都设计为可以在未来修订版本中可增加,同时保证兼容性。由于这个原因,协议中只检查最小包长。
协议运行
一个节点运行在某一种IP地址模式下,每个节点都有唯一的IP地址,源自它的MAC地址。UDP的收发端口均为0x1936。
IP地址配置
Art-Net协议即可运行在DHCP管理的动态IP下,也可以是在静态IP下。默认情况下,Art-Net产品出厂使用A类地址。这使得Art-Net产品在网络无DHCP server的情况下,直接可以通信。(默认是A类地址,说明出厂时已配置了IP,为了避免IP冲突,配置策略见下文)。
IP地址配置-DHCP
节点通过ArtPollReply包上报它是否具有DHCP能力。当使用DHCP时,将根据和DHCP服务器之间的协商,修改地址和子网掩码。
IP地址配置-静态地址
在一个封闭的网络中是可以使用A类地址的。它可以避免将Art-Net数据路由到外网上。(注意接下来的描述仅针对Art-Net产品,这是他们自己的一套约定)Art-Net产品应该默认使用2.x.x.x的首选IP。这个IP地址由32位的数值构成,格式为A.B.C.D。其中B.C.D是通过MAC地址计算出来的。高字节的A设置为下表中2个数值中的一个。
MAC地址是一个48 bit的数值,格式为"u: v: w: x: y: z"。这个是全球唯一的数值。高位3字节"u: v: w"表示拥有此mac的组织(如某个公司)。低位3字节'x:y:z'由拥有此mac的组织自行分配。为了降低不同Art-Net设备制造商的IP地址冲突,产品的OEM码(2字节)被添加到了MAC地址中。
IP地址的“B”字段是通过:OEM码的高字节+OEM代码的低字节+MAC地址的“x”字段来计算的。上电后,节点检查它的IP地址模式配置。如果已预置了自定义IP,下面的步骤将略过。
产品Switch设置 | IP地址A | IP地址B | IP地址C | IP地址D | 子网掩码 |
---|---|---|---|---|---|
自定义IP | 自定义 | 自定义 | 自定义 | 自定义 | 自定义 |
网络Switch off | 2 | x+OEM | y | z | 255.0.0.0 |
网络Switch on | 10 | x+OEM | y | z | 255.0.0.0 |
子网掩码总是被初始化为255.0.0.0,除非使用了自定义IP地址。这意味着网络地址是最重要的8位,而节点地址是IP地址中最不重要的24位。这是一个A类网络地址,因此在连接到其他网络时必须小心操作。如果需要连接一个Art-Net网络到另一个有互联网接入的网络,那么这个连接必须通过一个过滤掉A类地址的路由器来实现。
IP地址计算示例
给定如下设置,IP地址的计算如下:
- Network Switch = Off
- MAC地址 = 12:45:78:98:34:76(十六进制)
- OEM code = 0x0010
计算过程:
- IP地址的A段 = 2
- IP地址的B段 = 168(0x98 + 00 + 0x10)
- IP地址的C段 = 52(0x34,来自MAC的y)
- IP地址的D段 = 118(0x76,来自MAC的z)
- 所以IP地址 = 2.168.52.118
控制器默认Poll
默认情况下,控制器需要轮询首选和备选Art-Net地址:
- 2.255.255.255:0x1936 首选Art-Net地址
- 10.255.255.255:0x1936 备选Art-Net地址
Art-Net包格式定义
节点所接受的所有UDP数据包都符合以下定义的Art-Net协议规范。任何其他数据包都将被忽略。
ArtPoll:
包策略
实体 | 方向 | 动作 |
---|---|---|
All | 接收 | 发送ArtPollReply |
All | 单播发送 | 在Targed模式下允许 |
All | 直接广播 | 控制器广播这个包到网络中所有的控制器和节点 |
All | 受限广播 | 不推荐 |
ArtPoll包用于发现其他控制器、节点、媒体服务器。ArtPoll包可以被任何类型设备发出来,但是通常是由控制器发出来。控制器和节点都会响应此包。
控制器广播ArtPoll包到IP地址2.255.255.255(子网掩码为255.0.0.0)的0x1936端口,这是一个直接广播地址。
控制器假定从发送ArtPoll到接收到所有ArtPollRely回复的最大超时为3秒。如果控制器未收到响应,则认为对应的节点断开了。
一个发送ArtPoll广播的控制器也必须通过单播方式回复它自己收到的ArtPoll消息(这里不是指自己收到自己的ArtPoll,是指别的设备也可能在广播ArtPoll),回复一个ArtPollReply。Art-Net要求所有的控制器每隔2.5-3秒广播一个ArtPoll,它能确保网络中的任何设备能轻松检测到连接断开。
多控制器
Art-Net允许也支持一个网络中存在多个控制器。当存在多个控制器是,节点会收到不同控制器发出的ArtPoll,这些ArtPoll里面可能包含冲突诊断的必要条件。解决方案如下:
如果有任何控制器请求诊断信息,则该节点将发送诊断信息。(ArtPoll->Flags->2)。
如果多台控制器请求诊断信息,则诊断信息通过广播回复。(忽略ArtPoll->Flags->3)。
应使用最低优先级。(忽略 ArtPoll->DiagPriority)
Targeted Mode(定向模式)
定向模式允许ArtPoll指定一个范围的端口地址。节点只回复目标地址包括在目标范围内的端口地址。ArtPoll->Flags->5用于使能定向模式。
最小包长
处理ArtPoll的设备判定一个长度大于等于14的ArtPoll包为有效包。任何缺失的字段都假定为0。这一要求是由于ArtPoll的长度随着协议的修订而增加。
ArtPoll包的定义
字段 | 名称 | 大小 | 位 | 描述 |
---|---|---|---|---|
1 | ID[8] | Int8 | - | 8字节字符串,以'\0'结尾。值为:"Art-Net"。 |
2 | OpCode | Int16 | - | OpCode定义了此UDP数据包中的ArtPoll之后的数据类型。传输时低位在前,设置为OpPoll,更多信息见表1-操作码 |
3 | ProtVerHi | Int8 | - | Art-Net协议版本号的高字节。 |
4 | ProtVerLo | Int8 | - | Art-Net协议版本号的低字节。当前值为14,即Art-Net VI,控制器应当忽略版本低于14的节点 |
5 | Flags | Int8 | - | 控制节点行为的标志 |
7-6 | 未使用,默认为0 | |||
5 | 0:禁用定向模式 | |||
1:启用定向模式 | ||||
4 | 0:使能VLC传输 | |||
1:禁用VLC传输 | ||||
3 | 0:诊断信息通过广播发送(如果bit 2置位) | |||
1:诊断信息通过单播发送(如果bit 2置位) | ||||
2 | 0:不发送诊断信息 | |||
1:发送诊断信息 | ||||
1 | 0:仅当收到ArtPoll或者ArtAddress后才发送ArtPollReply回复 | |||
1:每当节点状态变化就发送ArtPollReply。这使得控制器可以立即获得节点信息的更新,而不需要采用轮询方式查询 | ||||
0 | 0:废弃 | |||
6 | DiagPriority | Int8 | - | 应发送的诊断消息的最低优先级。见表5。 |
7 | TargetPort AddressTopHi | Int8 | - | 如果目标模式使能,则要检查端口地址范围的上限。 |
8 | TargetPort AddressTopLo | Int8 | - | |
9 | TargetPort AddressBottomHi | Int8 | - | 如果目标模式使能,则要检查端口地址范围的下限。 |
10 | TargetPort AddressBottomLo | Int8 | - | |
11 | EstaManHi | Int8 | - | |
12 | EstaManLo | Int8 | - | |
13 | OEMHi | Int8 | - | OEM码的高字节 |
14 | OEMLo | Int8 | - | OEM码的低字节。OEM码可以唯一地标识发送此数据包的产品 |
ArtPollReply:
包策略
实体 | 方向 | 动作 |
---|---|---|
All | 接收 | 无动作 |
All | 单播发送 | 允许 |
All | 广播 | 不允许 |
设备响应控制器的ArtPoll,回复ArtPollReply。设备需要等待一个1秒以上的随机延迟再发送回复。这种机制旨在应对当系统规模增大时,网络包集中发出导致拥塞的问题。
最小包长
处理ArtPollReply的设备判定一个长度大于等于207的ArtPollReply包为有效包。任何缺失的字段都假定为0。这一要求是由于ArtPollReply的长度随着协议的修订而增加。
ArtPollReply包定义
字段 | 名称 | 大小 | 位 | 描述 |
---|---|---|---|---|
1 | ID[8] | Int8 | - | 8字节字符串,以'\0'结尾。值为:"Art-Net"。 |
2 | OpCode | Int16 | - | OpPollReply,传输时低字节在前 |
3 | IP Address[4] | Int8 | - | 包含节点IP地址的数组。第一个数组条目是地址中最重要的字节。当实现绑定时,绑定节点可以共享根节点的IP地址,并且BindIndex用于区分这些节点 |
4 | Port | Int16 | - | 端口总是为0x1936。 |
5 | VersInfoH | Int8 | - | 节点固件版本高字节。控制器应仅使用此字段来决定是否应该进行固件更新。惯例是,更大的数字表示固件的最新版本。 |
6 | VersInfoL | Int8 | - | 节点固件版本低字节。 |
7 | NetSwitch | Int8 | - | 15位的端口地址的第14-8位被编码到这个字段的低7位。它用于将SubSwitch和SwIn[]或SwOut[]结合使用,以生成完整的域地址。 |
8 | SubSwitch | Int8 | - | 15位的端口地址的第7-4位被编码到这个字段的低4位。它用于将NetSwitch和SwIn[]或SwOut[]结合使用,以生成完整的域地址。 |
9 | OemHi | Int8 | - | OEM码的高字节 |
10 | OemLo | Int8 | - | OEM码的低字节。OEM码可唯一标识此产品。 |
11 | UBea Version | Int8 | - | 此字段包含用户Bios扩展区(UBEA)的固件版本。如果UBEA未被编程,则此字段置0。 |
12 | Status1 | Int8 | - | 通用状态寄存器,位域描述如下: |
7-6 | 指示器状态。 | |||
00:未知状态 | ||||
01:定位/识别模式(例如调试时让指定位置的灯具闪烁,以确定灯具位置) | ||||
10:静音模式 | ||||
11:正常模式 | ||||
5-4 | 端口地址编程权限。 | |||
00:未知权限 | ||||
01:所有的端口地址通过前端的控制面板设置 | ||||
10:所有或部分端口地址通过网络或者Web浏览器设置 | ||||
11:未使用 | ||||
3 | 未实现,默认为0。 | |||
2 | 设备引导方式。 | |||
0:从flash中引导。如果节点不支持双引导,此位设置为0。 | ||||
0:从rom中引导。 | ||||
1 | 是否支持RDM。 | |||
0 | 是否支持用户Bios扩展区(UBEA)。 | |||
13 | EstaManLo | Int8 | - | 某个行业组织的编号低位(懒得解释)。 |
14 | EstaManHi | Int8 | - | 某个行业组织的编号高位(懒得解释)。 |
15 | PortName[18] | Int8 | - | 端口名称,以0结尾的字符串。控制器通过ArtAddress修改此字段。此字段固定位18字节,即便设置的名字较短时。 |
16 | LongName[64] | Int8 | - | 端口长名称,以0结尾的字符串。控制器通过ArtAddress修改此字段。此字段固定位64字节,即便设置的名字较短时。在多绑定时,必须上报同样的长名称。 |
17 | NodeReport[64] | Int8 | - | 文本格式的数据,由节点上报表示操作状态或者操作错误。主要用于开发人员进行调试用。格式为:“#xxxx[yyyy]zzzz..”。xxxx表示状态码,见表3的定义,yyyy表示10进制的序号,表示上报的顺序,每次节点端发送一个ArtPollReply都自增1。zzzz英文文本字符串表示状态。 |
18 | NumPortsHi | Int8 | - | 描述输入或输出端口数的高字节。用于将来的扩展,目前为零。 |
19 | NumPortsLo | Int8 | - | 描述输入或输出端口数的低字节。如果输入数不等于输出数,则取最大的值。如果没有实现输入或输出端口,则设置为0。最大值为4。节点可以忽略此字段,因为信息隐含在PortTypes[]中。 |
20 | PortTypes[4] | Int8 | - | 这个数组定义了每个通道的操作和协议。(一个具有4个输入和4个输出的产品将报告0xc0、0xc0、0xc0、0xc0)。数组长度是固定的,与节点上物理可用的输入或输出的数量无关。 |
7 | 此通道是否可以输出数据到Art-Net网络中(Output) | |||
6 | 此通道是否可以从Art-Net网络中读取数据(Input) | |||
5-0 | 协议类型 | |||
000000:DMX512 | ||||
000001:MIDI | ||||
000010:Avab | ||||
000011:Colortran CMX | ||||
000100:ADB 62.5 | ||||
000101:Art-Net | ||||
000110:DALI | ||||
21 | GoodInput[4] | Int8 | - | 定义节点的输入状态 |
7 | 数据是否已接收 | |||
6 | 是否包含DMX512测试包 | |||
5 | 是否包含DMX512 SIP包 | |||
4 | 是否包含DMX512文本包 | |||
3 | 输入是否禁用 | |||
2 | 输入是否出错 | |||
1 | 未使用 | |||
0 | 输入转换成哪种协议 | |||
0:转为Art-Net | ||||
1:转为sACN | ||||
22 | GoodOutputA[4] | Int8 | - | 定义节点的输出状态 |
7 | ArtDmx或者sACN数据在此端口以DMX512格式输出 | |||
6 | 是否包含DMX512测试包 | |||
5 | 是否包含DMX512 SIP包 | |||
4 | 是否包含DMX512文本包 | |||
3 | 输出是否为合并的ArtNet数据 | |||
2 | 上电时是否做DMX输出短路检查 | |||
1 | 合并模式为LTP | |||
0 | 输入转换成哪种协议 | |||
0:转为Art-Net | ||||
1:转为sACN | ||||
23 | SwIn[4] | Int8 | - | 15位端口地址的3-0位,表示4个可能的输入端口,对应于该字节低位的4个bit |
24 | SwOut[4] | Int8 | - | 15位端口地址的3-0位,表示4个可能的输出端口,对应于该字节低位的4个bit |
25 | AcnPriority | Int8 | - | sACN优先级,当接收到的DMX数据转换为sACN数据是会用到 |
26 | SwMacro | Int8 | - | 如果节点支持宏按键输入,这个字节表示触发值。 |
27 | SwRemote | Int8 | - | 如果节点支持远程触发输入,这个字节表示触发值。 |
28 | Spare | Int8 | - | 未使用 |
29 | Spare | Int8 | - | 未使用 |
30 | Spare | Int8 | - | 未使用 |
31 | Style | Int8 | - | 样式代码定义了设备的设备样式。当前的样式代码见表4。 |
32 | MAC[6] | Int8 | - | 设备Mac地址,高字节在前 |
33 | BindIp[4] | Int8 | - | 如果此单元是大型设备或者模块化设备(例如设备不止4个端口),这个IP表示根设备的IP。 |
34 | BindIndex | Int8 | - | 这个数值表示绑定设备的顺序。数值越小表示越靠近根设备。如果值为0或者1,表示这就是个根设备。 |
35 | Status2 | Int8 | - | 设备能力,位域描述如下: |
7 | 节点是否支持通过ArtCommand控制RDM | |||
6 | 节点是否支持通过ArtCommand切换样式 | |||
5 | 节点是否支持squawking | |||
4 | 节点是否支持在Art-Net和sACN之间切换 | |||
3 | 节点是否支持15位的端口地址(Art-Net 3或4),否则表示只支持8位的端口地址(Art-Net 2) | |||
2 | 节点是否支持DHCP | |||
1 | 节点的IP是静态IP还是动态IP | |||
0 | 节点是否支持Web配置页面 | |||
36 | GoodOutputB[4] | Int8 | - | 定义节点的输出状态 |
7 | 节点是否禁用了RDM | |||
6 | 节点输出样式是连续还是差分 | |||
5 | 设备发现是否未运行 | |||
4 | 后台设备发现是否禁用 | |||
3 | 未使用 | |||
2 | 未使用 | |||
1 | 未使用 | |||
0 | 未使用 | |||
37 | Status3 | Int8 | - | 通用状态寄存器,位域描述如下: |
7-6 | 失效保护状态。当无网络数据时,节点的行为 | |||
00 保持最后的状态 | ||||
01 输出全0 | ||||
10 输出全1 | ||||
11 播放失效场景 | ||||
5 | 节点是否支持故障转移 | |||
4 | 节点是否支持LLRP | |||
3 | 节点是否支持切换端口的输入输出设置。(PortTypes[]展示了当前方向) | |||
2 | 节点是否支持RDMnet | |||
1 | 节点是否支持后台队列 | |||
0 | 节点是否支持可编程的后台设备发现。 | |||
39 | DefaulRespUID[6] | Int8 | RDMnet & LLRP默认应答UID,高位在前 | |
40 | UserHi | Int8 | - | 用户指定数据的高字节 |
41 | UserLo | Int8 | - | 用户指定数据的低字节 |
42 | RefreshRateHi | Int8 | - | 刷新率高字节 |
43 | RefreshRateLo | Int8 | - | 刷新率低字节。刷新率允许设备指定最大刷新率,单位Hz。 |
44 | Background QueuePolicy | Int8 | - | 后台队列策略定义了节点从已连接的RDM设备回读STATUS_MESSAGE和QUEUED_MESSAGE的方法。 |
0:收集STATUS_NONE消息 | ||||
1:收集STATUS_ADVISORY消息 | ||||
2:收集STATUS_WARNING消息 | ||||
3:收集STATUS_ERROR消息 | ||||
4:禁用收集 | ||||
5-250:制造商定义 | ||||
251-255:保留 | ||||
仅当Status3.bit1=1时启用 | ||||
45 | Filler | 10xInt8 | - | 全0,为将来扩展用。 |
ArtAddress
包策略
实体 | 方向 | 动作 |
---|---|---|
控制器 | 接收 | 无动作 |
单播发送 | 控制器发送到指定的节点IP地址 | |
广播 | 不允许 | |
节点 | 接收 | 使用单播的ArtPollReply回复。 |
单播发送 | 不允许 | |
广播 | 不允许 | |
媒体服务器 | 接收 | 使用单播的ArtPollReply回复。 |
单播发送 | 不允许 | |
广播 | 不允许 |
网络上的控制器或者监控设备可以远程重新编写一个节点的多个控制参数。例如这将允许灯光控制台远程重新路由DMX512数据。这是通过向节点IP地址发送一个ArtAddress包来实现的。(节点IP地址来自ArtPoll包的回复ArtPollReply。)
字段5-13包含将编写进节点的数据。
ArtAddress包定义
字段 | 名称 | 大小 | 描述 |
---|---|---|---|
1 | ID[8] | Int8 | 8字节字符串,以'\0'结尾。值为:"Art-Net"。 |
2 | OpCode | Int16 | 操作码OpAddress |
3 | ProtVerHi | Int8 | Art-Net协议版本号的高字节。 |
4 | ProtVerLo | Int8 | Art-Net协议版本号的低字节。当前值为14,即Art-Net VI,控制器应当忽略版本低于14的节点。 |
5 | NetSwitch | Int8 | 15位端口地址的14-8位对应于此字段的低7位。它用于将SubSwitch和SwIn[]或SwOut[]组合生成完整的域地址。 |
6 | BindIndex | Int8 | BindIndex定义了生成此数据包的绑定节点,并用于在使用相同的IP地址时唯一地标识该绑定节点。这个数字表示绑定设备的顺序。较小的数字意味着更接近根设备。值为1表示根设备。 |
7 | PortName[18] | Int8 | 端口名称,以0结尾的字符串。控制器通过ArtAddress修改此字段。此字段固定位18字节,即便设置的名字较短时。 |
8 | LongName[64] | Int8 | 端口长名称,以0结尾的字符串。控制器通过ArtAddress修改此字段。此字段固定位64字节,即便设置的名字较短时。在多绑定时,必须上报同样的长名称。 |
9 | SwIn[4] | Int8 | 15位端口地址的3-0位,表示4个可能的输入端口,对应于该字节低位的4个bit。将它和NetSwitch还有SubSwitch结合生成完整的域地址。bit7为1时表示数据有效,否则忽略低位4个bit的值。发送0x00以将此值重置为物理拨码开关设置。 |
10 | SwOut[4] | Int8 | 同上,不过它表示输出端口。 |
11 | SubSwitch | Int8 | 15位端口地址的7-4位对应为该字段的低位4个bit。将它和NetSwitch、SwIn[]或SwOut[]结合生成完整的域地址。bit7为1时表示数据有效,否则忽略低位4个bit的值。发送0x00以将此值重置为物理拨码开关设置。 |
12 | AcnPriority | Int8 | 设置在编码到此包的所有4个端口上生成的sACN数据的优先级字段。值为255表示没有变化。包含0到200的值均有效。 |
13 | Command | Int8 | 节点配置命令,详见表5 |
ArtDmx
包策略
包策略
实体 | 方向 | 动作 |
---|---|---|
控制器 | 接收 | 由应用自己指定 |
单播发送 | 允许 | |
广播 | 不允许 | |
节点 | 接收 | 由应用自己指定 |
单播发送 | 允许 | |
广播 | 不允许 | |
媒体服务器 | 接收 | 由应用自己指定 |
单播发送 | 允许 | |
广播 | 不允许 |
ArtDmx是用于传输DMX512数据的数据包。不管是节点到控制器,还是控制器到节点,它们的格式都是完全一样的。
数据通过域设置对应 DMX O/P 端口输出。在没有接收到新的ArtDmx数据包的情况下,每个DMX O/P端口持续重传最后一帧有效的ArtDmx帧。
每个输入端口接收到的第一帧完整的DMX帧被放置到上述的ArtDmx包中,包中包含相关的域参数。每个包含新数据(不同长度或不同内容)的后续DMX帧也会作为一个ArtDmx数据包传输。
如果上电后端口未收到任何数据,则节点不会发出任何ArtDmx数据。然而,如果有过输入数据,但是数据未更新了(没有持续输入),那么会每隔大约4秒会重传最后一帧有效的ArtDmx包。(注意,为了兼容Art-Net和sACN的需求,通常建议Art-Net设备的时间重传间隔设置为800ms到1000ms。)
如果DMX输入失败那么将不再继续发送ArtDmx数据。
单播订阅
ArtDmx包必须单播到ArtDmx包中域指定的订阅者。
传输设备必须不断发送ArtPoll到网络中以便检测到订阅的改变。订阅了的节点将在ArtPollReply回复包中中列出订阅的域。订阅指的是任何列出在SwIn[]或SwOut[]中的域。
如果域没有订阅者,控制器将不会发送对应的ArtDmx数据。ArtDmx包不允许广播。
ArtDmx包定义
字段 | 名称 | 大小 | 位 | 描述 |
---|---|---|---|---|
1 | ID[8] | Int8 | - | 8字节字符串,以'\0'结尾。值为:"Art-Net"。 |
2 | OpCode | Int16 | - | OpOutput |
3 | ProtVerHi | Int8 | - | Art-Net协议版本号的高字节。 |
4 | ProtVerLo | Int8 | - | Art-Net协议版本号的低字节。当前值为14,即Art-Net VI,控制器应当忽略版本低于14的节点 |
5 | Sequence | Int8 | - | 序号用于确保ArtDmx数据包按正确的顺序处理。Art-Net包在传输过程到达接收端时可能出现乱序。这个字段在0x01-0xFF之间自增,可以让接收端实现包序重排,若字段为0,表示禁用这个特性。 |
6 | Physical | Int8 | - | 表示DMX512数据是从哪个物理端口输入的。这个字段通常被接收设备使用,用来区分当端口地址完全一样但是数据是从不同的输入端口进来的时该如何合并数据。 |
7 | SubUni | Int8 | - | 15位端口地址的低字节,用来区分包的目的地址 |
8 | Net | Int8 | - | 15位端口地址的高7位,用来区分包的目的地址 |
9 | LengthHi | Int8 | - | DMX512数据的长度高字节。该值是2-512之间的偶数。它表示编码在包中的DMX512数据通道数。注:Art-Net转DMX512的产品可以配置成总是发送512通道。 |
10 | LengthLo | Int8 | - | DMX512数据的长度低字节。 |
11 | Data[Length] | Int8 | - | DMX512灯具数据。 |
刷新率
ArtPollReply中的刷新率定义了网关接收ArtDmx数据包的最大刷新率。对于一个输出DMX512的网关,它的最大刷新率总是为44Hz。
然而对于非DMX512的网关,可以设置更高的刷新率。
同步数据
对于一个视频或者媒体墙的应用中,能同步多个ArtDmx的域是非常有用的。通常通过使用ArtSync包来实现。
数据合并
Art-Net协议允许多个节点或者控制器往同一个域发送ArtDmx数据。节点通过对比接收到的ArtDmx包的源地址来检测这种情况。如果ArtDmx包的
Port-Adress是相同的,但是来自不同的IP地址(或者同样的IP,不同的物理端口),则认为存在潜在的冲突。节点根据下列两条原则能合理的处理这种情况,
- 将此视为错误条件并等待用户干预。
- 自动合并数据。
合并选项是首选选项,因为它提供了更高级别的功能。合并模式通过ArtAddress包中指定的LTP或者HTP模式实现。合并模式实现如下:
如果ArtDmx包拥有一样的Port-Address,但是来自不同的IP地址,数据将合并到DMX输出。这种情况下,ArtPollReply的GoodOutput的Bit3置位。
如果ArtPoll的Flags的Bit1置位,当开始启用合并模式时,并且开始处理第一个合并数据时,应该发送一个ArtPollReply给控制器。
如果ArtDmx包拥有一样的Port-Address,并且来自同样的IP地址,但是不同的Physical字段,数据将合并到DMX输出。这种情况下,ArtPollReply的GoodOutput的Bit3置位。
如果ArtPoll的Flags的Bit1置位,当开始启用合并模式时,并且开始处理第一个合并数据时,应该发送一个ArtPollReply给控制器。
从合并模式退出时处理过程如下:
如果收到了ArtAddress的AcCancelMerge命令,下一个ArtDmx包将退出合并模式。节点将丢弃所有IP地址和接收到AcCancelMerge命令IP不一致的ArtDmx包,也就是说谁发起结束合并模式,节点就只接收它的ArtDmx包。
如果任何一个ArtDmx的数据源停止,合并失败(因为完整的数据需要多个源提供,既然其中有一个停了,另一个还在继续发送,那么这期间的合并都会失败)的缓存数据将保存10秒。在超时时间内又接收到停止源发的ArtMmx数据,
那么合并模式继续进行。如果停止源不恢复,超时时间到,节点自动退出合并模式。如果所有数据源都接收不到,输出维持最后一个合并的数据。
合并模式限定只能有2个数据源,多余的源将被节点忽略。合并实现支持以下两种关键的操作模式:
- 联合控制:两个控制器在同一个网络中工作,合并的数据发往多个节点。
- 备份:一个控制器监控网络中的主控制器是否出现发送停止。如果停止,它可以发送一个ArtAddress的AcCancelMerge命令来立即接管网络控制。
当一个节点提供多个DMX512输入时,由该节点负责处理数据合并。这是因为节点只有一个IP地址,如果没有在节点处理ArtDmx数据包将具有相同的IP地址和相同的域地址,于是冲突级的数据将被传输到网络。
表1-操作码
下表中详细描述了Art-Net中合法的操作码(部分)
名称 | 值 | 定义 |
---|---|---|
OpPoll | 0x2000 | ArtPoll包 |
OpPollReply | 0x2100 | Artpoll的回复包,包含设备状态信息 |
OpDiagData | 0x2300 | 诊断信息和数据日志包 |
OpCommand | 0x2400 | 命令包,用于发送基于文本的参数命令 |
OpDataRequest | 0x2700 | 数据请求包,用于请求数据,例如产品的URL |
OpDataReply | 0x2800 | 数据请求的回复包 |
OpOutPut/OpDmx | 0x5000 | ArtDmx数据包。包含零开头的单个域的DMX512数据。 |
OpNzs | 0x5100 | ArtDmx数据包。包含非零开头的单个域的DMX512数据(不包括RMD数据)。 |
OpSync | 0x5200 | 同步包,它用于强制节点输出端同步发送ArtDmx包的数据 |
OpAddress | 0x6000 | 它包含一个节点的远程编程信息。 |
OpInput | 0x7000 | 输入包,它包含对DMX输入是否启用的数据 |
表4-样式码
下表详细说明了样式码。样式码定义了控制器的一般功能。样式码在ArtPollReply中返回。
编码 | 助记符 | 描述 |
---|---|---|
0x00 | StNode | DMX/Art-Net转换设备 |
0x01 | StController | 灯光控台 |
0x02 | StMedia | 媒体服务器 |
0x03 | StRoute | 网络路由设备 |
0x04 | StBackup | 备份设备 |
0x05 | StConfig | 配置或者诊断工具 |
0x06 | StVisual | 可视化设备 |
表5-节点配置命令
命令码 | 助记符 | 动作 |
---|---|---|
0x00 | AcNone | 无动作 |
0x01 | AcCancel Merge | 如果节点当前为聚合模式,将在收到下一个ArtDmx包时取消聚合模式。详见聚合模式操作。 |
0x02 | AcLedNormal | 节点前端面板指示操作正常。 |
xx | xxx | 太多不翻译了! |