SysDMXMng, DMX management

List

Questa pagina fa parte del Manuale Programmazione IEC 61131-3. Vai all indice.

Questo blocco funzione esegue la gestione del protocollo DMX, questo è un blocco funzione protetto per utilizzarlo occorre richiedere il codice di protezione, vedi protezione funzioni e blocchi funzione. E’ comunque possibile utilizzarlo liberamente in modo test per 15 Min.

Attivando l’ingresso di Start viene inviato sulla porta seriale identificata da File un frame DMX che inizia con il valore di Status e segue con il valore di preset dei dispositivi definiti da Devices. Il valore di preset dei vari dispositivi deve essere caricato in un array di dati il cui indirizzo è passato in DataPtr. Mantenendo sempre attivo l’ingresso Start verranno inviati consecutivamente frames DMX.

Al termine dell’invio del comando DMX si attiverà per un loop di programma l’uscita Done.

Information Circle

Blocco funzione

CODESYS: Non disponibile

LogicLab: eLLabXUnified12Lib

Descrizione

Start (BOOL) Comando di invio frame DMX su porta seriale. Tenendo attivo il comando viene eseguita ciclicamente la trasmissione del frame DMX.
File (eFILEP) Flusso dati stream ritornato dal FB SysSerialPort.
Status (USINT) Valore byte di stato inviato nel protocollo DMX prima dei byte di preset dispositivi.
Devices (UINT) Numero di dispositivi connessi al bus DMX.
Delay (UINT) Tempo di pausa trasmissione frames DMX (mS).
DataPtr (PVOID) Pointer all’array dati valori di preset dispositivi DMX.
Done (BOOL) Attivo per un loop al termine dell’invio frame DMX del comando. Viene utilizzato terminare la trasmissione e per sincronizzare il trasferimento dei valori da inviare sul bus.

Immagine FB SysDMXMng

Esempi

Come utilizzare gli esempi.
Nell’esempio vengono gestiti 5 dispositivi DMX con indirizzi da 1 a 5. Attivando da debug la variabile BOOL CDs[0] viene impostato il valore 0, su tutti i dispositivi. Attivando Attivando da debug la variabile BOOL CDs[1] su dispositivo 1 viene impostato il valore 10, sul 2 il valore 20, e così via fino al quinto in cui viene impostato il valore 50.

LogicLab (Ptp116, ST_SysDMXMng)
PROGRAM ST_SysDMXMng
VAR
    i : UDINT; (* Auxiliary counter *)
    Sp : SysSerialPort; (* Serial port management *)
    FBDMX : SysDMXMng; (* DMX manager *)
    CDs : ARRAY[0..1] OF BOOL; (* Commands *)
    Pulses : ARRAY[0..1] OF BOOL; (* Pulses *)
    DMXData : ARRAY[0..4] OF BYTE; (* DMX data buffer *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysDMXMng"
// *****************************************************************************
// Are managed 5 DMX devices connected in multidrop to COM2 serial port. By
// setting by debug the 2 commands it's possible to set them to defined values.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------

    IF (SysFirstLoop) THEN

        // Defines the serial port settings.

        Sp.COM:=ADR('COM2'); //COM port definition
        Sp.Baudrate:=250000; //Baudrate
        Sp.Parity:='N'; //Parity
        Sp.DataBits:=8; //Data bits
        Sp.StopBits:=2; //Stop bits
        Sp.DTRManagement:=DTR_ON; //DTR management
        Sp.DTRComplement:=FALSE; //DTR complement
        Sp.EchoFlush:=FALSE; //Received echo flush
        Sp.DTROnTime:=0; //DTR On time delay (mS)
        Sp.DTROffTime:=0; //DTR Off time delay (mS)
        Sp.FlushTm:=0; //Flush time (mS)
        Sp.RxSize:=0; //Rx buffer size
        Sp.TxSize:=0; //Tx buffer size

        // Defines the DMX settings.

        FBDMX.Devices:=5; //Number of devices
        FBDMX.DataPtr:=ADR(DMXData); //Data array pointer
    END_IF;

    // -------------------------------------------------------------------------
    // MANAGE THE DMX TRANSMIT
    // -------------------------------------------------------------------------
    // Manage the DMX transmit.

    Sp(Open:=TRUE); //Serial port management
    FBDMX.Status:=0; //Status byte
    FBDMX.Start:=Sp.Opened; //Start command
    FBDMX(File:=Sp.File); //DMX manager

    // -------------------------------------------------------------------------
    // SET VALUES TO PRESET DEVICES
    // -------------------------------------------------------------------------
    // Set values to transmit on the DMX bus. The set is synchronized with the
    // end of transmission.

    IF (FBDMX.Done AND (CDs[0] <> Pulses[0])) THEN
        Pulses[0]:=CDs[0]; //Pulses

        IF (CDs[0]) THEN
            DMXData[0]:=0; //DMX address 1 device
            DMXData[1]:=0; //DMX address 2 device
            DMXData[2]:=0; //DMX address 3 device
            DMXData[3]:=0; //DMX address 4 device
            DMXData[4]:=0; //DMX address 5 device
            FBDMX.Start:=TRUE; //Start
        END_IF;
    END_IF;

    // Set values to transmit on the DMX bus. The set is synchronized with the
    // end of transmission.

    IF (FBDMX.Done AND (CDs[1] <> Pulses[1])) THEN
        Pulses[1]:=CDs[1]; //Pulses

        IF (CDs[1]) THEN
            DMXData[0]:=10; //DMX address 1 device
            DMXData[1]:=20; //DMX address 2 device
            DMXData[2]:=30; //DMX address 3 device
            DMXData[3]:=40; //DMX address 4 device
            DMXData[4]:=50; //DMX address 5 device
            FBDMX.Start:=TRUE; //Start
        END_IF;
    END_IF;

// [End of file]
Was this article helpful?