Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2014-11-28 00:11:53 [C#] - Boîtier ENTTEC DMX USB Pro

Seb
membre
Lieu: Lyon
Date d'inscription: 2012-03-18
Messages: 63

[C#] - Boîtier ENTTEC DMX USB Pro



Bonsoir !

Je me met gentiment au C# et essaye d'écrire une petite appli pour communiquer avec un boîtier ENTTEC DMX USB Pro. Le fabriquant fournit le format des messages à envoyer ici.

Pour l'instant, j'essaye simplement d'envoyer tout les channels à 0, voilà mon code :

        static void Main(string[] args)
        {
                short channelCount = 25;
 
                byte[] data = new byte[channelCount + 6]; // 6 constant values + actual data
                data[0] = (byte)0x7E; // Start delimiter
                data[1] = (byte)6; //  ENTTEC's label for "Send"
                data[2] = (byte)(channelCount & 255); // Data size LSB
                data[3] = (byte)((channelCount >> 8) & 255); // Data size MSB
                data[4] = (byte)0; // Startcode
                for (int i = 5; i < data.Length - 2; i++)
                {
                    data[i] = (byte)0;
                }
                data[data.Length - 1] = (byte)0xE7; // End delimiter
 
                // Serial port
                SerialPort comPort = new SerialPort("COM4", 38400, Parity.None, 8, StopBits.One);
                comPort.Open();
                comPort.Write(data, 0, data.Length);
        }

Quand je compile, le boîtier ne réagit pas. Je pige pas trop d'où peut venir l'erreur, j'ai l'impression d'avoir respecté correctement le format imposé ...

Quelqu'un aurait une piste ? smile

D'avance merci !


everything you know is wrong.

Hors ligne

 

#2 2014-11-28 13:50:38 Re : [C#] - Boîtier ENTTEC DMX USB Pro

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: [C#] - Boîtier ENTTEC DMX USB Pro



Bonjour,

Je ne peux tester la validité du code, mais voici ce que je peux transposer :

static void Main(string[] args)
{
  short tailleUnivers = 25;

  byte[] data = new byte[tailleUnivers + 6]; // 6 constant values + actual data
  data[0] = (byte)0x7E; // Start delimiter
  data[1] = (byte)6; //  ENTTEC's label for "Send"
  data[2] = (byte)((tailleUnivers + 1) & 255); // Data size LSB
  data[3] = (byte)(((tailleUnivers + 1) >> 8) & 255); // Data size MSB
  for (int i = 0; i < tailleUnivers; i++)
  {
    data[i + 4] = (byte)i;
  }
  data[5 + tailleUnivers] = (byte)0xE7; // End delimiter

  // Serial port
  SerialPort comPort = new SerialPort("COM4", 38400, Parity.None, 8, StopBits.One);
  comPort.Open();
  comPort.Write(data, 0, data.Length);
}

Cela devrait fonctionner !

Hors ligne

 

#3 2014-11-28 15:31:11 Re : [C#] - Boîtier ENTTEC DMX USB Pro

Seb
membre
Lieu: Lyon
Date d'inscription: 2012-03-18
Messages: 63

Re: [C#] - Boîtier ENTTEC DMX USB Pro



Et bien ça fonctionne, merci beaucoup !

Tu pourrais juste m'expliquer pourquoi tu fais channelCount + 1 pour extraire le MSB et le LSB ?


everything you know is wrong.

Hors ligne

 

#4 2014-11-28 20:24:57 Re : [C#] - Boîtier ENTTEC DMX USB Pro

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: [C#] - Boîtier ENTTEC DMX USB Pro



En fait, une trame complète DMX au maximum 512 octets de données, mais il y a 513 octets qui transitent. Le premier avec l'indice 0 ne sert à rien. Les canaux DMX vont de 1 à 512. Voilà pourquoi je fais tailleUnivers + 1. Je pense que j'ai fait une erreur dans le code précédent, voici la correction :

static void Main(string[] args)
{
  short tailleUnivers = 25;

  byte[] data = new byte[tailleUnivers + 6]; // 6 constant values + actual data
  data[0] = (byte)0x7E; // Start delimiter
  data[1] = (byte)6; //  ENTTEC's label for "Send"
  data[2] = (byte)((tailleUnivers + 1) & 255); // Data size LSB
  data[3] = (byte)(((tailleUnivers + 1) >> 8) & 255); // Data size MSB
  data[4] = (byte)0;
  for (int i = 0; i < tailleUnivers; i++)
  {
    data[i + 5] = (byte)(i + 1);
  }
  data[5 + tailleUnivers] = (byte)0xE7; // End delimiter

  // Serial port
  SerialPort comPort = new SerialPort("COM4", 38400, Parity.None, 8, StopBits.One);
  comPort.Open();
  comPort.Write(data, 0, data.Length);
}

Dis-moi si cela fonctionne.

Dernière modification par Mushussu (2014-11-28 20:26:38)

Hors ligne

 

#5 2014-12-01 09:42:21 Re : [C#] - Boîtier ENTTEC DMX USB Pro

Seb
membre
Lieu: Lyon
Date d'inscription: 2012-03-18
Messages: 63

Re: [C#] - Boîtier ENTTEC DMX USB Pro



Okay, merci pour le coup du startcode, j'avais pas compris ça comme ça !

Ton code fonctionne, merci pour le coup de main !


everything you know is wrong.

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024