oks gracias fijate solo del .rar hay esta todo estamos en contacto espero tu respuesta
gracias por todo
exitos!!!
				
			gracias por todo
exitos!!!
Follow along with the video below to see how to install our site as a web app on your home screen.
							
						
Nota: This feature currently requires accessing the site using the built-in Safari browser.
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

	#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
	 #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);
   }
}
	



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);
            }
        }
    }
}
	