C sharp - Enviar Trama Hexadecimal Variable por Puerto Serial

   
Vista:

Enviar Trama Hexadecimal Variable por Puerto Serial

Publicado por Jose Luis (1 intervención) el 17/09/2015 23:32:38
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Enviar Trama Hexadecimal Variable por Puerto Serial

Publicado por David (59 intervenciones) el 18/09/2015 12:17:01
Lo primero, limita la entrada del TextBox a dos.

El código quedaría así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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[20] = 0x01;
            buffer_out[21] = 0x01;
            Int32 offset = 0;
            Int16 valor;
            if(!Int16.TryParse(txtBox.Text, System.Globalization.NumberStyles.HexNumber, null, out valor))
            {
                  MessageBox.Show("El valor introducido no es hexadecimal! ");
                  return;
            }
            Int16 checksum = 0xFF - 0x10 - 0xFF - 0xFF - 0xFF - 0xFE - 0x01 - 0x20 - valor - 0x01 - 0x01;
            buffer_out[19] = valor;
            buffer_out[22] = checksum;
           XBee.Write(buffer_out, offset, buffer_out.Length);
Esto con alguna que otra validación adicional debería servir.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar