Autor Tema: Ayuda proyecto con PIC  (Leído 1399 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ricardoliz

  • PIC10
  • *
  • Mensajes: 3
Ayuda proyecto con PIC
« en: 14 de Abril de 2013, 09:14:32 »
Hola comunidad de todopic, un saludo para todos y espero que estén bien.

Paso a comentar el problema inicial para el cual necesito ayuda.

Tenemos en el laboratorio dos equipos que se comunican por puerto serial de la siguiente forma:

Llamemos al equipo solicitante Equipo_A, éste equipo recibe por otro medio (Lan), paquetes de información firmados. Entonces requiere que otro equipo le indique la cadena String de comprobación (CRC) que le indica que el paquete es válido.

Ejemplo: Equipo_A: Solicita comprobación del paquete con cadena string 'STF32554S', el Equipo_B recibe esa cadena y se conecta a un servidor para obtener el CRC, que seria por ejemplo '7TREWQ899'.

Hasta aquí todo bien, el inconveniente que tenemos es que el Equipo_B, a veces responde con cadenas nulas, vacías o con las cadenas CRC pegadas (dobles o triples), lo que hace que el Aquipo_A se bloquee, ya que solo puede recibir cadenas CRC de 9 caracteres.

Nuestra solución fue colocar un PC (Con dos puertos COM) en medio de los dos equipos y crear un programa en VB6 que filtre esas CRC y solo deje pasar las de 9 caracteres. Para cuando le llegan longitudes dobles o triples, tome los últimos 9 caracteres y los envie. Adicionalmente guarde la última cadena CRC válida transmitida y la repita, si llega una cadena nula, una cadena inferior a 9 mucho mas grande que el triple.

El programa es muy sencillo, pero no podemos tener un PC permanentemente en el sitio, por cuestiones de espacio y energía.

Alguien nos sugirió que como el programa es sencillo, lo hicieramos en un PIC y así solucionariamos todo (espacio, energia, uso de PC).

Solo tenemos conocimeinto de armado d circuitos pero no de programacion para PIC.

Por eso solicito a quien pueda colaborarme, modificando el código de vb6 a PIC.

Colocamos un commandButton, dos timers y dos MSComm

Código: [Seleccionar]
Option Explicit

Private sDatoA As Variant

Private Sub Command1_Click()
  Timer1.Interval = 500
  Timer1.Enabled = True
  Timer2.Interval = 500
  Timer2.Enabled = True
End Sub

Private Sub Form_Load()
  With MSComm1
    .CommPort = 1
    .Settings = "115200,n,8,1"
    .PortOpen = True
  End With
 
  With MSComm2
    .CommPort = 3
    .Settings = "115200,n,8,1"
    .PortOpen = True
  End With
 
End Sub

Private Sub Timer1_Timer()
  MSComm2.Output = MSComm1.Input 'Le enviamos al servidor la solicitud del Equipo_A
End Sub

Private Sub Timer2_Timer()
  filtrakey MSComm2.Input 'Llega una CRC
End Sub

Private Sub filtrakey(ByVal CRCKey As Variant)
  Dim pKey1 As Variant
  Dim pKeym As Variant
  Dim pKey2 As Variant
   
  If Len(CRCKey) = 57 Then 'Cuando llegan pegadas tres CRC de longitud válida
    pKey2 = Right(CRCKey, 19)   'CRC de la parte derecha
    'Las CRC que venian pegadas son iguales
    If sDatoA <> pKey2 Then 'La CRC de la derecha es igual a la izquierda comparo cualquiera
      MSComm1.Output = pKey2 'Enviamos la CRC que llega al Equipo_A
      sDatoA = pKey2 'Guardo la CRC
    End If   
  End If
 
  If Len(CRCKey) = 38 Then 'Cuando llegan pegadas dos CRC de longitud válida
    pKey2 = Right(CRCKey, 19)  'CRC de la parte derecha
    If sDatoA <> pKey2 Then 'La CRC de la derecha es igual a la izquierda comparo cualquiera
      MSComm1.Output = pKey2 'Enviamos la CRC que llega al Equipo_A
      sDatoA = pKey2 'Guardo la CRC
    End If   
  End If
 
  If Len(CRCKey) = 19 Then 'Llega una CRC de longitud válida
    pKey1 = CRCKey 'Guardo la CRC para comparar
    If sDatoA <> pKey1 Then 'La key que llega es diferente de la anterior
      MSComm1.Output = pKey1 'Enviamos la CRC que llega al Equipo_A
      sDatoA = pKey1 'Guardo la nueva CRC
    End If   
  End If
 
  'Cuando no llega ningun CRC correcto entonces repetimos el anterior,
  'intentando que no se bloquee
  If (sDatoA <> "") And (Len(CRCKey) <> 19) Then 'Ya hay un CRC anterior correcto y el que llega tiene longitud incorrecta
    MSComm1.Output = sDatoA 'Enviamos el CRC anterior
  End If

End Sub

Les agradezco cualquier colaboración, Nosotros compramos un MASM 232 y un PIC 16F628A, pero no sabemos y nos sirvan.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Ayuda proyecto con PIC
« Respuesta #1 en: 14 de Abril de 2013, 12:21:31 »
Porque no ir al fondo de la cuestion y resolver el problema de base, en vez de intentar parchearlo ??
Porque no nos cuentas que equipos son los que comunican en ese protocolo, y que tipo de enlace utilizan, cual es su longitud y como esta instalado, y tal vez podamos ayudarte mejor.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado ricardoliz

  • PIC10
  • *
  • Mensajes: 3
Re: Ayuda proyecto con PIC
« Respuesta #2 en: 14 de Abril de 2013, 13:09:15 »
Gracias por responder MGLSOFT, lo que sucede es que son equipos muy viejos, y los tenemos para pruebas en el laboratorio de telecomunicaciones, no podemos solucionar el problema, directamente en los equipos, porque desconocemos su funcionamiento interno y ademas ya no hay soporte. Supongo que en lugar de intentar reparar esto. Podemos crear la solución propuesta, pero, obviamente se necesita de alguien que sepa programar pics y no le vea el feo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Ayuda proyecto con PIC
« Respuesta #3 en: 14 de Abril de 2013, 13:16:51 »
Pero explícanos mas sobre como se interconectan, tal vez por allí venga el problema, por viejos que sean, puede que anduvieran bien cuando fueron nuevos y hoy día están salteándose algún detalle que los hacia funcionar bien en el cableado de comunicaciones, como podría ser que usen handshaking y el cableado que hoy usen no lo posea...
Si alguna vez funcionaron bien, deberían seguir haciéndolo...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado ricardoliz

  • PIC10
  • *
  • Mensajes: 3
Re: Ayuda proyecto con PIC
« Respuesta #4 en: 14 de Abril de 2013, 13:31:04 »
Aquí otra persona me recomendo revizar picbasic para modificar el código, dice que es fácil, que lo único de tener cuidado es como usar dos puertos seriales.
Mañana buscare un profesor de electrónica a ver que luces me puede dar.

Gracias a todos de todas formas.