cs_plastik
Messages postés16Date d'inscriptionsamedi 1 février 2003StatutMembreDernière intervention 4 juin 2012
-
24 mai 2011 à 12:46
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
24 mai 2011 à 19:42
Bonjour à tous,
je suis entrain de programmer un petit logiciel pour m'aider dans mon travail.
Je dois communiquer en passant par un port série avec un appareil de la société dans laquelle je bosse.
Mon seul soucis se situe au niveau des informations que je reçoit de cet appareil lorsque je lance une requête.
J'utilise HDD Free serial port monitor pour voir ce qui se passe.
Je reçois bien une réponse au format hexadécimal : 01 1F 00 0A 00 08 00 00 00 00 00 00 00 00 1C
Ce qui est exact mais le soucis c'est que lorsque je veux faire apparaître cette réponse dans un textbox il m'affiche deux petit carré??
Pouvez-vous s'il vous plaît m'aider?? J'utilise Visual Studio 2008.
Merci.
Voici la partie de mon code qui nous intéresse:
Imports Microsoft.Win32
Public Class Form1
Dim WithEvents serialPort As New IO.Ports.SerialPort
Private Sub CommencerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommencerToolStripMenuItem.Click
rk = Registry.CurrentUser.CreateSubKey("SOFTWARE\montool")
Dim port_busmanager As String
port_busmanager = rk.GetValue("Port_busmanager")
If port_busmanager = "" Then
MsgBox("Veuillez indiquer le port série à utiliser dans les options.")
Me.Close()
Exit Sub
End If
If serialPort.IsOpen Then
serialPort.Close()
End If
Try
With serialPort
.PortName = port_busmanager
.BaudRate = 19200
.Parity = IO.Ports.Parity.Even
.DataBits = 8
.StopBits = IO.Ports.StopBits.One
.ReadBufferSize = 128
.DtrEnable = 1
End With
serialPort.Open()
Catch ex As Exception
MsgBox(ex.ToString)
Exit Sub
End Try
serialPort.Write(Chr(&H1) & Chr(&H1F) & Chr(&H0) & Chr(&H0) & Chr(&H1E))
Label27.Hide()
GroupBox6.Show()
End Sub
Private Sub DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serialPort.DataReceived
TextBox2.Invoke(New myDelegate(AddressOf updateTextBox), New Object() {})
End Sub
Public Delegate Sub myDelegate()
Public Sub updateTextBox()
TextBox2.Text = serialPort.ReadExisting
End Sub
End Class
cs_plastik
Messages postés16Date d'inscriptionsamedi 1 février 2003StatutMembreDernière intervention 4 juin 2012 24 mai 2011 à 16:52
ca y est c'est bon j'ai trouvé.
Il suffit de lire les octet dans un tableau comme ceci:
serialPort.Read(lectures, 0, 15)
lol maintenant j'aurai une dernière question.
Pouvez-vous me dire comment on fait pour savoir lorsque la réponse donné lors d'une requête est fini.
Je veux dire j'ai plusieurs requête à envoyer à l'appareil mais je dois attendre la réponse à chaque fois mais je ne sais pas comment faire pour attendre cette réponse.
Merci pour votre aide !!
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 24 mai 2011 à 19:42
Je pense que c'est la fin du message reçu qui le déterminera.
D'après ce que tu as donné en exemple, je vois "1C" ou "00 1C".
1C décmal 28 FS = File Separator : c'est cohérent.
--> D'abord regarder dans la doc, sinon, se baser sur l'expérience des trames reçues.
Pour attendre une réponse, il faut monter un Booléen après une requète pour dire "En attente de réponse" et :
- lors de la réception : le passer à False quand tu vois le Byte final
- dans la sub qui fait les requète, sortir de la Sub si en attente, ou ajouter une boucle d'attente de la valeur False (pas trop conseillé)