elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


  Mostrar Mensajes
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 255
31  Programación / .NET (C#, VB.NET, ASP) / Re: Recibir dos tramas por RS232 diferentes. en: 28 Noviembre 2023, 14:02 pm
Cuando llegue a mi casa lo pruebo.

Hay algo que se me escapó y no te conté.

Todas las tramas de string o Bytes siempre empieza con # y acaba en \r.

#I230.3O230.0L007B100V25.7F50.2H50.2R0080S„€ˆ„\r

Lo comento por si acaso y los delimitadores se incluye el \r también.
32  Informática / Electrónica / Re: Relé USB HID en: 28 Noviembre 2023, 00:39 am
Hola gente:

Estoy usando un SAI/UPS que usa USB por HID y puerto serie del protocolo RS232. Si no sabes los comandos y tramas de bytes de respuesta si la hay, es usar Sniffer RS232. Lo mismo para el USB que los hay. Lo que no se como se trabaja en USB con el HID todavía, no me he puesto.

Si que estoy pescando e intentando leer varias tramas de string o Bytes para mostrar los datos en pantalla a parte de controlar el dispositivo.

Ejemplo:

ver zoom.

En este caso no me hace falta por ahora un sniffer, ya que el fabricante me dio el protocolo de comunicación de RS232 en pdf que puedes ver aquí.

Me imagino que te habrá venido un software, mira ver si en la Web tiene un SDK, con ello puedes hacer lo que quieras, porque a mi, no me vino SDK nada de nada.

Suerte con tu proyecto y vas avisando por aquí poco a poco.

Buen trabajo.
33  Programación / .NET (C#, VB.NET, ASP) / Re: Horas, hora, minutos y minuto. en: 28 Noviembre 2023, 00:09 am
Eres un crack.  ;-) ;-) ;-) ;-)
34  Programación / .NET (C#, VB.NET, ASP) / Re: Recibir dos tramas por RS232 diferentes. en: 28 Noviembre 2023, 00:06 am
Hola:

He hecho una interfaz con Windows Form como indica en la captura.

Se trata a la hora de recibir tramas de string o bytes por el puerto serie.

Si envío el comando X72\r, me llega la tramas de Bytes y lo muestra en los labels marcado en rojo.

Si envío otro comando en este caso llamado X72\r muestra los valores en otras etiquetas indicado en el recuardro en verde.

Ver zoom.

El problema como puedes ver en la captura, te muestra cada comando tramas diferentes en el cual quiero guardarlo en su variable para luego poder poner los valores en sus respectivos labels.

Los comandos los puedes ver, sus respuestas y errores si los hay.

Ver comandos PDF.

Código que he hecho hasta ahora solo funciona para el recuerdre verde.
Código:
using System;
using System.IO.Ports;
using System.Threading;
using System.Windows.Forms;

namespace Termite_SAI_04
{
    public partial class Form1 : Form
    {
        private delegate void DelegadoAcceso(String accion);
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                serialPort1 = new SerialPort("COM3", 2400, Parity.None, 8, StopBits.One);
                serialPort1.Handshake = Handshake.None;
                serialPort1.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
                serialPort1.ReadTimeout = 500;
                serialPort1.WriteTimeout = 500;
                serialPort1.DtrEnable = true;
                serialPort1.RtsEnable = true;
                serialPort1.Open();
                ComandoB();
                timer1.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (this.Enabled == true)
            {
                Thread.Sleep(500);
                string entrada = serialPort1.ReadExisting();
                this.BeginInvoke(new DelegadoAcceso(si_DataReceived), new object[] { entrada });
                //serialPort1.Write("B\r"); // Envía comando.
            }
        }

        private void si_DataReceived(string accion)
        {
            try
            {
                char[] separadores = { '#', 'I', 'O', 'L', 'B', 'V', 'F', 'H', 'R', 'S', '\r' };

                string[] salida = accion.Split(separadores, StringSplitOptions.RemoveEmptyEntries);

                label_I.Text = salida[0] + " Vac";
                label_O.Text = salida[1] + " Vac";
                label_L.Text = salida[2].TrimStart('0') + " %"; // Quita los ceros de la izquierda.
                label_B.Text = salida[3] + " %";
                label_V.Text = salida[4] + " Vdc";
                label_F.Text = salida[5].PadRight(5, '0') + " Hz"; // Añade ceros a la derecha.
                label_H.Text = salida[6].PadRight(5, '0') + " 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]);

                #region Mostrar horas y minutos.
                // Cálculos.
                int horas = resultadoSalida7 / 60;
                int minutos = resultadoSalida7 % 60;

                // ¿0 horas y 1 minuto?
                if ((horas == 0) && (minutos == 1))
                {
                    label_R.Text = $"{minutos} minuto.";
                }

                // ¿0 horas y 0 minuto?
                if ((horas == 0) && (minutos == 0))
                {
                    label_R.Text = $"{minutos} minutos";
                }

                // ¿0 horas y más de 1 minuto?
                if ((horas == 0) && (minutos > 1))
                {
                    label_R.Text = $"{minutos} minutos.";
                }

                // ¿1 hora y 0 minutos?
                if ((horas == 1) && (minutos == 0))
                {
                    label_R.Text = $"{horas} hora.";
                }

                // ¿Más de una hora y 0 minutos?
                if ((horas > 1) && (minutos == 0))
                {
                    label_R.Text = $"{horas} horas.";
                }

                // ¿1 hora y 1 minuto?
                if ((horas == 1) && (minutos == 1))
                {
                    label_R.Text = $"{horas} hora y {minutos} minuto";
                }

                // ¿1 hora y más de 1 minuto?
                if ((horas == 1) && (minutos > 1))
                {
                    label_R.Text = $"{horas} hora y {minutos} minutos.";
                }

                // ¿Más de 1 hora y 1 minuto?
                if ((horas > 1) && (minutos == 1))
                {
                    label_R.Text = $"{horas} horas y {minutos} minuto.";
                }

                // ¿Más de 1 horas y más de 1 minuto?
                if ((horas > 1) && (minutos > 1))
                {
                    label_R.Text = $"{horas} horas y {minutos} minutos.";
                }
                #endregion
            }

            catch (IndexOutOfRangeException ex)
            {
                Console.Write("Índice fuera de los límites de la matriz.");
                MessageBox.Show(ex.Message);
            }

            catch (FormatException ex)
            {
                Console.Write("La cadena de entrada no tiene el formato correcto.");
                MessageBox.Show(ex.Message, "Error");
            }
        }

        private void button_Ver_datos_Click_1(object sender, EventArgs e)
        {
            ComandoB();
        }

        private void button_Ver_Tabla_Click_1(object sender, EventArgs e)
        {
            ComandoX72();
        }

        // Comandos.
        void ComandoB()
        {
            serialPort1.Write("B\r");
        }

        void ComandoX72()
        {
            serialPort1.Write("X72\r");
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            ComandoB();
        }

        // Al cerrar el formulario.
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            timer1.Stop();          // Detiene el temporizador.
            Thread.Sleep(700);      // 0.5 segudos. 500 milisegundos.
            serialPort1.Close();    // Cierra el puerto serie.
        }
    }
}

