Interfaz puerto serie PicRS232 v2.00 (beta)

Hola:

Estoy con un nuevo proyecto, pero con Arduino.


En un mes presentaré algo con C#, VB, C++ y posiblemente Java incluido. Luego con Raspberry Pi 2 mejor que las shield de red.

Saludo.
 
Hola:

616372


Tengo el tutorial más del 50 % hecho, por ahora hecho completo la parte de Visual C# para encender y apagar un Led con Arduino y recibir mensajes a PDF y XPS. También acabado en Visual Basic .net, Visual C++.

Me falta WPF de C# a pesar que lo tengo acbado y funcionando, aún no lo he incluido en el tutorial porque estoy con VB 6 haber si me sale algo. También me falta WPF VB .net, Java me falta solo la entrega de leer datos de texto y los trels lenguajes en modo consola.

Buen día,

hoy quiero pedir su colaboración acerca de realizar en visual basic.net CRC 16 Modbus, si tienen algun ejemplo les agradezco,

Gracias

Si tuviera un CRC 16 Modbus hago ejemplos con todos los lenguajes.

Aquí les dejo el programa principal, la versión 3.00 (Alfa), solo eldiseño de la interfaz, que puede leer entradas y salidas.

fsdafasdfsad.jpg







Cuando lo acabe, lo presnetaré

Puedes aportar ideas para esta interfaz y quedar muy amigable para todos. ;)

Gracias por todo y sigo en este mismo momento trabajando.
 
Última edición por un moderador:
Meta te hago una consulta, porque decidiste trabajar con arduino?? Y no con micros de microchip? Me he armado un pinguino 4550 el cual pienso correrlo con el bootloader mi microchip. Que opinas sobre este mismo? Saludos.

Edit: Yo tambien realize una interfaz rs232, aunque no le di tanta importancia al soft, lo hice con VB6 y las imagenes y datos se encuentran en este hilo: https://www.forosdeelectronica.com/f26/puerto-serial-visual-basic-1311/index10.html
 
Última edición:
Hola @Finskey:

He pasado a Arduino por pura curiosidad y me cansé del asm en grandes proyectos. Con Arduino hago lo que quiero en muy poco tiempo. A pesar que estoy en estos momentos con Arduino, no abandono los PIC ni loco. ;)

Repito. No abandono los PIC ni loco. Que sepas, desde hace años tengo en asm para estos PIC16F886/887, PIC18F2550/4550 controlando el puerto serie. Cuando acabe con Arduino que estoy más motivado, vuelvo a presentar tutoriales a mi estilo, que también estoy motivado. ;)

Es más, tengo intenciones de tocar Arduino y PIC juntos si llegara hacer falta.

Y si, si le doy importancia crear una interfaz. Desde el 2008 apenas había gente que lo hacían, y los que lo hacían no era en .net. Lo aprendí hacer, hice mi propio tutorial y finalmente lo adapté al público. Hay otros tutoriales que han surgido otros tutoriales que se nota que vino del mio como este que no ha cambiado ni el nombre de las variables y tampoco las tramas de bytes en la página 12 de 55 frente al mío de la pagina 157 de 510. Xdddddddddddddd. Me he enterado porque lo encuentro por casualidad o simplemente me dicen que me plagian, pero eso no es plagiar, es copiarse, palgiar es decir que mi tutorial del PDF que creé sea de otra persona.

Si hicieste esto, estás hecho un profesional.
Ver imagen.

Para el próximo tutorial que estoy haciendo, precisamente necesito ayyuda con VB 6, como crear un botón, configurar puerto serie, enviar tramas de bytes por puerto serie, recibir tramas de bytes también en un textBox. Si te interesa colaborar, eres muy bien venido, con entender lo que pido, haré un buen tutorial incluido VB 6 también.

En este mismo momento que estoy escribiendo, estoy con Java, ya me funciona todo y me falta ampliar el tutorial sobre entrada de texto por puerto serie. Les dejo la primera parte de Java con NetBeans 8.

Buenas @COSMICO:

Claro que si. Le he pasado una muestra de más de 200 páginas el que me ayudó con Java sobre leer puertos serie y se quedó plasmado.

Tengo hecho en el tutorial:
Visual C# 2013.
Visual Basic 2013.
Visual C++ 2013.
WPF C#.

