Ho provato ad utilizzare la classe SerialPort inserendo l'oggetto SerialPort1 in un form che ho chiamato Main. All'interno dello stesso form ho inserito l'oggetto Timer1 in modo tale che il l'avvio dell'applicazione non coincidesse con l'invio della stringa e un oggetto Button1 che permetta il reinvio della stringa attraverso il riavvio del timer. Di seguito il codice:
codice:
Imports System
Imports System.IO.Ports
Public Class Main
Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles ExitToolStripMenuItem.Click
End
End Sub
Private Sub Main_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
With SerialPort1
.BaudRate = 9600
.DataBits = 8
.Parity = Parity.None
.StopBits = StopBits.One
.ReceivedBytesThreshold = 1
.Handshake = Handshake.None
.Encoding = System.Text.Encoding.Default
End With
SerialPort1.Open()
Timer1.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Timer1.Tick
Timer1.Stop()
SerialPort1.Write(Chr(&H55) & Chr(&H80) & Chr(&H80) & Chr(&H3))
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
Timer1.Start()
End Sub
End Class
Il costrutto DO-LOOP per il momento l'ho tralasciato.
PROBLEMA: inviando la stringa di caratteri Chr(&H55) & Chr(&H80) & Chr(&H80) & Chr(&H3) dovrei ricevere un byte di risposta dal dispositivo... cosa che non accade. In VB6 inviando la stessa stringa di caratteri aggiungendo il carattere "$" dopo il comando Chr (ovvero: Chr$(&H55) & Chr$(&H80) & Chr$(&H80) & Chr$(&H3)) il byte di risposta lo ricevo. VB.NET non consente l'utililzzo del carattere "$" dopo il comando Chr (cacchio!!).
Da ieri sera sono bloccato a questo punto... Ho scaricato un programma per il monitoraggio della comunicazione seriale che mi ha permesso di vedere che i caratteri inviati in un primo momento erano errati. Questo mi ha portato in un secondo momento ad aggiungere la riga di comando:
codice:
.Encoding = System.Text.Encoding.Default
In questo modo i caratteri inviati coincidono con i caratteri inviati in VB6.
Il problema della ricezione del byte di risposta dal dispositivo, comunque, resta.