Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - Meta

Páginas: [1]
1
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: [Seleccionar]
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.

2
¿Cómo están compañeros del foro?

Se trata de que uso un terminal llamado Termite gratuito que lee el puerto serie, envío una letra B mayúscula y seguido envía también el \r.



La configuración es esta:


Como dije arriba, con Termite he enviado el comando B. Su respuesta es esta:

#I225.7O226.2L006B100V25.7F50.2H50.2R0080S€„€ˆ„À

A partir de la página 4 indica el comando a enviar que es el B y luego explica todo lo que recibe después.

Ver documento PDF.

En el programa Termite al enviar el comando B, recibe toda una trama de Bytes en el cual quiero ponerlo por separado en  Windows Form 4.7.2 .net o superior con Visual Studio Community 2022 gratuito.

En la versión que tengo, no se usa la C, T ni la Q. De todas formas al recibir las tramas de Bytes lo vas a ver.

Leer la S de forma independiente lo veo complicado, lo dejaré más adelante hasta cuando consiga lo más sencillos.

Quiero saber la forma más directa que al recibir la trama de Bytes, al menos me centro en vez de esto con la S:
#I226.6O226.6L006B100V25.7F50.2H50.2R0120S€„€ˆ„À

Me centro sin la S con esto indicado abajo:
#I226.6O226.6L006B100V25.7F50.2H50.2R0120

Me imagino que todo esto se almacenará en una variable tipo string, luego habrá que separarlo por cada textBox que se muestre.

Ejemplo con Windows Form.


¿Algún ejemplo de cómo separar la trama de Bytes y mostrarlo de forma independiente en el Windows Form en código C#?

Muchas gracias por leer hasta aquí.

3
Lo tengo en unidades de metros.

Quiero calcular un cilindro como este, su volumen.


h = altura.
r = radio.
v = volumen.


Aquí hice un pequeño programa en la consola C# que calcula solo introduciendo dos valores, el radio del cilindro o depósito de agua y la altura.

Código: [Seleccionar]
using System;

namespace namespace_Calculo_cilindro_consola_02_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "Cálculo geométrico cilindro - C# 2019";
            Console.SetWindowSize(50, 25);

            // Variables.
            double Pi = 3.14;
            double radio = 0;
            double altura = 0;
            double areaLateral = 0;
            double areaTotal = 0;
            double volumen = 0;
            double litros = 0;

            Console.WriteLine("===== Área lateral =====");
            Console.Write("Introduce el radio en m.: ");
            radio = double.Parse(Console.ReadLine());
            Console.Write("Introduce la altura en m.: ");
            altura = double.Parse(Console.ReadLine());

            // Cálculo área lateral.
            areaLateral = 2 * Pi * radio * altura;

            Console.WriteLine("Área lateral = 2 x Pi x radio x altura.");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Área lateral: {0} m^2. (Metros cuadrados). \n", areaLateral);

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("===== Área total =====");

            // Cálculo área Total.
            areaTotal = areaLateral + 2 * (Pi * (radio * radio));

            Console.WriteLine("Área total = Áreal lateral + 2 x (Pi x r^2)");
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("Área total = {0} m^2. \n", areaTotal);

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("===== Volumen =====");
            Console.WriteLine("Volumen = Pi x radio^2 x altura");

            // Cálculo volumen.
            volumen = Pi * (radio * radio) * altura;

            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("Volumen = {0} m^3. (Metros cúbicos). \n", volumen);

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("===== Litros =====");
            Console.WriteLine("Litros = Volumen * 1000");
            Console.WriteLine("Litros = {0} m^3 * 1000", volumen);

            // Cálculo litros.
            litros = volumen * 1000;

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("Litros = {0:N2}", litros + " L.\n");

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.CursorVisible = false;
            Console.WriteLine("\n\n\nFIN DE PROGRAMA. Pulse cualquier tecla para salir.");
            // Pulse cualquier tecla para salir.
            Console.ReadLine();
        }
    }
}



Me falta hacer una fórmula que no se hacer sobre saber que cantidad de litros tengo en este depósito de agua o cilindro. Por ejemplo, ya que la altura es de 0 a 2 metros, quiero saber que si cambio la altura del agua, por ejemplo que está a 0.7 metros, que me muestre el porcentaje en %. Está claro que si está el nivel del agua a 2 metros de altura que es la máxima, será el 100 %.

1. Si la altura está en 0.7 metros. ¿Qué porcentaje muestra?

