Problème avec laison RS485 / COM1

Signaler
Messages postés
87
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
17 avril 2013
-
Messages postés
87
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
17 avril 2013
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
87
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
17 avril 2013

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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
é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
Messages postés
87
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
17 avril 2013

ok je vai essayer ca =)

Le langage c du Advantech Adam
Messages postés
87
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
17 avril 2013

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)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
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
Messages postés
87
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
17 avril 2013

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 ?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
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
Messages postés
87
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
17 avril 2013

ok ^^ bon bah en tout cas j'ai toujours rien en Comm.Input c dommage ca ^^
Messages postés
87
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
17 avril 2013

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 =)