none
hacer comparaciones en la recepcion algo como esto pero con vb.net como lo ago RRS feed

  • Pregunta

  • hola despues de buscar mucho mucho alguien que trabaja con lo mismo que yo me dio este ejemplo pero no es de vb.net

    1 se enviar

    2 se recivir

    3 mas o menos puedo mostrar lo recivido en un textbox

    4 los nombre que estan con boot en el ejemplo en reaildad no interesa si no lo que sale en el textbox cuando la respuesta del puerto es la correcta

    5 como ago la comparcacion de lo que recivo de mi puerto yo voy a enviar en byte "AF" Y TENGO QUE RECIVIR "FA" si esto es verdad tengo que mostra en un textbox "boot 1 ok" si la respuesta del puerto serie no es "FA" entonces el puerto se tiene que cerrar y mostrar en el textbox "boot 1 error"

    function TfrmMain.SendBoot: boolean;
    Const
     BB: byte = $BB;
     F: byte = $46;
     PSIStart: Array [0 .. 2] of byte = ($30, $94, $0F);
     SBLStart: Array [0 .. 3] of byte = ($D8, $81, $00, $00);
     start: Array [0 .. 5] of byte = ($02, $00, $86, $00, $50, $00);
    var
     i, c, z: integer;
     s: String;
     buf: Array [0 .. 77] of byte;
     Bootbuf: Array [0 .. 89] of byte;
    begin
     result := False;
     PurgeCom(10);
     ProgressBar1.Position := 5;
     AddLinesLog(1, 'Device synchronized!');
     AddLinesLog(1, 'Send PBL Boot');
     WriteCom(@PSIStart, sizeOf(PSIStart));
     WriteCom(@PBL, sizeOf(PBL));
     PurgeCom(10);
     WriteCom(@BB, 1);
     if not(ReadCom(@i, 3)) or (i <> $AA00C1) then
     Begin
      AddLinesLog(3, 'PRIMARY Boot not loaded');
      CloseCom;
      exit;
     End
     else
     begin
      AddLinesLog(1, 'PRIMARY Boot loaded!');
      ProgressBar1.Position := 30;
      PurgeCom(10);
      WriteCom(@SBLStart, sizeOf(SBLStart));
      if (ReadCom(@c, 2)) and (c = $CCCC) then
      Begin
       ProgressBar1.Position := 50;
       AddLinesLog(1, 'Send Second Bootloader');
       ProgressBar1.Position := 65;
       WriteCom(@SBL, sizeOf(SBL));
       PurgeCom(10);
       ProgressBar1.Position := 80;
       WriteCom(@F, 1);
       if ReadCom(@buf, sizeOf(buf)) then
       begin
        ProgressBar1.Position := 90;
        s := pchar(@buf[14]);
        AddLinesLog(1, s + ' is active!');
        AddLinesLog(1, 'Bootmode : ' + ByteToHex(buf[2]));
        result := True;
        /// ////////////////
        for z := 0 to sizeOf(start) do
         Bootbuf[z] := start[z];
        for z := 2 to 75 do
         Bootbuf[z + 4] := buf[z];
        for z := 76 to 81 do
         Bootbuf[z] := $00;
        Bootbuf[82] := $01;
        Bootbuf[83] := $01;
        Bootbuf[84] := $00;
        Bootbuf[85] := $00;
        // CRC Alternative i have no idea 
        case Bootbuf[18] of
         $44:
          Begin
           Bootbuf[86] := $0B;
           Bootbuf[87] := $0A;
           Bootbuf[88] := $03;
           Bootbuf[89] := $00;
          End;
         $73:
          Begin
           Bootbuf[86] := $9A;
           Bootbuf[87] := $09;
           Bootbuf[88] := $03;
           Bootbuf[89] := $00;
          End;
        end; // case
        WriteCom(@Bootbuf, sizeOf(Bootbuf));
        ReadCom(@buf, 12);
        ProgressBar1.Position := 100;
        /// ////////////////
       end
       else
       begin
        AddLinesLog(3, 'SBL Boot not loaded');
        CloseCom;
        exit;
       end; // else Begin
      End
      else // if (ReadCom(@c,2)) and (c = $CCCC)
      begin
       AddLinesLog(3, 'Wrong Answer');
       exit;
      end;
     end; // else Begin
    end;

     

    jueves, 6 de enero de 2011 22:50

Respuestas

  • Imports System.IO.Ports 
    Public Class PortsSerie       
     '
       
     'Declarar el evento disparo fin de recepcion
       
     Public Event RxFin(ByVal Trama As String)
       
     '   
     'String de recepcion utilizado como buffer   
     Private PortSerie_Recepcion As String = ""
       
     'Anadir el manipulador de recepcion en la sub New, Load…
       
     AddHandler
    PortSerie.DataReceived, AddressOf Rx
     
     Protected
    Sub Rx(ByVal sender As Object, _
                      ByVal e As serialDataReceivedEventArgs)
           
       Try
        
    'Añadir la recepcion actual al buffer           
         
    PortSerie_Recepcion += PortSerie.ReadExisting           
        
    If PortSerie_Recepcion.Contains(&hff) Then
                    
          'Indicar que la primera parte del envio es correcta                  
          'una vez completada/procesada la recepcion borrar buffer,
    PortSerie_Recepcion = ""
         End If       
      
    Catch ex As Exception
        
    'En caso de excepción        
     
    End Try
       
     End Sub
    End Class


    MVP - Visual Developer
    • Marcado como respuesta smithjhon martes, 18 de enero de 2011 2:10
    lunes, 17 de enero de 2011 17:08
    Moderador