2. ¿Qué cantidad de Litros de agua hay cuando está el nivel de agua a 0.7 metros?

3. ¿Alguna idea de pasar este código de C# a C++ nativo con Visual Studio Community 2019?

Solo me falta saber estas dos cosas en papel.

Saludos.

4
Hola:

Haciendo una aplicación Java con Spring, Hibernate, Maven y demás bajo Eclipse, me dan estos errores indicado aquí.



Buscando el spring-context me llevó hasta aquí.

https://mvnrepository.com/artifact/org.springframework/spring-context

Selecciono el 4.3.1 Release.
https://mvnrepository.com/artifact/org.springframework/spring-context/4.3.1.RELEASE

Me aparece esto.
Código: [Seleccionar]
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.1.RELEASE</version>
</dependency>

No tengo ni idea sobre esto.

¿Alguna ayuda?

Y suponiendo que esto tenga algo que ver.

Saludos.

5
Hola:

Uso STS-Eclipse, spring de Java y el servidor el JBoss. El proyecto que quiero hacer es enviar y recibir datos string por el puerto serie. Hace tiempo hice un tutorial en pdf sobre Java con NetBeans haciendo una interfaz de escritorio y se puede encender, apagar y recibir datos de los Led.

Ver tutorial:http://www.slideshare.net/Metaconta2/interfaz-java-y-arduino.

Primer paso, empezar enviar datos por el puerto serie, cuando funcione, ya empezaremos lo de recibir datos.

En este caso, usaré la tecnología indicada arriba, una interfaz hecha con xhtml y usar clases en Java. Por ejemplo. Tengo hecho una interfaz en xhtml sencilla como indica abajo.



Como puedes ver arriba, debe encender un Led del pin 8, tiene dos botones, en este ejemplo he puesto que si pulsas el botón ON, en el texto de abajo aparece Led_8_ON, si pulsas el botón OFF, aparecerá el texto Led_8_OFF.

Dicho texto Led_8_ON y Led_8_OFF, son string que debo enviar por el puerto serie.

test.xhtml

Código: (xml) [Seleccionar]
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Test</title>
<h1>Haciendo pruebas</h1>
</h:head>
<h:body>
<h:form>
<p:panel header="Cuadro de control">
<p:panelGrid columns="1" id="gridname">
<p:outputLabel  value="Led 8: " />
<p:commandButton id="led8on" value="ON" actionListener="#{test.led8ON}" update="resultado" />
<p:commandButton id="led8off" value="OFF" actionListener="#{test.led8OFF}" update="resultado" />
<p:inputText required="false" id="resultado" value="#{test.guardarUltimoValor}" />
</p:panelGrid>
</p:panel>
</h:form>
</h:body>
</html>

He creado una clase Java llamada Test.java.
Código: (java) [Seleccionar]
package net.meta.practica.business.test;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("view")
public class Test {

// Variables.
final String LED8ON = "Led_8_ON";
final String LED8OFF = "Led_8_OFF";
String guardarUltimoValor = "";

// Métodos.
public void led8ON(){
guardarUltimoValor = LED8ON;
}

public void led8OFF(){
guardarUltimoValor = LED8OFF;
}

// Getters y Setters.
public String getGuardarUltimoValor() {
return guardarUltimoValor;
}

public void setGuardarUltimoValor(String guardarUltimoValor) {
this.guardarUltimoValor = guardarUltimoValor;
}

public String getLED8ON() {
return LED8ON;
}

public String getLED8OFF() {
return LED8OFF;
}
}

Para que entiendan de que va. xhtml hace de interfaz, la clase Test.java ahí está la estructura del programa para este ejemplo sencillo.


Hace tiempo que no toco Java, con STS-Eclipse ando perdido, es nuevo para mi.

Siguiendo este ejemplo. ¿Qué hay que hacer?
- Intentar configurar el puerto serie, en este caso puede ser COM4 o el que sea a 115200 de baudios, 2 bit de stop.
- Enviar estos dos string llamada Led_8_ON que lanza el botón ON y el Led_8_OFF que lanza el botón OFF al puerto serie.

Pueden aportar ideas de como hacerlo lo mejor posible y sin complicaciones.

1) Para la clase Test.java, ¿cómo o cuál es la mejor manera de enviar el dato de la variable llamado en este caso LED8ON?

2) ¿Hago todo el código en la misma clase?

Un cordial saludos.

PD: Menudo tostón de post. Espero que se entienda algo hasta donde quiero llegar, nos acompañharemos a llegar... ;)

Páginas: [1]

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".