FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Detectar tramas de bytes
Hola:
Teniendo esta entrada de bytes por el puerto serie: #I225.7O226.2L006B100V25.7F50.2H50.2R0080S€„€ˆ„À O otra trama de byte diferente como este: #2000,1400,230,45.0,55.0,8.6 Si se fijan, cada trama de bytes empieza por #. Haciendo pruebas dando las gracias a los compañeros de este foro, quiero saber si a la entrada de datos es capaz de detectar cada trama de byte recibida se muestre correctamente en sus label como indica abajo. Ver zoom. Su código es este: Código:
using System; using System.Windows.Forms; namespace Termite_SAI_03 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button_Ver_datos_Click(object sender, EventArgs e) { string entrada = "#I225.7O226.2L006B100V25.7F50.2H50.2R0080S€„€ˆ„À"; char[] separadores = { '#', 'I', 'O', 'L', 'B', 'V', 'F', 'H', 'R', 'S' }; string[] salida = entrada.Split(separadores, StringSplitOptions.RemoveEmptyEntries); label_I.Text = salida[0] + " V"; label_O.Text = salida[1] + " V"; label_L.Text = salida[2].TrimStart('0') + " %"; // Quita los ceros de la izquierda. label_B.Text = salida[3] + " %"; label_V.Text = salida[4] + " V"; label_F.Text = salida[5] + " Hz"; label_H.Text = salida[6] + " Hz"; // Convertir variable tipo string a tipo int, es decir, la variable tipo string "salida[7]" // se convierte en tipo int "resultadoSalida7". int resultadoSalida7 = Int32.Parse(salida[7]); // ¿Es igual a 1 minuto? if ((resultadoSalida7 % 60) == 1) { label_R.Text = resultadoSalida7 / 60 + " hora y " + resultadoSalida7 % 60 + " minuto."; } // ¿Es mayor a 60 segundos o 1 minuto? if ((resultadoSalida7 % 60) > 1) { label_R.Text = resultadoSalida7 / 60 + " hora y " + resultadoSalida7 % 60 + " minutos."; } // ¿Es igual a 60 segundos o 1 minuto? if ((resultadoSalida7 % 60) == 0) { label_R.Text = resultadoSalida7 / 60 + " hora y " + resultadoSalida7 % 60 + " minutos."; } } private void button_Ver_Tabla_Click(object sender, EventArgs e) { string entrada2 = "#2000,1400,230,45.0,55.0,8.6"; char[] separadores2 = { '#', ',' }; string[] salida2 = entrada2.Split(separadores2, StringSplitOptions.RemoveEmptyEntries); label_Resultado_valores_nonimales_de_alimentacion.Text = salida2[0] + " VA / " + salida2[1] + " W"; label_Resultado_voltaje_nominal.Text = salida2[2] + " V"; label_Resultado_corriente_nominal.Text = salida2[5] + " A"; label_Resultado_valores_nominales_de_frecuencia.Text = salida2[3] + " ~ " + salida2[4] + " Hz"; } } } Saludos.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino. |
#2
|
|||
|
|||
Supongo que la trama viene después de enviar un comando, y dado que conoces dicho comando podrías usar un diccionario para aplicarle a la trama recibida el tratamiento correspondiente.
Aquí te muestro dos formas en que lo podrías hacer. En la primera tienes funciones específicas para cada comando y, en la segunda, tienes una sola función para todos los comandos. Código PHP:
Código:
Entra a func1 y el frame es Frame 1 Entra a func2 y el frame es Frame 2 Entra a func3 y el frame es Frame 1 y este es el patron Patron 1 Entra a func3 y el frame es Frame 2 y este es el patron Patron 2 También dale un rato a aprender expresiones regulares, esto fue algo así de rápido, por lo que no está completo, pero ve lo que puede hacer Código PHP:
Código:
4 I225.7 : I225.7 : I : 225.7 : 4 O226.2 : O226.2 : O : 226.2 : 4 L006 : L006 : L : 006 : 4 B100 : B100 : B : 100 : 4 V25.7 : V25.7 : V : 25.7 : 4 F50.2 : F50.2 : F : 50.2 : 4 H50.2 : H50.2 : H : 50.2 : 4 R0080 : R0080 : R : 0080 : 4 S : S : S : : 4 2000, : 2000, : : : 2000 4 1400, : 1400, : : : 1400 4 230, : 230, : : : 230 4 45.0, : 45.0, : : : 45.0 4 55.0, : 55.0, : : : 55.0 4 8.6 : 8.6 : : : 8.6 |
#3
|
|||
|
|||
Muchas gracias mi muy distinguido amigo.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
XHTML, Java enviar tramas de bytes | REHome | JAVA | 0 | 09-07-2016 14:24:02 |
Lectura de tramas en puerto serie | vejerf | OOP | 1 | 04-02-2010 21:07:11 |
array de bytes con ICS | 3NK1 | Internet | 1 | 15-04-2009 03:20:44 |
Lectura de tramas: <SYN><DLE><STX> ... <DLE><ETX> | vejerf | Varios | 17 | 30-06-2008 16:20:26 |
Documentacion para Generar Tramas TCP | bastardo10 | Varios | 0 | 07-06-2007 18:31:38 |
|