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?
0
Comments
At least GrandMa and AMX are about the same age, that should be helpful, oh wait...
Oh wow, that looks like an intimidating piece of equipment, to someone who knows almost nothing about lighting..
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.
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.
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) } }