1)El programa espera la recepciòn de un ENQ(05 Hex) o STX(02 Hex)
2) Si recibo lo del paso 1 , le envìo un ACK(06 Hex)
3)Luego de enviado el ACK leo todo lo que me manda la maquina externa, si es distinto de cualquier caracter de control, lo muestro.
4) Si recibo un EOT(04 Hex) mando un enter en la pantalla de recepcion para diferenciar las lineas.
5) Si recibo un ETX(03 Hex) le respondo con un ACK.
Supongo que en este caso se podrìa hacer un if o un select preguntando lo recibido, el tema es que no se como leer de manera correcta y poder comparar que es lo que se recibio para poder ejecutar la tarea necesaria segun lo que llega.
Código vb:
Ver originalImports System.IO.Ports
Imports System.Text
Public Class Form1
Dim recibidos As String
Dim stx As String = ASCIIEncoding.ASCII.GetString(New Byte() {2})
Dim etx As String = ASCIIEncoding.ASCII.GetString(New Byte() {3})
Dim eot As String = ASCIIEncoding.ASCII.GetString(New Byte() {4})
Dim enq As String = ASCIIEncoding.ASCII.GetString(New Byte() {5})
Dim ack As String = ASCIIEncoding.ASCII.GetString(New Byte() {6})
Public Sub New()
InitializeComponent()
If Not SerialPort1.IsOpen Then
Try
SerialPort1.Open()
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End If
AddHandler SerialPort1.DataReceived, AddressOf recepcion
End Sub
Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If SerialPort1.IsOpen Then
SerialPort1.Close()
End If
End Sub
Private Sub recepcion(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
recibidos = Chr(SerialPort1.ReadChar)
If recibidos = stx Or recibidos = enq Then
SerialPort1.Write(ack)
Else
If recibidos <> stx And recibidos <> etx And recibidos <> enq And recibidos <> ack And recibidos <> eot Then
Me.Invoke(New EventHandler(AddressOf actualizar))
Else
If recibidos = eot Then
Me.Invoke(New EventHandler(AddressOf actualizarenter))
Else
If recibidos = etx Then
SerialPort1.Write(ack)
End If
End If
End If
End If
End Sub
Private Sub actualizar(ByVal s As Object, ByVal e As EventArgs)
textbox_visualizar_mensaje.Text = textbox_visualizar_mensaje.Text & recibidos
End Sub
Private Sub actualizarenter(ByVal s As Object, ByVal e As EventArgs)
textbox_visualizar_mensaje.Text = textbox_visualizar_mensaje.Text & vbLf
End Sub
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
StatusStrip1.Items(0).Text = DateTime.Now.ToLongTimeString
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
SerialPort1.Encoding = System.Text.Encoding.Default
End Sub
End Class