¿Alguna idea?

Saludos.
35  Programación / .NET (C#, VB.NET, ASP) / Re: Horas, hora, minutos y minuto. en: 27 Noviembre 2023, 19:44 pm
Buenas de nuevo.

Ahora si lo quiero el funcionamiento tal cual como debe ser.


No digo que sea el mejor código pero funciona de maravilla.

Código
  1. using System;
  2.  
  3. namespace Minutos_Horas_Consola_04
  4. {
  5.    internal class Program
  6.    {
  7.        static void Main(string[] args)
  8.        {
  9.            #region Configuración ventana.
  10.            // Título de la ventana.
  11.            Console.Title = "De solo a Minutos a Horas y Minutos";
  12.  
  13.            // Tamaño de la ventana, x, y, o ancho y alto.
  14.            const byte ANCHO_X = 70, ALTO_Y = 25;
  15.            Console.SetWindowSize(ANCHO_X, ALTO_Y);
  16.  
  17.            // Color de fondo.
  18.            Console.BackgroundColor = ConsoleColor.Green;
  19.  
  20.            // Color de las letras.
  21.            Console.ForegroundColor = ConsoleColor.Black;
  22.  
  23.            // Limpiar pantalla y dejarlo todo en color de fondo.
  24.            Console.Clear();
  25.  
  26.            // Visible el cursor.
  27.            Console.CursorVisible = true;
  28.            #endregion
  29.  
  30.            while (true)
  31.            {
  32.                int totalMinutos;
  33.                Console.Write("Ingresa el valor de minutos: ");
  34.                totalMinutos = int.Parse(Console.ReadLine());
  35.  
  36.                // Cálculos.
  37.                int horas = totalMinutos / 60;
  38.                int minutos = totalMinutos % 60;
  39.  
  40.                // ¿0 horas y 1 minuto?
  41.                if ((horas == 0) && (minutos == 1))
  42.                {
  43.                    Console.WriteLine($"> {minutos} minuto.");
  44.                }
  45.  
  46.                // ¿0 horas y 0 minuto?
  47.                if ((horas == 0) && (minutos == 0))
  48.                {
  49.                    Console.WriteLine($"> {minutos} minutos.");
  50.                }
  51.  
  52.                // ¿0 horas y más de 1 minuto?
  53.                if ((horas == 0) && (minutos > 1))
  54.                {
  55.                    Console.WriteLine($"> {minutos} minutos.");
  56.                }
  57.  
  58.                // ¿1 hora y 0 minutos?
  59.                if ((horas == 1) && (minutos == 0))
  60.                {
  61.                    Console.WriteLine($"> {horas} hora.");
  62.                }
  63.  
  64.                // ¿Más de una hora y 0 minutos?
  65.                if ((horas > 1) && (minutos == 0))
  66.                {
  67.                    Console.WriteLine($"> {horas} horas.");
  68.                }
  69.  
  70.                // ¿1 hora y 1 minuto?
  71.                if ((horas == 1) && (minutos == 1))
  72.                {
  73.                    Console.WriteLine($"> {horas} hora y {minutos} minuto.");
  74.                }
  75.  
  76.                // ¿1 hora y más de 1 minuto?
  77.                if ((horas == 1) && (minutos > 1))
  78.                {
  79.                    Console.WriteLine($"> {horas} hora y {minutos} minutos.");
  80.                }
  81.  
  82.                // ¿Más de 1 hora y 1 minuto?
  83.                if ((horas > 1) && (minutos == 1))
  84.                {
  85.                    Console.WriteLine($"> {horas} horas y {minutos} minuto.");
  86.                }
  87.  
  88.                // ¿Más de 1 horas y más de 1 minuto?
  89.                if ((horas > 1) && (minutos > 1))
  90.                {
  91.                    Console.WriteLine($"> {horas} horas y {minutos} minutos.");
  92.                }
  93.            }
  94.        }
  95.    }
  96. }
  97.  

Son solo nueve combinaciones.

Saludos.
36  Programación / Scripting / Enviar y recibir comandos con PowerShell en: 27 Noviembre 2023, 00:12 am
Hola:

Quiero enviar dos comandos. Este es B<cr>. La letra B mayúscula y el retorno de carro. También quiero enviar otro comando por el puerto serie que es este, X72<cr>.

Una vez enviado el comando, su respuesta es trama de Bytes como este:

Comando B<cr>
Respuesta: #I225.7O226.2L006B100V25.7F50.2H50.2R0080S€„€ˆ„<cr>

Tal como muestra aquí.


Simplemente eso. No estoy familiarizado en PowerShell y por algo se empieza.

Saludos.
37  Programación / .NET (C#, VB.NET, ASP) / Re: Horas, hora, minutos y minuto. en: 26 Noviembre 2023, 20:30 pm
Muy buen código rápido.  ;-) ;-) ;-) ;-)

