Projet : RS 232 vers VBA sur région de Rennes

mikael2235

XLDnaute Occasionnel
Bonjour,

Je me permets de poster sur ce topic Breton, car nous recherchons un developpeur VBA pour nous aider sur un petit "projet".

Notre objectif, est de récupérer le signal RS232 d'une machine de controle, directement dans Excel.
La liaison PC-Machine est établi à l'aide d'un cable RS232 -> USB.
Un programme VB.NET à dejà été fait et fonctionne, ce qui signifie que la communication est OK.

Notre société est basé à 30km à l'Est de Rennes.

Merci.
 
Dernière modification par un modérateur:

Staple1600

XLDnaute Barbatruc
Re : Projet : RS 232 vers VBA sur région de Rennes

Bonjour à tous, bonjour voisins

mikael2235
Parce que rennais, je viens faire un tit couccou ici ;)
et mettre ce lien qui pourrait t'être utile
kenavo

PS: je suis rennais, mais pas développeur:eek: (professionnel je veux dire).
Mais si je peux t'aider sur XLD, ce sera avec plaisir :)
 

mikael2235

XLDnaute Occasionnel
Re : Projet : RS 232 vers VBA sur région de Rennes

Merci pour le lien, j'ai essayé pas mal de chose issues de ces topics mais Excel ne répond plus dès qu'il reçoit quelque chose.
 

MJ13

XLDnaute Barbatruc
Re : Projet : RS 232 vers VBA sur région de Rennes

Bonjour à tous


Voici un code que j'utilise avec un USF sur une balance. Mais dans ce cas, je ne récupère qu'une valeur en quelques secondes (le temps que la balance se stabilise).

Après si c'est pour récupérer des valeurs rapidement, il faudra voir avec des solutions plus professionnelles.

Code:
Private Sub UserForm_Activate()
'Vider le buffer
MSComm1.InBufferCount = 0
'choisir un port série
MSComm1.CommPort = 2 ' 1 est le n° de port que vous pouvez modifier
'Paramétrage du port; les valeurs sont fournies par le constructeur de l'appareil.
'Ces valeurs peuvent être entrées ici (pas très "propre"!)
'ou dans une procédure d'initialisation (c'est mieux)
'ou dans la propriété "Setting" du contrôle
'L'idéal étant d'offrir à l'utilisateur la possibilité de changer ces valeurs à partir d'un menu "Réglage"
'La balance utilisée dans cet exemple requiert les valeurs suivantes: 1200 bauds, bit de parité, 7 bits de données,  bit d'arrêt
MSComm1.Settings = "1200,o,7,1"
' indique au contrôle qu'il doit lire 1 seul caractère
'ce caractère servira à repérer la stabilisation de la balance
'ouvre le port
'Boucle dans le vide tant que le caractère lu n'est pas un signe plus (+)
MSComm1.InputLen = 20
MSComm1.PortOpen = True
'Stop
Application.Wait (Now + TimeValue("0:00:01"))
'Application.Wait Now + (TimeValue("00:00:01") / 1000) * 750

'Label1.Caption = MSComm1.Input
texte = MSComm1.Input
'MsgBox (texte)
nbcar = Len(texte)
'Cells(2, 1).Value = texte: Cells(2, 2).Value = nbcar
'If Left(texte, 1) = "N" And ActiveCell.Offset(-1, 0).Value <> texte And nbcar = 20 Then ActiveCell.Value = texte: Beep: ActiveCell.Offset(1, 0).Range("A1").Select
If Left(texte, 1) = "N" And ActiveCell.Offset(-1, 1).Value <> texte And nbcar = 20 Then ActiveCell.Offset(0, 1).Value = texte: If ActiveCell.Offset(-1, 0) > 100 Then ActiveCell.Value = 1 Else inc: Beep
'ActiveCell.Value = texte: Beep
'nbcar = Len(texte): If nbcar = 20 Then Cells(2, 1).Value = texte: Cells(2, 2).Value = nbcar
'Application.Wait (Now + TimeValue("0:00:01"))
'MsgBox (texte)

'ferme le port
MSComm1.PortOpen = False
texte = ""
Unload USF_balance
'ActiveCell.Offset(1, 0).Select
End Sub

Sub inc()
ActiveCell.Value = Format(Cells(ActiveCell.Rows.Row - 1, ActiveCell.Columns.Column).Value + 1, "00")
End Sub
 

mikael2235

XLDnaute Occasionnel
Re : Projet : RS 232 vers VBA sur région de Rennes

Bonjour,

J'ai donc essayé hier avec le code de MJ13. Après plusieurs essais, j'ai réussi à récupéré mon signal avec une boucle.
Code:
Private Sub UserForm_Activate()

'Vider le buffer
MSComm1.InBufferCount = 0
'config port série
MSComm1.CommPort = 4
MSComm1.Settings = "9600,n,7,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True
'Stop
Application.Wait (Now + TimeValue("0:00:01"))


Do
    Application.Wait (Now + TimeValue("0:00:01"))
    texte = MSComm1.Input
    nbcar = Len(texte)
    
    If texte <> "" Then
        ActiveCell.Value = texte
        GoTo finboucle
    End If
Loop

finboucle:

'ferme le port
MSComm1.PortOpen = False
texte = ""
Unload USF_balance
End Sub
Je récupère ceci :
"33760, 8.3 ,""NO CODE ASSIGNED "",13"


Par contre quand j'essaye avec MSCOMM_ONCOMM, je n'y arrive pas :
Code:
Public Function InitialiseCom(Com As MSComm, PortSerie As Integer)

MSComm1.InBufferCount = 0
MSComm1.CommPort = 4
MSComm1.Settings = "9600,n,7,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True

End Function

Public Sub MSComm1_OnComm()


'texte = MSComm1.Input
'Application.Wait (5000)
'MSComm1.PortOpen = False

'nbcar = Len(texte)

'If texte <> "" Then
'    Sheets("Datas").Activate
'    ActiveCell.Value = Now
'    ActiveCell.Offset(0, 1).Value = texte
'End If
Application.Wait (2000)
counter = 0

Do
    texte = MSComm1.Input
    nbcar = Len(texte)
    
    If texte <> "" Then
        ActiveCell.Value = texte
        'GoTo finboucle
    End If
Loop

finboucle:
MSComm1.PortOpen = False
End Sub
Avec ce code, il ne me récupère que :

Merci.
 

mikael2235

XLDnaute Occasionnel
Re : Projet : RS 232 vers VBA sur région de Rennes

J'ai continué à mener mes investigations aujourd'hui.
Toujours impossible à récuperer via un evenementiel MsComm_OnComm.

D'après ce que j'ai compris, pour que le MsComm_OnComm se déclenche, il faut que la longueur de la chaine reçue soit égale à Rthreshold.
Si Rthreshold est égal à 0, MsComm_OnComm ne se déclenchera jamais.

Ensuite, j'ai donc affiché sur ma feuille Excel la propriété CommEvent de mon controle MsComm, avec un Offset(1,0) pour tout garder.
Je me suis ainsi rendu compte que mon MsComm renvoie toujours ceci : 1004. Ce qui correspond à comEventFrame "Framing Error. The hardware detected a framing error."

Peut-être est-ce du au fait que je ne recoive pas le nombre de caractère indiqué dans mon RThreshold ?

Je continue à mener l’enquête...
 

Statistiques des forums

Discussions
312 502
Messages
2 089 024
Membres
104 007
dernier inscrit
Monvieux