MODBUS RTU "Silence"?

aftens Messages postés 3 Date d'inscription jeudi 25 mai 2006 Statut Membre Dernière intervention 8 août 2007 - 8 août 2007 à 17:13
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 10 août 2007 à 20:30
Bonjour, j'ai créé un programme qui envoie des trames MODBUS ASCII sous visual basic 2005 express.
Maintenant j'aimerais rajouter le format RTU, mais la je coince, les sources sur le format RTU sont peu nombreuses et bug.
Concernant la construction du CRC, je n'ai pas de souci avec, il y a suffisamment de sources.
Je voudrais savoir sous quel format on envoie les infos en mode RTU.

En MODBUS ASCII j'utilise la ligne suivante:
dim send_string as string
send_string = "01060100177071"
objMSCOMM.Output = C
hr(&H3AS) & send_string & Chr(&HDS) & Chr(&HAS)
Aucun souci avec le modbus ASCII.

Par contre si je modifie ma trame en RTU , j'obtiens ca:
dim send_string as string
send_string = "0106000012ABAD14"

objMSCOMM.Output =  send_string
, cela ne marche pas.
J'ai vus quelque part que le mode RTU utilisait l'hexa pour sa trame.
Quelqu'un peut il me dire comment je dois convertir mon send_string, le format string ne doit pas être le bon. Me donner le type et le format de la ligen en verte ci-dessus?
J'ai essayer le format char et integer sans succés non plus.

J'ai vu également qu'il était question de silence au début et à la fin de la trame, et en fonction des matériels (automates, variateurs...), elle pouvait être différentes.
Quelqu'un peut il me donner quelque précision sur ces silences, comment les rajoute t-on dans le code, et dois t'on forcément connaitre la valeur du silence du recepteur?
Merci pour vos réponses

2 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
9 août 2007 à 00:47
Salut
Je pense que "0106000012ABAD14" ne doit pas être envoyé sous forme ASCII mais sous forme de Bytes dont les valeurs sont dans ta chaine :
Dim monCode As String
monCode = "0106000012ABAD14"
Send_String = ""
For r = 1 To (Len(monCode$) / 2) Step 2
   Send_String = Send_String & Chr$(Val("&h" & Mid$(monCode$, r, 2)))
Next r

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
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
10 août 2007 à 20:30
... tu nous le dirais si ça tombait en marche ...
0
Rejoignez-nous