Recupérer signal RS232 dans Excel via VBA. Communication etablie.

mikael2235

XLDnaute Occasionnel
Bonjour à tous,

Dans le cadre de mon travail, je souhaite récupérer dans Excel le signal RS232 d'une machine de contrôle.
Ceci dans le but de pouvoir faire une macro qui par la suite enregistrera les résultats dans le classeur.

C'est le premier point qui me pose problème.

Voici ce que j'ai comme doc du fournisseur :
5.4 RS232 DATA OUTPUT
Selections in the “STATISTICS” menu allow test data or a report to be sent to the RS232
port. A selection in the “TEST SETUP” menu allows each test result to be sent to the
RS232 port as it is completed. The RS232 report format will contain the same elements
as the selected printout format.
The following describes the RS-232 output format from System 226.
Baud : 9600
Bit : 7
Parity : Even
Stop : 1
Flow : none
1 2 3 4
1234567890123456789012345678901234567890
========================================
nnnnn, fff.f ,”ssssssssssssssssss” , ccCL
nnnn accumulative test number
fff.f test force result in grams
sss..sss failure mode description (in quotes)
cc failure mode code
C carriage return, ASCII code 13
L line feed, ASCII code 10

Le service informatique a tenté de faire une macro, n'a pas réussi, et a maintenant abandonné...
(Je précise qu'il ont fait quand même un executable, et que cela fonctionne. Il ne doit pas manquer grand chose)
Voici le contenu VBA de leur controle MSCOMM.

Parfois, Il recupère des données, mais soit pas assez, ou soit c'est vide.
Il arrive également, que la macro soit en erreur avec le message "Espace pile insuffisant".

Code:
Public Valeur As String
Public Delai
Public Ligne As Integer

Public Sub UserForm_Initialize()
'UserForm1.InitialiseCom MSComm1, 3
End Sub

Public Function InitialiseCom(Com As MSComm, PortSerie As Integer)

'Initialise le port Com
If Com.PortOpen = True Then Com.PortOpen = False

With Com
    .CommPort = PortSerie 'Port série utilisé
    .Settings = "9600,n,8,1" 'On définit ici les paramètres de transmission.
    .InputLen = 0 'Lire la totalité du tampon
    .Handshaking = 2 'Protocole de communication
    .RThreshold = 1 'déclenche procédure évenementielle à 1 caractères au moins
    .PortOpen = True 'Ouvre le port de communication
End With

End Function

Public Sub MSComm1_OnComm()
TraitementReponse MSComm1
End Sub

Public Sub TraitementReponse(Com As MSComm)
 
Select Case Com.CommEvent
    
    Case comEvReceive
    
        If Not Delai > Timer Then
            Valeur = ""
            Ligne = Ligne + 1
            Delai = Timer + 1
        End If
        DoEvents

        Do
           If (Timer > Delai) Then
               Exit Sub
           End If
           Valeur = Valeur & Com.Input
        Loop While Len(Com.Input) > 0 'vbCrLf
                 
        Worksheets("Sheet1").Cells(Ligne, 1) = Valeur
        'Worksheets("Sheet1").Cells(Ligne, 2) = Timer
        'Worksheets("Sheet1").Cells(Ligne, 3) = Delai
End Select

End Sub

Pourriez vous m'aider ?

Merci. Mikael
 

Jam

XLDnaute Accro
Re : Recupérer signal RS232 dans Excel via VBA. Communication etablie.

Salut Mikael,

Désolé mais je n'ai jamais eu l'occasion de programmer le port com.
J'ai néanmoins trouvé ce lien sur le web qui pourra peut-être t'intéresser sachant qu'il s'agit apparemment d'un classeur comportant un module de classe sur ce sujet. (Site en anglais VBA RS232 Class)

Bon courage
 

Gelinotte

XLDnaute Accro
Re : Recupérer signal RS232 dans Excel via VBA. Communication etablie.

Bonsoir,

dans ta macro : .Settings = "9600,n,8,1" alors que le fournisseur parle de 7 bits.
Donc, ne devrait-on pas écrire : .Settings = "9600,n,7,1" ?

Je n'ai malheureusement rien pour tester.



G
 

mikael2235

XLDnaute Occasionnel
Re : Recupérer signal RS232 dans Excel via VBA. Communication etablie.

Oui effectivement, cela devrait même être "9600,o,7,1" (o pour parité pair), mais cela fonctionne parfaitement avec "9600,n,8,1".
En fait ce que nous n'arrivons pas à faire correctement (sans erreur), c'est une macro qui va lire le input du port com et qui s'arrete pour exécuter le reste du code dès qu'elle détecte que ce input n'est pas vide.
 

Dranreb

XLDnaute Barbatruc
Re : Recupérer signal RS232 dans Excel via VBA. Communication etablie.

Bonsoir
Pourrais-je savoir où est défini le type de donnée MSComm ?
Module de classe maison, ou bibliothèque fournie et quelle référence alors ?
Que je puisse chercher un peu.
À priori si MSComm1_OnComm est, comme ça le suggère, un évènement décrété par cet objet, pour que ça puisse marcher, il devrait être déclaré WithEvent en tête du userform et initialisé par un Set. Mais peut être n'avez vous pas tout montré du code…

P.S. Ne cherchez plus: j'ai trouvé: "Microsoft Comm Control 6.0": fichier MSCOMM32.OCX
Et je dois vous remercier: grâce à vous j'ai trouvé un truc que je cherchais depuis longtemps: la clé permettant de savoir dans quelle DLL ou OCX se trouve n'importe quel type d'objet !
Ça n'enlève rien à ce que je disais: OnComm est bien en effet le seul évènement de l'objet MSComm. Le fait que la procédure de votre code soit Public me parait suspect. Un autre module s'amuserait-t-il à l'appeler ?
En tout cas tout semble me confirmer qu'il faudrait en tête de la classe que l'utilise (un userform apparemment):
VB:
Dim WithEnvents MSComm1 As MSComm
et faire un:
VB:
Set MSComm1 = New MSComm
dans Userform_Initialise pour que tout ça marche rond.
À +
 
Dernière édition:

Discussions similaires

Réponses
12
Affichages
242

Statistiques des forums

Discussions
312 111
Messages
2 085 391
Membres
102 882
dernier inscrit
Sultan94