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 original
Imports 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