Todas las respuestas

  • si hola como estan alguien sabe como hacerlos ??? gracias
    martes, 11 de enero de 2011 14:16
  • hola mis cuantes del foro donde estan sera que se fueron de vacaciones,  una manito por aca porfavor metaconta o pepluis o rfog  se los agradeceria llevo casi 8 dias inventando metodos que no dan resulatado gracias....saludos:)
    sábado, 15 de enero de 2011 1:09
  • Yo no puedo ayudarte mucho, porque ni sé VB6 ni VB.NET, pero por lo poco que entiendo del código, no hace lo que tu quieres ni de lejos. Además, usa las funciones WriteCom() y ReadCom() que no sé de dónde vendrán.

    En .NET, para recibir/enviar por el puerto serie, tienes el componente SerialPort, y seguro que en los foros de VB.NET y de C# hay una espuerta de respuestas sobre cómo usarlos.


    MVP Visual C++ - Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/
    sábado, 15 de enero de 2011 10:52
  • writecom y readcom es el nombre que le dan al puerto serie en la aplicacion detodas maneras gracias rfog
    sábado, 15 de enero de 2011 13:07
  • Apreciado Smithjhon,

    Creo que hemos intentado ayudar en tus preguntas. El problema es cuando la petición se corresponde a la confección de un programa. Mas que no por querer es por la falta de tiempo que ello implica. En principio el foro intenta responder preguntas concretas y si viene al caso, podemos intentar desarrollar algún fragmento de programa para ejemplizar una tecnología, pero no siempre es posible L.

    Vamos por partes. Primero deberías intentar utilizar alguno de los ejemplos que puedes encontrar en nuestros blogs, y posteriormente, hacernos preguntas concretas sobre las partes que no encajan en tu proyecto.

    Si quieres algunos ejemplos de como intercambiar datos entre dispositivos usando el puerto serie en lenguaje VB o C#, te aconsejo que los tomes como punto de partida en :

    http://msmvps.com/blogs/peplluis/archive/tags/Puertos+Serie/default.aspx

    Tambien puedes descargar mi libro de introducción a las comunicaciones serie en :

    http://msmvps.com/blogs/peplluis/archive/2007/06/18/robot-dispensador-de-msdn-video.aspx

    Y si lo deseas puedes enviarme tus comentarios utilizando la opción de [Contact]

    Saludos,
    Pep Lluis,

     


    MVP - Visual Developer
    lunes, 17 de enero de 2011 0:48
    Moderador
  • gracias pepluis y a todos los demas que dan soporte aca en el foros pero intente 5 veces o mas en el pasado mandar preguntas pro via contact y no obtube resultados y si siempre leo los blog de meta de rfog y el de voz como el mi amigo google jeje por la pregunta que tengo es bien facil

    si yo leo algo en bytes por purto serie como le dijo a un listbox1 o un textbox1 que lo compare con algun otro bytes y que si la respuesta es corecta me muestre un mensaje

    yo lo estoy haciendo con if rs232.readexisting=&Hff then

    textbox1 . text= "primera parte del envio es correcta"

    pero no logro hacerlo funcionar

    lunes, 17 de enero de 2011 16:52
  • Imports System.IO.Ports 
    Public Class PortsSerie       
     '
       
     'Declarar el evento disparo fin de recepcion
       
     Public Event RxFin(ByVal Trama As String)
       
     '   
     'String de recepcion utilizado como buffer   
     Private PortSerie_Recepcion As String = ""
       
     'Anadir el manipulador de recepcion en la sub New, Load…
       
     AddHandler
    PortSerie.DataReceived, AddressOf Rx
     
     Protected
    Sub Rx(ByVal sender As Object, _
                      ByVal e As serialDataReceivedEventArgs)
           
       Try
        
    'Añadir la recepcion actual al buffer           
         
    PortSerie_Recepcion += PortSerie.ReadExisting           
        
    If PortSerie_Recepcion.Contains(&hff) Then
                    
          'Indicar que la primera parte del envio es correcta                  
          'una vez completada/procesada la recepcion borrar buffer,
    PortSerie_Recepcion = ""
         End If       
      
    Catch ex As Exception
        
    'En caso de excepción        
     
    End Try
       
     End Sub
    End Class


    MVP - Visual Developer
    • Marcado como respuesta smithjhon martes, 18 de enero de 2011 2:10
    lunes, 17 de enero de 2011 17:08
    Moderador
  • gracias eso buscaba "contains(&Hff) " no sabia como hacerlo
    martes, 18 de enero de 2011 2:10