Art-Net Programming

JohnMichnrJohnMichnr Junior MemberPosts: 276
Anybody ever do any Lighting control over Art-Net? It's a DMX over Ethernet control protocol. I'm trying to jump start here instead of pouring through pages and pages of Protocol manuals

Comments

  • zack.boydzack.boyd Smacks Keyboard Repeatedly Posts: 94
    My preference is sACN(streaming ACN). Most equipment that can act as an Artnet node can also act as a sACN node. The protocol is much simpler and is a more standardized schema.

    On the Artnet side, there's a whole IP Schema, then a poll/response set that happens before the DMX information is broadcast. It's pretty involved to initialize that connection. To make my module for it, I had to trudge through the protocol and DEFINITELY didn't implement the whole thing. Just got it working.

    Take a look at sACN - it'll probably suit your needs more.
  • JohnMichnrJohnMichnr Junior Member Posts: 276
    I'm happy to use either - Not sure what nodes are being purchased for the system. But if sACN is easier then I'm all for that.
  • zack.boydzack.boyd Smacks Keyboard Repeatedly Posts: 94
    sACN you open up a multicast socket and start broadcasting packets at a regular interval. It's a large header and then the DMX values. You should be able to get it up and going super fast.
  • JohnMichnrJohnMichnr Junior Member Posts: 276
    As it ends up - the project is going to have the Light Factory software doing all of that - I just have to talk to that.
  • clintonlclintonl Junior Member Posts: 1
    This ought to get you going. It's pretty simple. The documentation is a bit vague, especially about byte order.
    I use it to control 4 LED par cans using a cheap ArtNet to DMX converter from China.
    I needed to send ArtNet packets at least every 0.5s or the lights go dark. This is an issue with non-compliance of the gateway and the lamps rather than an issue with ArtNet.
    When my module is idle it sends a DMX packet every 0.5s and when the DMX levels are changing every 50ms.

    define_constant
    ARTNET_HEADER[] = 'Art-Net';
    ARTNET_VERSION[] = {$00,$0E};//14
    ARTNET_OPCODE_POLL[] = {$00,$20};
    ARTNET_OPCODE_POLL_REPLY[] = {$00,$21};
    ARTNET_OPCODE_DMX[] = {$00,$50};

    define_variable
    volatile char cSequence;
    volatile char cSubNet;
    volatile integer nUniverse;
    volatile char cDMXLevels[512];

    define_function ArtPoll()
    {
    stack_var char _sPacketHeader[18];
    _sPacketHeader = "ARTNET_HEADER,$00, // Protocol header
    ARTNET_OPCODE_POLL, // ArtDMX op-code
    ARTNET_VERSION, // Version 14
    $02, // TalkToMe
    $00"; // Diagnostic priority
    send_string dvSocket, "_sPacketHeader";
    }

    define_function ArtDMX()
    {
    stack_var char _sPacketHeader[18];
    stack_var char _sPortAddress[2]

    _sPortAddress[1] = type_cast(nUniverse & $00FF);
    _sPortAddress[2] = type_cast((nUniverse & $7F00) >> 8);
    _sPacketHeader = "ARTNET_HEADER,$00, // Protocol header
    ARTNET_OPCODE_DMX, // ArtDMX op-code
    ARTNET_VERSION, // Version 14
    cSequence, // Packet sequence
    $00, // Physical port
    _sPortAddress[1], // DMX Universe (low 8 bits of 15 bit address)
    _sPortAddress[2], // DMX Net (High 7 bits of 15 bit address)
    $02,$00"; // Payload length (512 channels)
    set_length_array(cDMXLevels, 512);
    send_string dvSocket, "_sPacketHeader,cDMXLevels";
    cSequence++;
    }

  • JohnMichnrJohnMichnr Junior Member Posts: 276
    So cDMXLevels is just a 512 place integer array corresponding to the DMX Levels per channel?

    Just confirming - you sent stuff out UDP on port 1936? (That might be hex - Manual references it as 0x1936)
  • zack.boydzack.boyd Smacks Keyboard Repeatedly Posts: 94
    JohnMichnr wrote: »
    So cDMXLevels is just a 512 place integer array corresponding to the DMX Levels per channel?

    DMX is 16-bit, so the best way to deal with it is a 16-bit var, IE a char.
  • Joe HebertJoe Hebert Junior Member Posts: 2,154
    zack.boyd wrote: »

    DMX is 16-bit, so the best way to deal with it is a 16-bit var, IE a char.

    A CHAR is only an 8 bit data type, unsigned 0-255. INTEGER is 16 bit.
  • zack.boydzack.boyd Smacks Keyboard Repeatedly Posts: 94
    Joe Hebert wrote: »

    A CHAR is only an 8 bit data type, unsigned 0-255. INTEGER is 16 bit.

    Like I said....

    DMX is only an 8-bit var, IE a char.... this is what I get for lack of sleep...
  • JohnMichnrJohnMichnr Junior Member Posts: 276
    So,My original project that needed this has probably changed... Or it might change back to AMX control via Art-Net. still not sure. But after that one I just did another project where they forgot a DMX interface and went with the Art-net node to DMX. Got that done yesterday, and thanks clintonl for the code block. worked just fine.

    What I found out about Art-net: 1) The default IP stuff described in the protocol is only relevant if you don't have a node with a specific IP Address. If you can setup your node, then it is just UDP packets to that address on port 6454. 2) You don't need the Art-Net Poll messages unless you are looking to find art-net nodes on the network. I was able to just start sending artnet dmx commands out to the box with no problems. 3) if you want to query - the art-net poll response is sent back on the broadcast address for the sub net, in my case that was 192.168.255.255. I happened to have wiresharck running and caught the polling responses.
Sign In or Register to comment.