l'utilisation ressemble à ca :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
Public Class Form1
Private _com As System.IO.Ports.SerialPort
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
_com = New System.IO.Ports.SerialPort
' paramétres à trouver en général sur la doc de la chose avec laquelle on veut dialoguer
_com.PortName = "COM1"
_com.BaudRate = 9600
_com.DataBits = 8
_com.StopBits = IO.Ports.StopBits.One
_com.Parity = IO.Ports.Parity.None
' démarrage du thread de réception
Dim th As New System.Threading.Thread(AddressOf receive)
th.IsBackground = True
th.Start()
End Sub
Private Sub send(ByVal str As String)
Dim octets(str.Length) As Byte
For i As Integer = 0 To str.Length - 1
octets(i) = CByte(Asc(str(i)))
Next
_com.Write(octets, 0, octets.Count)
End Sub
Private Sub receive()
While True
If _com.BytesToRead = 0 Then
System.Threading.Thread.Sleep(100)
Continue While
End If
Dim str As String = _com.ReadExisting
'traitement de str
End While
End Sub
End Class |
on définit le paramétrage du port com
j'ai mis un sub qui sert à envoyer un string (je traduit au passage en octet, j'ai dejà eut des soucis en envoyant un string directement)
et on démarre un thread qui sert à vérifier ce qu'il y a
sinon il y a un évènement de réception, mais je ne l'ai jamais utilisé, peut etre qu'il fonctionne bien
le problème de la communication c'est que ce n'est pas totalement fiable
en général il y a des caractères de fin de commandes sur lesquels il faut se baser, et il faut aussi vérifier l'intégrité de la trame
parce que si on truc renvoie une commande du type A>0145Cr
et qu'il y a des parasites, tu peux très bien recevoir 14eH47
ce qui n'a rien à voir !!!
donc il faut en général vérifier que ca correspond à ce que t'attends, si ça ne correspond pas, tu recommence l'envoie de la trame de question et tu attends une nouvelle réponse
Partager