Port série et Visual Studio 2008

Résolu/Fermé
Hyades - 1 juil. 2008 à 15:58
Hyades Messages postés 3 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 5 août 2008 - 10 juil. 2008 à 14:34
Bonjour,

J'ai des erreurs lors du bout de programme ci-dessous (exemple de VS)

Ma configue :
5 ports séries
4 appareils differents connectés
Vérification logiciel de la bonne connection a faire après chaque démontage

Mon problème :
Lorsque la prise RS232 est branché sur un mauvais port, le logiciel attend sans fin

Mon code :
Dim retour As String = ""
' emission
Using com As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort(port, baud, parity, dataBits, stopBits)
com.WriteLine(data)
End Using
' réponse
Using port_com = My.Computer.Ports.OpenSerialPort(port, baud, parity, dataBits, stopBits)
Do
Dim Incoming As String = port_com.ReadLine()
If Incoming Is Nothing Then
Exit Do
Else
retour &= Incoming
End If
Loop
End Using
A voir également:

1 réponse

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
1 juil. 2008 à 16:00
il faut mettre un timeout. tu peux faire ca avec un thread ...
1
Bonjour

C'est sans effect, la com reste bloquée.

En modifiant le code :
On Error GoTo sort
Time_out.Enabled = True
Using port_com = My.Computer.Ports.OpenSerialPort(portName, baudRate, parity, dataBits, stopBits)
While port_com.BytesToRead > 0
retour &= port_com.ReadByte()
End While
End Using
GoTo fin
sort:
retour = "Erreur N°" & Err.LastDllError & " :" & vbCrLf & ErrorToString(Err.LastDllError)
fin:
Time_out.Enabled = False
On Error GoTo 0


J'obtient l'erreur :
Erreur N°87 :
Erreur définie par l'application ou par l'objet.

Je ne trouve rien sur cette erreur.
0
Hyades Messages postés 3 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 5 août 2008
10 juil. 2008 à 14:34
Bonjour

J'ai bien avancé, le code ci-dessous fonctionne (bouchon rx-tx relié sur com1:)

Public Shared Sub transmission()
port.open()
port.WriteLine(emis_port)
Dim Thread_in As Thread = New Thread(AddressOf reception)
Thread_in.Start()
Thread_in.Join()
port.Close()
End Sub

Public Shared Sub reception()
Try
recep_port = port.Readline()
Catch ex As Exception
recep_port = ex.Message
End Try
End Sub

Mais, celà ne permet pas de relier mon PC à un équipement qui refuse une valeur "NewLine" en fin de com.

j'ai donc :
Public Shared Sub transmission()
port.open()
For I = 1 To Len(emis_port)
port.write(Strings.Mid(emis_port, I, 1))
Next
Dim Thread_in As Thread = New Thread(AddressOf reception)
Thread_in.Start()
Thread_in.Join()
port.Close()
End Sub

Public Shared Sub reception()
Try
recep_port = port.ReadExisting()
Catch ex As Exception
recep_port = ex.Message
End Try
End Sub

Mais là, les derniers caractères (entre 4 et 7 ) ne sont pas lu.

Qui aurait une idée ?

Merci d'avance
0