Problème avec laison RS485 / COM1

InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013 - 21 avril 2011 à 14:53
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013 - 22 avril 2011 à 11:54
Bonjour,

Je suis actuellement en stage et pour ce stage je dois réaliser un programme qui me permet de controler la température d une salle blanche, pour cela j ai 5 capteurs de type T3411 et un convertisseur RS485/232 relié à un ordi.
Pour l instant je souhaiterai juste réussir a afficher la température qu affiche le capteur sur la forme.
Mais je ne recois rien en MsComm1.input

Voila ma classe T3411

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Public Comm As MSComm
Public CommPort As Integer
Public Address As Integer
Private Const Timeout As Double = 2#

Option Explicit

'Fonction permettant d'initialiser les capteurs
'
'
Public Function Init() As Boolean


On Error GoTo NoComm
Init = False
With Comm
If Not .PortOpen Then
.Settings = "9600,N,8,1" '9600bauds/s , aucune parité , 8 bits de données , 1 bit de stop
.CommPort = 1 'CommPort
.InputMode = comInputModeText
.DTREnable = True
.Handshaking = comNone
.InBufferSize = 1024
.NullDiscard = True
.RTSEnable = False
.RThreshold = 1
.PortOpen = True
End If
End With
Wait 5
Init = True
On Error GoTo 0
Exit Function

NoComm:
On Error GoTo 0


End Function



'cette fonction va permettre de lire la température qu'indique notre capteur d'adresse XX
'sachant que nous avons 5 capteurs, d'adresses: 01 à 05


Public Function ReadTemperature(val_Temp As Double) As Boolean

'=======variables==========

Dim cmd As String
Dim rsp As String
Dim StartTime As Double

'==========================


'commande-------------

cmd = "#" & "05" & "0" & vbCr
'la commande pour lire une valeur est sous cette forme #AAx
'où AA correspond a l addrese de notre capteur et
'x correpond à ce qu'on souhaite mesurer, 0: lire température.

Comm.Output = cmd 'on envoit la commande vers notre capteur d'adresse AA

StartTime = TimerExtended


ReadTemperature = False


'réponse--------------
Do
DoEvents
rsp = rsp & Comm.Input '/!\ PROBLEME DE RECEPTION DES DONNEES ? /!\
If ElapsedTime(StartTime) > Timeout Then Exit Function
Loop Until InStr(rsp, vbCr) <> 0

If Left(rsp, 1) = ">" Then
val_Temp = Val(Mid(rsp, 2))
'on prend toute la chaine de caractère a partir du deuxième caractère(le signe). exemple de réponse >+023.21 soit 23.21°C

If val_Temp > -20 And val_Temp < 100 Then ReadTemperature = True End If

End Function

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



En y allant en mode debogage, je constate que la commande Outpu pour le com passe bien en lecture seule mais mon comm.Input est toujours a: "" donc rien ......
L adresse de mon capteur est bien 5 ....

De plus l entreprise qui a fournit le capteur propose un logiciel qui permet de régler le capteur et en le lancant j arrive bien a voir la température du capteur sur l écran de l ordi donc la liaison se fait ....

Je suis nouveau ICi mais svp aidez moi parce que la je sais plus quoi faire et y a pas grand monde pour m aider =)

PEACE

10 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 avril 2011 à 15:47
Salut

Première chose : la liaison physique
Es-tu certain du paramétrage de COM ?
Comment est-elle cablée ? En 3 fils ou plus ?
Parce que le contrôle de flux matériel (CTS, RTS, etc) ne se fait plus beaucoup au profit du contrôle de flux (automatique) HandShaking avec codes Ascii 10 et 11.
3 fils = HandShaking actif
Plus = avec contrôle matériel

Pour le dialogue, comme expliqué dans l'aide de l'objet COM, la réception des données ne se provoque pas : il faut attendre que le buffer dise qu'il a quelque chose à lire.
Es-tu sûr que la fin de trame (émission comme réception) doive se terminer par un vbCr (13) ?

D'où sortent les instructions comme Wait ou ElapsedTime ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
22 avril 2011 à 09:11
salut, merci d avoir répondu, bah en fait si je suis sur que les cablages sont bon car comme je l ai écrit quand j utilise le logiciel de l entreprise arrive bien a voir la température sur l ordi donc c que la commande a bien été envoyé et qu on recoit correctement la réponse de l esclave.

Wait et Elapsedtime sont just des tempos et des sécurité, en fait un programme était deja fait et j'ai repris certaines choses comme les temps de sécurité comme ca, mais en mode débgage j arrive bien o moment ou ca faitrsp = rsp & Comm.input donc voila ^^

Donc pour l instant dans mon stage je fais rien, je me fai un peu ch... donc si vous pouviez m aider pour ce petit probleme, jsuis sur que c pas grand chose mais ca mes cas.... .. ...... =)

Ciao
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 avril 2011 à 10:57
étrange de voir que tu envoies une chaine...

tente de changer :

cmd = "#" & "05" & "0" & vbCr

en

cmd = "#" & chr(05) & chr(0) & vbCr

au moins pour le test

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
22 avril 2011 à 11:09
ok je vai essayer ca =)

Le langage c du Advantech Adam
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
22 avril 2011 à 11:15
bon bah apparement ca change rien a part que quand je suis en mode debogage jai cmd= "#carrécarrécarré" ou carré c la forme d un carré quoi ^^

alors qu avant j avais: cmd="#050carré"

En plus maitnenant le chr(05) il le transforme tout seul en chr(5)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 avril 2011 à 11:18
oui, 0 non significatif...
peu importe le débogage, c'etait pour tester que ton interlocuteur voulait bien recevoir les octets suivants :

35 48 48 53

et non

35 0 0 5

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
22 avril 2011 à 11:28
ok heu je me suis mis dans débutant parke je débute vraiment en VB XD donc heu je ocmprend pas bien ^^

pk 35 48 48 53 stp ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 avril 2011 à 11:31
Code ascii..

au final, ce qui est transmis est toujours du numérique.
l'artifice d'utiliser des String dans VB embrouille son monde, mais derrière, on envoies toujours du numérique...



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
22 avril 2011 à 11:35
ok ^^ bon bah en tout cas j'ai toujours rien en Comm.Input c dommage ca ^^
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
22 avril 2011 à 11:54
ha c'est bon j'ai trouvé !!!!!!

Message pour une autre personne qui utiliserai un T3411 (ou meme un appareil de chez COMET)
Enlevez le cavalier !!!! (et bien sur changer le protocol en Adam sans CRC si vous voulez faire comme j ai fait pour la commande)

Donc voila sujet résolu =)
0
Rejoignez-nous