Me falta acabar:
WPF VB 2013.
Java.
C#, VB .net y C++ 2013 en modo consola. Esto lo hago como último y como curiosidad, preparado para controlar 8 relés.
Extras para ampliar conocimientos de hacer una buena interfaz solo en C#.
Todo lo demás ya son electrónica, fotos, vídeos, enlaces...

Sigo con le tutorial, luego sigo con la interfaz, y en ella, cada cierto tiempo subo imágenes para que den sugerencia para llevarlo a buen camino.

Llevo casi un mes con el tutorial, es un poco grande y genérico. El Java me costó mucho tiempo. VB 6 me no encuentro información detallada posible para hacer pequeñas pruebas y entenderlo, por eso necesito ayuda para no pegarme media vida.

fsdafasdfsad-1247399.png


Gracias por comentar.
 

Adjuntos

  • Java.rar
    1.7 MB · Visitas: 17
Última edición:
Buen día,

Adjunto el código que utilice para la realización del CRC16 Modbus por si es de ayuda para alguien, esto con los datos de tipo BYTE, y no string.

Código:
#Region "Calculo CRC16 ModBus"
    Public Function CRC16(ByVal data() As Byte) As Int64

        Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC register
        Dim CL As Byte, CH As Byte 'Polynomial codes & HA001
        Dim SaveHi As Byte, SaveLo As Byte
        Dim i As Integer
        Dim Flag As Integer

        CRC16Lo = &HFF '&HFF
        CRC16Hi = &HFF '&HFF
        CL = &H1
        CH = &HA0

        For i = 0 To LenghtDatos
            CRC16Lo = CRC16Lo Xor data(i) 'for each data and CRC register XOR

            For Flag = 0 To 7
                SaveHi = CRC16Hi
                SaveLo = CRC16Lo
                CRC16Hi = CRC16Hi \ 2 'peak shift to the right one
                CRC16Lo = CRC16Lo \ 2 'shift to the right a low

                If ((SaveHi And &H1) = &H1) Then 'If the high byte last one for a
                    CRC16Lo = CRC16Lo Or &H80 'then the low byte shifted to the right after the meeting in front of a
                End If 'Otherwise, auto-fill 0

                If ((SaveLo And &H1) = &H1) Then 'If the LSB is 1, then XOR with the polynomial codes
                    CRC16Hi = CRC16Hi Xor CH
                    CRC16Lo = CRC16Lo Xor CL
                End If
            Next Flag
        Next i

        ReturnData(0) = CRC16Hi 'CRC high
        ReturnData(1) = CRC16Lo 'CRC low

    End Function
#End Region

La variable LenghtDatos es el tamaño en byte del array a analizar.
 
Buen día,

Comparto el código para utilización de 2 usart por hardware con interrupciones y funcionando correctamente, ya que busque bastante y no encontré ejemplos o ayuda sobre el tema, una particularidad por la que no me funcionaba bn y me quemo la cabeza un poco es que el pin C6, no se declaraba como salida y por ende no transmitía por dicho puerto, sin mas agrego el código funcionando perfecto, Gracias

estoy atento a correcciones, dudas o sugerencias,

Código:
 #include <18F26J50.h>
  //#ifdefined(_PCH_)
  #device adc=10

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                      //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOCPUDIV              

#use delay(clock=20000000)       //Utilizo frecuencia de 12Mhz la del oscilador

#pin_select  U2RX=PIN_B7
#pin_select  U2TX=PIN_B6

#use rs232(baud=9600,parity=N,xmit=PIN_b6,rcv=PIN_b7,bits=8,stream=AppPC) //Puerto1
#use rs232(baud=9600,parity=N,xmit=PIN_c6,rcv=PIN_c7,bits=8,stream=Campo)//Puerto2

  #include <stdlib.h>
  #include <string.h>
  #use standard_io(a)
  #use standard_io(b)
  #use standard_io(c)
  #define PIN_ON  output_high
  #define PIN_OFF output_low

//*************************************************************************************************************************************
//--------------------------------------variables globales
//************************************************************************************************************************************* 
int i,lenghtdatos;
int8 cbuff[255];   // Buffer de recepcion de datos serie

//************************************************************************************************************************************* 
//--------------------------------------Interrupcion serie
//************************************************************************************************************************************* 
#INT_RDA
void  Recepcion(void)   //
   {
   lenghtdatos=getc(Campo);
   for(i=0;i<=lenghtdatos;i++)
      {cbuff[i]=getc(Campo);}
       fputc(43,Campo);
   }
   
   #INT_RDA2
