¿Cómo puedo escribir un byte firmado en un puerto serie en VB?
Frecuentes
Visto 849 veces
0
Necesito poder escribir bytes firmados en un puerto serie usando
Método SerialPort.Write (), excepto que el método solo toma matrices de bytes [] de bytes sin firmar, ¿cómo escribiría un byte firmado en el puerto serie?
Por lo que estoy trabajando, el comando en particular toma valores de -1700 a 1700.
gracias
pesadillas
1 Respuestas
0
El canal de comunicación en serie no tiene el concepto de firmado o no firmado, solo un concepto de 1 y 0 en el cable. Es su sistema operativo (y, en última instancia, su arquitectura de CPU) el que asigna un valor numérico a esos 1 y 0, tanto en el lado de envío como en el de recepción.
El rango de valores que indica no se puede representar en un byte (según mi comentario y su respuesta). Debe comprender qué patrón de bits espera el dispositivo receptor para un número determinado (¿está el otro dispositivo Big Endian o Little Endian?), y luego puede enviar una secuencia apropiada de byte[] para representar el número que desea transmitir.
Si ambos dispositivos tienen el mismo endianness, puede configurar una matriz de cortos y luego copiar a una matriz de bytes como esta:
short[] sdata = new short[] { 1, -1 };
byte[] bdata = new byte[sdata.Length * 2];
Buffer.BlockCopy(sdata, 0, bdata, 0, bdata.Length);
Sin embargo, asegúrese de probar un rango de valores. Especialmente si se trata de dispositivos integrados, la codificación numérica puede no ser exactamente igual a la de una PC Intel.
contestado el 03 de mayo de 12 a las 17:05
Gracias por esto Eric, eso me aclara mucho las cosas. Cuando dice prueba de rangos, ¿quiere decir que los valores ingresados están dentro del rango especificado de los dispositivos? - codificación
Me refiero a enviar -1700 desde una aplicación de prueba y asegurarse de que el dispositivo en el otro extremo responda como si tuviera -1700. Repita para 1700 y para 0 y para números de prueba positivos y negativos en el rango -127..128 para asegurarse de que la codificación numérica se comporte como espera. - Eric J.
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas vb.net or haz tu propia pregunta.
Un byte, firmado o sin firmar, no admite el rango de valores que menciona. Los bytes con signo representan de -127 a 128, mientras que los bytes sin signo representan de 0 a 256. - Eric J.
Lo siento, dividiré ese valor en dos bytes separados: codingNightmares