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 ?
D'avance merci !
Hors ligne
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
Et bien ça fonctionne, merci beaucoup !
Tu pourrais juste m'expliquer pourquoi tu fais channelCount + 1 pour extraire le MSB et le LSB ?
Hors ligne
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
Okay, merci pour le coup du startcode, j'avais pas compris ça comme ça !
Ton code fonctionne, merci pour le coup de main !
Hors ligne
Pages: 1