Hay una cosa que se te escapa.

En vez de poner:
> 0 horas y 1 minuto

Debe solo aparecer esto:
> 1 minuto.

Ya que el 0 horas no pinta nada. Otra cosa que sea al revés como esto:
> 1 Hora y 0 minutos. Así me da igual. O simplemente se pone a > 1 Hora.

Todo parece perfecto menos la parte 0 horas.

Por cierto, la forma nueva de mostrar en consola es esta.
Código
  1. Console.WriteLine($"> {h} {hs} y {m} {ms}");

Tu código es elegante.  ;D

38  Programación / .NET (C#, VB.NET, ASP) / Horas, hora, minutos y minuto. en: 26 Noviembre 2023, 13:48 pm
Buenas campeones:

Quiero lograr de alguna forma posible cuando se me presenta el tiempo en horas y minutos en hacer las cosas bien desde el principio. Por ejemplo, introduzco el valor 80 en la consola. Que en realidad son 80 minutos y equivale a una hora y 20 minutos.

Si aparece 2 minutos, que lo diga en plural, y si es un minuto que lo siga en singular, lo mismo para las horas, si dice 7 horas, que sea horassssss, con la s, y si es una hora, que ponga sin la s, es decir, hora, en singular.

Si introduzco 80, me tiene que responder:
> 1 hora y 20 minutos.


Introduzco: 1
> 0 Horas y 1 minuto.
Aquí solo debe aparecer esto: > 1 minuto, sin usar la palabra hora porque ya es cero horas.

Introduzco: 61
> 1 hora y 1 minuto.
Como se puede ver, hora y minuto en singular.

Introduzco: 121
> 2 horas y 1 minuto.
Si se fijan, la hora en horas con la s porque son más de una hora y un minuto sin s al final porque es solo un minuto.

¿Se entiende lo que quiero lograr?

Me he machacado mucho la cabeza y no me sale como quiero.

Uso el lenguaje C#. Código hecho hasta ahora gracias a los compañeros de este foro.

Código
  1. using System;
  2.  
  3. namespace Minutos_Horas_Consola_04
  4. {
  5.    internal class Program
  6.    {
  7.        static void Main(string[] args)
  8.        {
  9.            while (true)
  10.            {
  11.                int totalMinutos;
  12.                Console.Write("Ingresa el valor de minutos: ");
  13.                totalMinutos = int.Parse(Console.ReadLine());
  14.  
  15.                // ¿Es igual a 1 minuto?
  16.                if ((totalMinutos % 60) == 1)
  17.                {
  18.                    Console.WriteLine("> " + totalMinutos / 60 + " hora y " + totalMinutos % 60 + " minuto.\n");
  19.                    Console.WriteLine("Estoy en el IF 1.");
  20.                    Console.WriteLine("-------------------------");
  21.                }
  22.  
  23.                // ¿Es mayor a 60 segundos o 1 minuto?
  24.                if ((totalMinutos % 60) > 1)
  25.                {
  26.                    Console.WriteLine("> " + totalMinutos / 60 + " hora y " + totalMinutos % 60 + " minutos.\n");
  27.                    Console.WriteLine("Estoy en el IF 2.");
  28.                    Console.WriteLine("-------------------------");
  29.                }
  30.  
  31.                // ¿Es igual a 60 segundos o 1 minuto?
  32.                if ((totalMinutos % 60) == 0)
  33.                {
  34.                    Console.WriteLine("> " + totalMinutos / 60 + " hora y " + totalMinutos % 60 + " minutos.\n");
  35.                    Console.WriteLine("Estoy en el IF 3.");
  36.                    Console.WriteLine("-------------------------");
  37.                }
  38.            }
  39.        }
  40.    }
  41. }

¿Se me escapa algo?

Saludos.
39  Programación / .NET (C#, VB.NET, ASP) / Re: Recibir dos tramas por RS232 diferentes. en: 25 Noviembre 2023, 21:11 pm
Buenas:

Lo he probado y no hace nada de nada.  :(

No encuentro el motivo.

Eso si, tiene variables que se llama salida2 y es solo salida en tu código, ya corregido al compilar. Compila ahora todo, no da errores pero tampoco hace nada.
40  Programación / .NET (C#, VB.NET, ASP) / Recibir dos tramas por RS232 diferentes. en: 24 Noviembre 2023, 06:49 am
Hola:

Puedo recibir tramas de bytes por el puerto serie, una es esta si envía este comando:
Código:
serialPort1.Write("B\r");

#I230.3O230.0L007B100V25.7F50.2H50.2R0080S„€ˆ„À

y la otra es esta si envías este otro comando diferente:
Código:
serialPort1.Write("X72\r");

#2000,1400,230,45.0,55.0,8.6

En la primera tengo el código hecho en Windows Form y funciona.
Código:
using System;
using System.IO.Ports;
using System.Threading;
using System.Windows.Forms;

namespace Termite_SAI_04
{
    public partial class Form1 : Form
    {
        private delegate void DelegadoAcceso(String accion);
        public Form1()
        {
            InitializeComponent();
        }

        private void button_Ver_datos_Click(object sender, EventArgs e)
        {
            serialPort1.Write("B\r");
        }

        private void button_Ver_Tabla_Click(object sender, EventArgs e)
        {
            serialPort1.Write("X72\r");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                serialPort1 = new SerialPort("COM3", 2400, Parity.None, 8, StopBits.One);
                serialPort1.Handshake = Handshake.None;
                serialPort1.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
                serialPort1.ReadTimeout = 500;
                serialPort1.WriteTimeout = 500;
                serialPort1.Open();
                serialPort1.Write("B\r");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (this.Enabled == true)
            {
                Thread.Sleep(500);
                string entrada = serialPort1.ReadExisting();
                this.BeginInvoke(new DelegadoAcceso(si_DataReceived), new object[] { entrada });
                //serialPort1.Write("B\r"); // Envía comando.
            }
        }

        private void si_DataReceived(string accion)
        {
            try
            {
                char[] separadores = { '#', 'I', 'O', 'L', 'B', 'V', 'F', 'H', 'R', 'S' };

                string[] salida = accion.Split(separadores, StringSplitOptions.RemoveEmptyEntries);

                label_I.Text = salida[0] + " Vac";
                label_O.Text = salida[1] + " Vac";
                label_L.Text = salida[2].TrimStart('0') + " %"; // Quita los ceros de la izquierda.
                label_B.Text = salida[3] + " %";
                label_V.Text = salida[4] + " Vdc";
                label_F.Text = salida[5].PadRight(5, '0') + " Hz"; // Añade ceros a la derecha.
                label_H.Text = salida[6].PadRight(5, '0') + " 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.";
                }
            }

            catch (IndexOutOfRangeException ex)
            {
                Console.Write("Índice fuera de los límites de la matriz.");
                MessageBox.Show(ex.Message);
            }

            catch (FormatException ex)
            {
                Console.Write("La cadena de entrada no tiene el formato correcto.");
                MessageBox.Show(ex.Message, "Error");
            }
        }
    }
}

Aquí abajo es el trozo de códigos para leer esa trama que no se donde ponerlo.
Código:
            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] + " Vac";
            label_Resultado_corriente_nominal.Text = salida2[5] + " A";
            label_Resultado_valores_nominales_de_frecuencia.Text = salida2[3] + " ~ " + salida2[4] + " Hz";

¿Alguna ayuda?

Gracias.
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 255
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines