Home AMX User Forum AMX Technical Discussion

how to link GrandMA and AMX?

I have two systems to link, one is the environmental control software AMX and lighting control software GrandMA2,

AMX can output signals RS-232 and TCP/IP, and i want to use it to trigger grandma cues

GrandMA2 controller can input DMX in, midi in, LTC in, Art-net, but no RS-232?

Comments

  • At least GrandMa and AMX are about the same age, that should be helpful, oh wait... :p

    Oh wow, that looks like an intimidating piece of equipment, to someone who knows almost nothing about lighting.. :o

    Can't really help based on experience, but a few suggestions

    In the old days, AMX made an AXB-DMX512 hardware device (https://www.amx.com/en-US/products/axb-dmx512). You can still buy these on FleaBay, maybe the best solution if you don't mind using older equipment.

    Art-Net is DMX512 over UDP, maybe it's possible to wite your own driver in AMX? the protocol is freely available.

  • zack.boydzack.boyd Posts: 94

    You can connect directly to GMA2 via telnet and send it CLI commands. The way MA works is anything can be done via CLI, so you literally do anything. You can also get feedback by sending status requests.

  • AXB-DMX512 should still be available to purchase new from Harman

  • It really depends how many cues you are wanting to trigger. If it is only a very small number, the easiest option (depending on how many free IO or Relay ports available on your controller... or if you happen to have an EXB-IO8 or EXB-REL8) would be to use the DC Remote Control port on the MA2. On the Grand MA2 this has 16 contact closure inputs (that trigger between 5V and 15V), which can be used to trigger cues. If you're just triggering a small number of preset houselight cues, this would be much faster and simpler to implement than buying DMX specific hardware or writing an Art-Net or sACN driver.

  • You can start and stop executers on grandMA via TCP/IP commands. See the technical reference of GrandMA. If you are urgent, I can send you an example code.

  • Peter SchmidtPeter Schmidt Posts: 7
    edited September 2019

    As promised, here is the example code:
    1) GrandMA include file

    PROGRAM_NAME='03_GrandMA'
    
    DEFINE_DEVICE
    
    dvGrandMA = 0:8:0
    
    DEFINE_CONSTANT
    TL_CHECK_GrandMA_QUEUE = 41
    long lCheckGrandMAQueue[] = {50}
    
    TL_CLOSE_GrandMA = 42
    long lCloseGrandMA[] = {500}
    
    TL_CHECK_GrandMA_VALUES = 43
    long lCheckGrandMAValues[] ={200}
    
    
    
    DEFINE_VARIABLE
    
    volatile slong slIpConnection
    volatile integer nGrandMAConnected
    volatile char cGrandMAQueue[10000]
    volatile integer nTL_TimeoutActive
    volatile char cGrandMATempString[100]
    persistent char cGrandMAInputFormat[20]
    
    volatile char cGrandMABuffer[10000]
    
    
    DEFINE_FUNCTION integer OPEN_GrandMA_CONTROL ()
    {
        slIpConnection = ip_client_open (dvGrandMA.PORT,'192.168.21.171',30000,1)
        send_string 0,"'IP Connection: ',itoa(slIpConnection)"
    }
    
    DEFINE_FUNCTION integer CLOSE_GrandMA_CONTROL ()
    {
        slIpConnection = ip_client_close (dvGrandMA.PORT)
    }
    
    DEFINE_FUNCTION integer CONTROL_EXECUTOR (char cJob[20], char cNumber[5])
    {
        switch(cJob)
        {
        case 'TOGGLE': send_string dvGrandMA,"'Toggle Executor ',cNumber,10,13"
        case 'GO': send_string dvGrandMA,"'Go Executor ',cNumber,10,13"
        case 'OFF': send_string dvGrandMA,"'Off Executor ',cNumber,10,13"
        }
    }
    
    DEFINE_FUNCTION integer CONTROL_FADER (char cFader[5], integer nVal, integer nTime)
    {
        send_string dvGrandMA,"'Fader ',cFader,' At ',itoa(nVal),' Fade ',itoa(nTime),10,13"
    }
    
    DEFINE_START
    timeline_create (TL_CHECK_GrandMA_QUEUE,lCheckGrandMAQueue,1,1,1)
    
    wait 300
    {
        OPEN_GrandMA_CONTROL ()
    }
    
    DEFINE_EVENT
    
    
    
    timeline_event[TL_CHECK_GrandMA_QUEUE]
    {
        if(length_string(cGrandMAQueue))
        {
        if(!nGrandMAConnected)
        {
            OPEN_GrandMA_CONTROL ()
        }
        else
        {
            if(find_string(cGrandMAQueue,"13,10",1))
            {
            send_string dvGrandMA,"remove_string(cGrandMAQueue,"13,10",1)"
            }
        }
        }
    }
    
    
    data_event[dvGrandMA]
    {
        online:
        {
        nGrandMAConnected = 1
        }
        offline:
        {
        nGrandMAConnected = 0
        }
        string:
        {
        cGrandMABuffer = data.text
        send_string 0,"'GrandMA:',cGrandMABuffer"
        select
        {
            active(find_string(cGrandMABuffer,"'Please login'",1)): send_string dvGrandMA,"'login administrator admin',13,10"
        }
        }
    }
    

    2) part of the panel include

    button_event[TP,611]    //GMA Saal Stufen
    {
        push:
        {
        CONTROL_EXECUTOR('OFF','3.4')
        }
    }
    
    button_event[TP,612]    //GMA Saal Stufen
    {
        push:
        {
        CONTROL_EXECUTOR('GO','3.4')
        }
    }
    
    button_event[TP,613]    //GMA Saal Stufen 20%
    {
        push:
        {
        CONTROL_FADER('3.4',20,2)
        }
    }
    
    button_event[TP,614]    //GMA Saal Stufen 40%
    {
        push:
        {
        CONTROL_FADER('3.4',40,2)
        }
    }
    
    button_event[TP,615]    //GMA Saal Stufen 60%
    {
        push:
        {
        CONTROL_FADER('3.4',60,2)
        }
    }
    
    button_event[TP,616]    //GMA Saal Stufen 80%
    {
        push:
        {
        CONTROL_FADER('3.4',80,2)
        }
    }
    
    button_event[TP,617]    //GMA Saal Stufen 100%
    {
        push:
        {
        CONTROL_FADER('3.4',100,2)
        }
    }
    
Sign In or Register to comment.