void  Recep(void)   //
   {
   lenghtdatos=getc(AppPC);
   for(i=0;i<=lenghtdatos;i++)
      {cbuff[i]=getc(AppPC);}
   fputc(43,AppPC);

   }
//************************************************************************************************************************************* 
//------------------------------------Programa Principal
//************************************************************************************************************************************* 
void main()
{  
   SET_TRIS_C(0B10111111);
   enable_interrupts(INT_RDA);     // Habilita la interrupcion serial
   enable_interrupts(INT_RDA2);     // Habilita la interrupcion serial
   enable_interrupts(GLOBAL);       // Habilito todas las interrupciones

//------------------------------------------------MI PROGRAMA!!-------------------------------------------------------------------
     
  while (true)               // bucle infinito 
   { 
        fputs("MensajePuerto1",Campo);
        fputs("MensajePuerto2",AppPC);
        delay_ms(3000);
   }
}
 
Buenas:

¿Qué tal gente del foro?

Con el nuevo .Net 5.0 bajo Visual C#, ha cambiado mucho a la hora de crear Interfaz que comunique con el puerto serie. Se usa ahora mismo Visual Studio community 2.019 gratuino.

Dejo un mini tutorial sobre envío de datos por el puerto serie.

Paso 1.
Usaremos Windows Form con .Net 5.0. Arrastramos dos botones al formulario.
Captura.PNG

Paso 2.
Esta parte ha cambiado, ahora hay que añadir referencia del System.IO.Ports, a parte de añadirlo también en using. Enel Explorador de soluciones, vete a Dependencias y con el segundo botón, Administrar paquetes NuGet.
Añadir System-IO-Ports 01.png
Paso 3.
En buscar poner serialPort, que sea .NET que es el oficial, pulsa el botón instalar.

Sin título.png

Paso 4.
Te pondrá un aviso que habrá cambios. Simplemente aceptas y ya lo tienes.
Añadir System-IO-Ports 03.png

Código fuente C#:

C#:
using System;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports; // No olvidar y añadir en referencia.

namespace Puerto_serie_con_Net_50
{
    public partial class Form1 : Form
    {
        SerialPort serialPort1 = new SerialPort();

        public Form1()
        {
            InitializeComponent();
            Configuracion();
        }

        void Configuracion()
        {
            // Configuramos el puerto serie.
            serialPort1.BaudRate = 9600;            // Baudios. 115200
            serialPort1.PortName = "COM2";          // Nombre del puerto serie.
            serialPort1.Parity = Parity.None;       // Sin paridad.
            serialPort1.DataBits = 8;               // 8 Bits.
            serialPort1.StopBits = StopBits.Two;    // Bits de parada.
            serialPort1.ReadBufferSize = 4096;      // Tamaño del Búffer de lectura en Bytes.
            serialPort1.WriteBufferSize = 2048;     // Tamaño del Búffer de escritura en Bytes.
            serialPort1.ReadTimeout = 500;
            serialPort1.WriteTimeout = 500;
            serialPort1.DtrEnable = false;
            serialPort1.RtsEnable = false;

            // Abrir puerto mientras se ejecuta la palicación.
            if (!serialPort1.IsOpen)
            {
                try
                {
                    serialPort1.Open(); // Abrir puerto.
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }


        private void button_ON_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = Encoding.ASCII.GetBytes("Led_ON");
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        private void button_OFF_Click(object sender, EventArgs e)
        {
            // Variable tipo arreglo codificado en ASCII.
            byte[] mBuffer = Encoding.ASCII.GetBytes("Led_OFF");

            // Envía en la variable mBuffer "Led_OFF" al puerto serie.
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        // Al cerrar la ventana o el formulario
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                serialPort1.Close(); // Cerrar puerto.
            }

            catch (Exception error)
            {
                MessageBox.Show(error.Message, "Aviso:",
                MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
    }
}

Por ahora y parece que .Net 5.x y el futuro .Net 6.x y en adelante, no incluirá el componente serialPort para arrastrarlo al formulario. Ahora es hacerlo todo a códigos.

Gracias por tu tiempo.
 

Adjuntos

  • Añadir System-IO-Ports 03.png
    Añadir System-IO-Ports 03.png
    17.6 KB · Visitas: 1
Atrás
Arriba