Re bonsoir,
Après avoir résolu mon problème d'émission/réception avec ma carte électronique, voilà que surgit un nouveau problème... Je vous le conte, car il me semble assez désagréable à contourner, et j'aurais besoin de témoignages à ce sujet.
L'appli a été débugguée et testée avec succès sur un PC puissant (1024Mo de RAM et CPU de l'ordre de 3GHz). Restait quelques modifications à apporter. J'ai alors transféré l'ensemble sur mon laptop qui lui fonctionne à raison de 256Mo de RAM et 1GHz de CPU. Mais voilà, sur cette config l'appli ne parvient plus du tout à communiquer avec la carte, à cause d'un problème de timing !
Ce problème est gênant puisque l'appli perd de sa portabilité.
Voici selon moi la partie critique :
Avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 On Error GoTo errcom LabelCOM.Caption = "COM" & CStr(portCom) MSComm1.PortOpen = True ' Ouverture du port LabelCOM.ForeColor = &HC00000 Call Send_COM("-") ' Passage en mode invisible si ce n'est pas le cas Sleep (2000) MSComm1.OutBufferCount = 0 ' On vide le buffer d'émission pour éviter phénomène d'écho MSComm1.InBufferCount = 0 ' On vide le buffer de réception pour éliminer toute info inutile Call Send_COM("Z") Call Receive_COM
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Public Sub Send_COM(Message As String) sent = Message ' Sauvegarde message Label1.Caption = sent On Error GoTo errsend MSComm1.Output = sent & vbCr DoEvents On Error GoTo 0 Exit Sub errsend: Call MsgBox("Erreur (" & Err.Number & ") : " & Err.Description & vbCrLf & "Message : """ & Message & """", vbCritical, "Envoi COM" & portCom) Call Reinit_COM End SubComment ne pas subir les contraintes liées à la configuration de la machine ?
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 Public Sub Receive_COM() ' Tentative réception réponse On Error GoTo errrcv tampon = MSComm1.Input On Error GoTo 0 posCr = InStr(1, tampon, vbCr) ' Récupération du message reçu ligne par ligne While tampon <> "" And posCr > 0 If posCr > 1 Then Call Traitement(Mid(tampon, 1, posCr - 2)) ' Routine de traitement If posCr < Len(tampon) Then tampon = Mid(tampon, posCr, Len(tampon) - posCr) posCr = InStr(1, tampon, vbCr) Else tampon = "" posCr = 0 End If ElseIf posCr = 1 Then tampon = Mid(tampon, 2, Len(tampon) - 1) posCr = InStr(1, tampon, vbCr) End If Wend Exit Sub errrcv: Call MsgBox("Erreur (" & Err.Number & ") : " & Err.Description & vbCrLf & "Message : """ & Message & """", vbCritical, "Réception COM" & portCom) Call Reinit_COM End Sub
Merci d'avance
Partager