Bonjour,
J'ai un souci sur un PC, souci qui ne c'est pas reproduit sur d'autre. Et surtout ce souci ne surviens pas avec d'autres applications.
Concernant la gestion du port série.
Sur l'un des PC de ma boite, les ports séries sont capricieux(COM/USB directement sur le système donc communication par l'USB en faite par un port COM virtuel).
Il ne se ferme pas complètement apparemment, car parfois lorsque l'on essaie de se reconnecter il dit qu'il est déjà utilisé, ce qui n'est pas le cas.
Autre surprise que j'ai vu dans mon fichier de log que j'enregistre dans les try cask, j'ai eue une erreur sur la lecture du port COM, MySerialPort.ReadExisting() alors que je me trouve dans l'évènement de ce même MySerialPort.DataReceived
Comment peut t'il entrée dans le DataReceived si juste après il me dit qu'il n'est pas initialisé.
Je n'est jamais le cas sur mon PC et mon responsable n'a pas ce genre de souci non plus. Obliger d'attendre un bon moment avant de pouvoir reprendre, ou alors coupé la liaison physique et la rebranché pour que cela fonctionne immédiatement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
51
52 Private MySerialPort As SerialPort Friend Event MessageReply(ByVal reply As String) Friend Sub Connect(ByVal init As InitCOM) Try MySerialPort = New SerialPort With { .PortName = init.PortName, .BaudRate = init.BaudRate, .DataBits = init.DataBits, .Parity = init.Parity, .StopBits = init.StopBits, .Handshake = init.Handshake, .ReadTimeout = init.Timeout } AddHandler MySerialPort.DataReceived, AddressOf DataReceivedHandler MySerialPort.Open() Catch ex As Exception If ex.HResult <> -2146232800 Then WriteInLogFile("CLASSE_COMMUNICATION", , ex.ToString, idxClass) End If End Try End Sub Public Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs) Try line &= MySerialPort.ReadExisting() Dim theEndChars As String = Mid(line, Len(line)) If theEndChars = ChrW(6) Then RaiseEvent MessageReply(line) line = "" End If Catch ex As Exception WriteInLogFile("CLASSE_COMMUNICATION", , ex.ToString, idxClass) End Try End Sub Public Function CloseSerialPort() As Boolean Try If Not MySerialPort Is Nothing Then If MySerialPort.IsOpen Then MySerialPort.Close() End If End If Return True Catch ex As Exception WriteInLogFile("CLASSE_COMMUNICATION", , ex.ToString, idxClass) Return False End Try End Function
Auriez-vous une idée.
Je précise que j'ai nettoyé un peu le code ici, car j'ai une petite gestion d'erreur qui est aussi envoyé dans l'event,
Merci
Partager