J'ai eu une réponse en mp, j'en fais profiter tout le monde même si ça n'a pas résolu mon problème :
Citation de MCSilver
Salut C4rr3r4, en réponse à ton appel à l'aide pour transformer une chaîne de byte en string:
Disons que l'on veut lire le registre 400011 de l'équipement à l'adresse ModBus 9, il faut envoyer (en décimal et peut importe la méthode choisie pour l'envoyer sur le port):
9,3,0,10,0,1,CRC_Hi,CRC_Lo
Maintenant, pour arricher à obtenir cette chaîne de caractères dans une String:
Dim MyString as String
MyString=Chr(9) & Chr(3) & Chr(0) & Chr(10) & Chr(0) & Chr(1) & Chr(2) & Chr(CRC_Hi) & Chr(CRC_Lo)
*Sache que tu ne pourras valider le contenu de cette trame car étant une variable string, à l'affichage, VB essaiera d'afficher le caractère ASCII 0, qui n'est pas un caractère affichable, il le remplacera par un autre caractère genre "|"*
Pour obtenir une chaîne de Byte dans un tableau:
Dim MyArrByte(9) as Byte
MyArrByte(0)=9
MyArrByte(1)=3
....
MyArrByte(8)=CRCHi
MyArrByte(9)=CRCLo
Il y a une 3e méthode proposée par SerialPort.Write (Char,Int, Int). Ne l'utilise par c'est incompatible avec le ModBus (les paramètres de trame ne peuvent pas êtres signés (-1 à -127, ils doivent demeurer dans une plage positive 0 à 255).
Voilà, n'hésites pas si tu as d'autre Q. Bonne chance.
Auquel j'ai répondu :
Salut, merci de m'avoir répondu :)
je t'explique la situation plus en détail, c'est tout simple.
J'ai un automate (iSmart SMT-CD-R20), sur cette automate j'ai une lumière branchée sur une sortie, et je dois créer un logiciel pour allumer cette lumière en envoyant une trame Modbus (supporté par l'automate).
Mon programme est très simpliste, j'ai une interface graphique avec un bouton connexion pour ouvrir le port série COM1, un bouton pour envoyer une trame et une textbox pour lire un retour quelconque de trame sur le port COM1.
Et voila le code pour le moment de mon bouton envoyer :
Code Visual Basic :
Private Sub send_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles send.Click
Dim retour As String
'envoie de la trame
serialport.Write(...)
retour = serialport.ReadExisting
log.Text += retour
End Sub
je ne sais pas quoi mettre à la place des "..."
la trame que je dois envoyer est la suivant pour allumer la lumière : 01 06 00 07 00 80 39 AB (en hexa) h80=128, h39=57, hAB=171, le CRC est bon c'est 39 AB
j'ai testé avec simply modbus, j'arrive à envoyer cette trame et allumer la lumière donc mon cablage est bon ;)
pour envoyer une trame sur le port série il y a juste la méthode write de l'objet serialport qui s'implémente avec une string, un tableau de byte ou un tableau de char.
je sais qu'en faisant la méthode chr(01) & chr(00) ... ça ne fonctionne pas car le chr(00) est considéré comme NUL et donc n'envoie pas "0", j'ai essayé en décimal mais je ne sais pas trop comment envoyer la trame en décimal
à la fin de ton message tu me dis de ne pas employer la méthode write, ok mais comment je m'y prends pour envoyer une trame sur le port série alors ?
désolé pour toutes ces questions mais il n'y a pas beaucoup d'infos sur le net :/