Port série et Visual Studio 2008

Résolu
Hyades -  
Hyades Messages postés 3 Statut Membre -
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
Configuration: Windows XP
Internet Explorer 7.0

1 réponse

  1. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    il faut mettre un timeout. tu peux faire ca avec un thread ...
    1
    1. hyades
       
      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
    2. Hyades Messages postés 3 Statut Membre
       
      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