none
Enviar Trama Hexadecimal Variable por Puerto Serial RRS feed

  • Pregunta

  • Buenos días

    Lo que deseo es transmitir una trama de 23 datos en hexadecimal por el puerto serial

    La trama a enviar en cuestión es la siguiente:

    7E 00 13 10 00 00 00 00 00 00 00 FF FF FF FE 00 00 01 20 83 01 01 4E

    En este momento lo estoy realizando de esta forma y funciona sin ningún problema:

    byte[] buffer_out = new byte[23];
                buffer_out[0] = 0x7E;
                buffer_out[1] = 0x00;
                buffer_out[2] = 0x13;
                buffer_out[3] = 0x10;
                buffer_out[4] = 0x00;
                buffer_out[5] = 0x00;
                buffer_out[6] = 0x00;
                buffer_out[7] = 0x00;
                buffer_out[8] = 0x00;
                buffer_out[9] = 0x00;
                buffer_out[10] = 0x00;
                buffer_out[11] = 0xFF;
                buffer_out[12] = 0xFF;
                buffer_out[13] = 0xFF;
                buffer_out[14] = 0xFE;
                buffer_out[15] = 0x00;
                buffer_out[16] = 0x00;
                buffer_out[17] = 0x01;
                buffer_out[18] = 0x20;
                buffer_out[19] = 0x83;
                buffer_out[20] = 0x01;
                buffer_out[21] = 0x01;
                buffer_out[22] = 0x4E;
                int offset = 0;
                XBee.Write(buffer_out, offset, 23);

    El problema radica en los dos datos que se encuentran en negrita, ya que esos dos datos son variables:

    • El primero se ingresa por medio de un textbox y se debe ingresar un número en base hexadecimal
    • El segundo se calcula con la siguiente formula: checksum = 0xFF - 0x10 - 0xFF - 0xFF - 0xFF - 0xFE - 0x01 - 0x20 - ID - 0x01 - 0x01, donde ID es el dato que se ingresa por medio del textbox

    No se qué debo hacer para que esos dos datos puedan variar (dependiendo del valor que se ingresa en el textbox) y se puedan enviar por el puerto serial sin problema

    jueves, 17 de septiembre de 2015 21:29

Respuestas

  •             byte[] buffer_out = new byte[23];
                buffer_out[0] = 0x7E;
                buffer_out[1] = 0x00;
                buffer_out[2] = 0x13;
                buffer_out[3] = 0x10;
                buffer_out[4] = 0x00;
                buffer_out[5] = 0x00;
                buffer_out[6] = 0x00;
                buffer_out[7] = 0x00;
                buffer_out[8] = 0x00;
                buffer_out[9] = 0x00;
                buffer_out[10] = 0x00;
                buffer_out[11] = 0xFF;
                buffer_out[12] = 0xFF;
                buffer_out[13] = 0xFF;
                buffer_out[14] = 0xFE;
                buffer_out[15] = 0x00;
                buffer_out[16] = 0x00;
                buffer_out[17] = 0x01;
                buffer_out[18] = 0x20;
    
                buffer_out[19] = byte.Parse(textBox1.Text, System.Globalization.NumberStyles.AllowHexSpecifier);
                byte checksum = (byte)(0xFF - 0x10 - 0xFF - 0xFF - 0xFF - 0xFE - 0x01 - 0x20 - buffer_out[19] - 0x01 - 0x01);
                textBox2.Text = checksum.ToString("X2");
    
                buffer_out[20] = 0x01;
                buffer_out[21] = 0x01;
                buffer_out[22] = checksum;
                int offset = 0;
                XBee.Write(buffer_out, offset, 23);

    En el entendido de que vos en el textbox1 escribís el texto "83". En tal caso en el textbox2 leerás el texto "4E". 


    jueves, 17 de septiembre de 2015 21:53

Todas las respuestas

  •             byte[] buffer_out = new byte[23];
                buffer_out[0] = 0x7E;
                buffer_out[1] = 0x00;
                buffer_out[2] = 0x13;
                buffer_out[3] = 0x10;
                buffer_out[4] = 0x00;
                buffer_out[5] = 0x00;
                buffer_out[6] = 0x00;
                buffer_out[7] = 0x00;
                buffer_out[8] = 0x00;
                buffer_out[9] = 0x00;
                buffer_out[10] = 0x00;
                buffer_out[11] = 0xFF;
                buffer_out[12] = 0xFF;
                buffer_out[13] = 0xFF;
                buffer_out[14] = 0xFE;
                buffer_out[15] = 0x00;
                buffer_out[16] = 0x00;
                buffer_out[17] = 0x01;
                buffer_out[18] = 0x20;
    
                buffer_out[19] = byte.Parse(textBox1.Text, System.Globalization.NumberStyles.AllowHexSpecifier);
                byte checksum = (byte)(0xFF - 0x10 - 0xFF - 0xFF - 0xFF - 0xFE - 0x01 - 0x20 - buffer_out[19] - 0x01 - 0x01);
                textBox2.Text = checksum.ToString("X2");
    
                buffer_out[20] = 0x01;
                buffer_out[21] = 0x01;
                buffer_out[22] = checksum;
                int offset = 0;
                XBee.Write(buffer_out, offset, 23);

    En el entendido de que vos en el textbox1 escribís el texto "83". En tal caso en el textbox2 leerás el texto "4E". 


    jueves, 17 de septiembre de 2015 21:53
  • Hola disculpen que interfiera peor llevo realizando un  proyecto en el que me toca hacer el proceso inverso necesito recibir estas tramas por puerto serie para luego solamente sacar de ello los datos que me interesan sabrian talvez como realizar esto agradesco su colaboracion 

    Saludos

    domingo, 4 de octubre de 2015 20:00
  • Buenas

    Disculpen estoy iniciandome en C#. Estoy intentando comunicar dos Xbee, enviando tramas, queria preguntarles sobre el comando Xbee.Write(buffer_out, offset,n), este hay que usarlo con alguna libreria o en vez de usar ese comando seria lo mismo que crear en un form, un Serial port.

    Estare atento a sus comentarios y agradecido.


    miércoles, 21 de junio de 2017 6:13