Traduction GW BASIC en VB [Résolu]

Anguel 32 Messages postés mardi 8 novembre 2005Date d'inscription 15 septembre 2011 Dernière intervention - 31 mai 2007 à 19:02 - Dernière réponse : Anguel 32 Messages postés mardi 8 novembre 2005Date d'inscription 15 septembre 2011 Dernière intervention
- 4 juin 2007 à 13:14
Bonjour
 S'il vous plait
 Es ce que


quelqu'un


(une)
peu m'aider de convertir le code GW Basic en Visual basic
sa sert a diriger des cameras speed dômes en travers le rs 232
 Merci d'avance. A bientôt<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>







Anguel
voila le code :




10 CLS: REV$ = "$Header: d:/protocol/p/RCS/pproto.bas 1.3 2000-11-21 07:41:57-08 Hamilton Exp Hamilton $"


20 PRINT REV$


30 PRINT "Example P-Protocol Commands"


40 PRINT "Unsupported software from Pelco"


50 '


60 OPEN "COM1:4800,N,8,1" AS #2


70 CMNDCOUNT = 0


80 PANSPEED = 32


90 TILTSPEED = 32


100 SOM = &HA0: REM Start of message


110 EOM = &HAF: REM End of message


120 ADDRESS = 2


130 CMND1 = 0


140 CMND2 = 0


150 DATA1 = 0


160 DATA2 = 0


170 '


180 REM Get direction to move the dome


190 KPAD$ = INKEY$


200 IF LEN(KPAD$) = 0 THEN 180


210 IF KPAD$ "x" OR KPAD$ "X" THEN 750


220 IF KPAD$ "s" OR KPAD$ "S" THEN 390


230 IF KPAD$ "a" OR KPAD$ "A" THEN 480


240 IF LEN(KPAD$) 1 THEN BYTE3 ASC(KPAD$): GOTO 560


250 IF LEN(KPAD$) <> 2 THEN 180


260 BYTE3 = ASC(MID$(KPAD$,2,1))


270 '


280 REM &Hxx is used to indicate hex numbers


290 IF BYTE3 &H4D THEN CMND2 &H2: DATA1 = PANSPEED: ID$ = "R": GOTO 560: REM Right


300 IF BYTE3 &H4B THEN CMND2 &H4: DATA1 = PANSPEED: ID$ = "L": GOTO 560: REM Left


310 IF BYTE3 &H48 THEN CMND2 &H8: DATA2 = TILTSPEED: ID$ = "U": GOTO 560: REM Up


320 IF BYTE3 &H50 THEN CMND2 &H10: DATA2 = TILTSPEED: ID$ = "D": GOTO 560: REM Down


330 IF BYTE3 &H47 THEN CMND2 &H40: ID$ = "W": GOTO 560: REM Wide angle


340 IF BYTE3 &H49 THEN CMND2 &H20: ID$ = "T": GOTO 560: REM Tele


350 REM Woops it's not a used code, print it out and try again


360 PRINT "'";HEX$(BYTE3);"'";


370 GOTO 180


380 '


390 REM Ask for a new speed


400 INPUT "Enter in a new positive speed less than 64 (cr = 32)";SPEED


410 IF SPEED 0 THEN SPEED 32


420 IF SPEED > 64 OR SPEED < 0 THEN 400


430 PANSPEED = SPEED


440 TILTSPEED SPEED: IF SPEED 64 THEN TILTSPEED = 63


450 PRINT "Using pan/tilt speeds of:";PANSPEED;"/";TILTSPEED


460 GOTO 180


470 '


480 REM Ask for a new camera address


490 REM Note that camera addresses are one based


500 INPUT "What camera address should be used (cr = camera 2)";ADDRESS


510 IF ADDRESS 0 THEN ADDRESS 2


520 IF ADDRESS > 255 OR ADDRESS < 0 THEN 500


530 PRINT "Using a camera address of:";ADDRESS


540 GOTO 180


550 '


560 REM Send it out


570 PRINT USING"\\ ##: ";ID$,CMNDCOUNT;


580 CMNDCOUNT CMNDCOUNT + 1: IF CMNDCOUNT > 99 THEN CMNDCOUNT 0


590 GOSUB 930: REM Send it


600 '


610 REM For next time start with everything at zero


620 CMND1 = 0


630 CMND2 = 0


640 DATA1 = 0


650 DATA2 = 0


660 '


670 REM Now stop it moving after a second, or more, of motion


680 REM Note that the subroutines may move if this gets renumbered and


690 REM the next few lines are commented out.


700 REM GOSUB 770: REM Delay a sec


710 REM GOSUB 830: REM Send it


720 REM GOSUB 770: REM Delay a sec


730 GOTO 180


740 '


750 REM All done


760 PRINT "All done"


770 PRINT DATE$,TIME$


780 END


790 '


800 REM Wait for up to one second


810 X$ = RIGHT$(TIME$,2)


820 IF X$ = RIGHT$(TIME$,2) GOTO 820


830 RETURN


840 '


850 REM Get the checksum


860 CHECKSUM = SOM XOR EOM: REM Do these first


870 CHECKSUM = CHECKSUM XOR ADDRESS: REM Now XOR in the address


880 CHECKSUM = (CHECKSUM XOR CMND1) XOR CMND2: REM And the commands


890 CHECKSUM = (CHECKSUM XOR DATA1) XOR DATA2: REM Then the data


900 CHECKSUM = CHECKSUM AND 255


910 RETURN


920 '


930 REM Send it out and display it


940 GOSUB 850: REM Get checksum


950 D1$ = CHR$(SOM)


960 D2$ = CHR$(ADDRESS)


970 D3$ = CHR$(CMND1)


980 D4$ = CHR$(CMND2)


990 D5$ = CHR$(DATA1)


1000 D6$ = CHR$(DATA2)


1010 D7$ = CHR$(EOM)


1020 D8$ = CHR$(CHECKSUM)


1030 PRINT #2,D1$;D2$;D3$;D4$;D5$;D6$;D7$;D8$;


1040 X = SOM: GOSUB 1150


1050 X = ADDRESS: GOSUB 1150


1060 X = CMND1: GOSUB 1150


1070 X = CMND2: GOSUB 1150


1080 X = DATA1: GOSUB 1150


1090 X = DATA2: GOSUB 1150


1100 X = EOM: GOSUB 1150


1110 X = CHECKSUM: GOSUB 1150


1120 PRINT


1130 RETURN


1140 '


1150 REM Print out a command byte


1160 X$ = HEX$(X)


1170 IF LEN(X$) 1 THEN X$ "0" + X$


1180 PRINT X$;" ";


1190 RETURN
Afficher la suite 

13 réponses

Répondre au sujet
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 3 juin 2007 à 05:14
+3
Utile
Salut
Bon, tu as avancé.
Corrections :
Public Function monCheckSum(...) As Byte
Public Function Envois(...) As String   ' C'est la chaine que tu veux envoyée

Tu t'es brèlé les pinceaux :
Il ne faut surtout pas appeler une Sub/Function par elle-même, c'est le clash assuré !
Après "Public Function Envois" tu renseignes les valeurs des variables alors que c'est AVANT de lancer la fonction qu'il faut le faire. Dans ton cas, le résultat donnerait la même chose, mais le paramétrage de la fonction ne sert à rien dans ce cas.
SendCom doit être dimensionné comme une chaine pour recevoir les données à expédier.
SendCom ne peut pas être dimensionné dans la fonction Envois et utilisée à l'extérieur de cette fonction (pas possible).
SendCom doit recevoir une chaine contenant l'équivalent des Bytes --> Utilise Chr$ comme dans l'original

La prochaine fois, essaye d'écrire ce que veux dire l'erreur, le numéro seulement ne nous dis pas grand chose : ça nous oblige à ouvrir VB et à rechercher le message associé, c'est pas long à faire, mais ça fait gagner du temps.

Ce qui donne :
Private Const SOM As Byte = &HA0
Private Const EOM As Byte = &HAF
Dim CmndCount As Byte, panspeed As Byte, tiltspeed As Byte, CheckSum As Byte
Dim SendCom As String
Dim Addres As Byte, CMND1 As Byte, CMND2 As Byte, DATA1 As Byte, DATA2 As Byte

Public Function monCheckSum(SOM, Addres, CMND1, CMND2, DATA1, DATA2, EOM) As Byte
   CheckSum = SOM Xor EOM
   CheckSum = CheckSum Xor Addres
   CheckSum = (CheckSum Xor CMND1) Xor CMND2
   CheckSum = (CheckSum Xor DATA1) Xor DATA2
   CheckSum = CheckSum And 255
   monCheckSum = CheckSum
End Function
Public Function Envois(...) As String
   Envois = Chr$(SOM) & Chr$(Addres) ...
End Function

Private Sub CommandButton1_Click()
   Addres = Sheets(1).Range("a2").Value
   CMND1 = Sheets(1).Range("a3").Value
   CMND2 = Sheets(1).Range("a4").Value
   DATA1 = Sheets(1).Range("a5").Value
   DATA2 = Sheets(1).Range("a6").Value
   CheckSum = monCheckSum(SOM, EOM, Address, CMND1, CMND2, DATA1, DATA2)
   Range("d10") = CheckSum
   SendCom = Envois(SOM, Addres, CMND1, CMND2, DATA1, DATA2, EOM, CheckSum)
   Range("d11") = Hex(SOM) & Hex(Addres) & Hex(CMND1) & Hex(CMND2) & Hex(DATA1) & Hex(DATA2) & Hex(EOM) & Hex(CheckSum)
   MSComm1.Output = SendCom
End Sub

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

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 31 mai 2007 à 19:57
0
Utile
Salut
Pas de grandes difficultés :

- Les Basic (QB, Quick Basic, Basica, ...) ne s'adressaient qu'à un écran de type DOS (25 lignes, 80 colonnes)
Donc, les instructions PRINT peuvent être remplacées la gestion d'une TextBox dans laquelle tu ajouteras le texte (ou variable) désigné par le PRINT. Il faudra penser à ajouter les retours chariot (vbCrLf) à chaque PRINT.
Exemple :
PRINT "'";HEX$(BYTE3);"'";
peut se transformer en
maTextBox.Text = maTextBox.Text & "'" & HEX$(BYTE3) & "'"
Si la commande PRINT se termine par un ; ou une , il ne faut pas ajouter de passage à la ligne vbCrLf  (les données suivantes seront collées aux précédentes avec un ; et séparées par une tabulation avec une virgule)

- Les REM sont des REMarques = commentaires, équivalents de l'apostrophe du début de ligne
   REM GOSUB 770 n'exécute rien. C'est un moyen de ne pas exécuter une ligne sans la détruire

- Les variables suivies d'un $ sont des String, comme sous VB

- Les variables non définies étaient considérées comme des entiers --> Integer (VB6) ou Short (.Net) il me semble
Tu peux les dimensionner de toute façon en Integer, ça passera (bien qu'apparemment, il s'agit de Byte)

- Les numéros de lignes ne servent que de Label | Etiquette :
      Goto 180
      ...
      180 Print "Toto"
est la même chose que
      Goto monLabel
      ...
monLabel:
      Print "Toto"

- GOSUB 770
Signifie qu'on fait appel à une portion du programme duquel on va revenir lorsqu'il aura rencontré un RETURN
Peut être remplacé par une SUB ou une FUNCTION, suffira de lui passer en paramètres les élements dont il a besoin

- OPEN "COM1 ..." As #2
C'est la méthode d'ouverture du port COM1
Là, il faut passer par un objet MSComm qui fera la même chose.
La méthode PRINT #2, "tralala" permettait d'écrire sur le port COM
Les autres commandes restent les mêmes

- INKEY$
Cette instruction captait les touches du clavier.
Dans Form_KeyPress ou _KeyDown, tu peux faire le même genre d'interception (si l'application à le focus et que la propriété KeyPreview de la forme est à True)

- IF THEN : Pas de changement

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

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 31 mai 2007 à 20:01
0
Utile
J'oubliai le PRINT USING ...
C'est une méthode de formatage de l'affichage du texte ou de la variable
Voir Format
Commenter la réponse de cs_Jack
Anguel 32 Messages postés mardi 8 novembre 2005Date d'inscription 15 septembre 2011 Dernière intervention - 31 mai 2007 à 20:12
0
Utile
je te remerci infiniment Jack ,
 C'été très gentil de ta part , et aussi tres rapide le reponse
 je vais essayer de travailler avec .

GRAND MERCI

Anguel
Commenter la réponse de Anguel
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 31 mai 2007 à 20:15
0
Utile
  Bonsoir jack,

  Je te salue avec beaucoup de respect pour avoir su faire là ce qu'il convenait de faire : tout sauf traduire directement la totalité d'une syntaxe à l'autre.
  A Anguel, maintenant, de jouer (comme doit jouer tout développeur...)
 
Commenter la réponse de jmfmarques
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 31 mai 2007 à 20:33
0
Utile
  
Commenter la réponse de cs_Jack
Anguel 32 Messages postés mardi 8 novembre 2005Date d'inscription 15 septembre 2011 Dernière intervention - 31 mai 2007 à 21:02
0
Utile
 


http://www.vbfrance.com/auteurdetail.aspx?ID=615490
Bonsoir jmfmarques
Je te remercie a toi aussi pour ta réponse
Si tu a des problemes avec les converssion et traduction des codes je te consei de visiter ce lien:http://authors.aspalliance.com/aldotnet/examples/translate.aspx

ou
http://www.kamalpatel.net/ConvertCSharp2VB.aspx
ou
http://www.developerfusion.co.uk/utilities/convertcsharptovb.aspx

Il y a bien sûr encore mais je n'ai pas trouve Traduction GW Basic vers VB

Je debut dans le domain de developement et c'est pour ce raison je demandé une traduction de le dit code.

Merci pour votre comprehension.
 A bientot ..... Anguel
Commenter la réponse de Anguel
Anguel 32 Messages postés mardi 8 novembre 2005Date d'inscription 15 septembre 2011 Dernière intervention - 31 mai 2007 à 21:43
0
Utile
 Bonsoir
C'est encore moi
Cette fois je vais etre plus précis
S'il vous plait 
 Pouvez vous m'aider de convertir le code suivant en VB
 et pouvoir le utiliser.
c'est une fonctione :

MERCI   BEAUCOUP

LE code est :

850 REM Get the checksum

860 CHECKSUM = SOM XOR EOM: REM Do these first

870 CHECKSUM = CHECKSUM XOR ADDRESS: REM Now XOR in the address

880 CHECKSUM = (CHECKSUM XOR CMND1) XOR CMND2: REM And the commands

890 CHECKSUM = (CHECKSUM XOR DATA1) XOR DATA2: REM Then the data

900 CHECKSUM = CHECKSUM AND 255

910 RETURN

920 '

930 REM Send it out and display it

940 GOSUB 850: REM Get checksum

950 D1$ = CHR$(SOM)

960 D2$ = CHR$(ADDRESS)

970 D3$ = CHR$(CMND1)

980 D4$ = CHR$(CMND2)

990 D5$ = CHR$(DATA1)

1000 D6$ = CHR$(DATA2)

1010 D7$ = CHR$(EOM)

1020 D8$ = CHR$(CHECKSUM)

1030 PRINT #2,D1$;D2$;D3$;D4$;D5$;D6$;D7$;D8$;

Anguel
Commenter la réponse de Anguel
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 31 mai 2007 à 22:02
0
Utile
Je te remercie, Anguel, mais je n'ai (personnellement) nul besoin d'un traducteur de code pour si peu et qui se retrouve preque à l'identique dans tout langage s'appuyant sur Basic !!!

Je suppose par ailleurs que le code écrit en GW Basic est de toi et que tu sais ce qu'il dit et fait.
Si tel n'était pas le cas, tu serais tout simplement en train d'essayer, pour éviter de développer (et ce devrait être là ton but premier : apprendre à développer), de piquer un code (écrit en GW Basic que tu ne comprends pas) pour le "faire" transposer en VB.Net par encore quelqu'un d'autre... !
Amitiés.
Commenter la réponse de jmfmarques
Anguel 32 Messages postés mardi 8 novembre 2005Date d'inscription 15 septembre 2011 Dernière intervention - 1 juin 2007 à 01:11
0
Utile
Bonsoir jmfmarques

En demandant un traduction de ce code  (écrit en GW basic par la société Pelco - c'est Eric Hamilton qui m'a l'envoyé )je veux le intégrer dans une user forme d'Excel et comme sa je vais pouvoir diriger les Cameras Speed Dômes . Je connaissance moyenne en Excel  et VBE de Macro Excel . Si tu croix que je essai de profiter de quelque chose tu te trompe , je veux simplement de l'aide  je n'ai pas assez moyens pour le moment d' Etudier a programmer comme le grands. Déjà un mois je rame avec se protocole de Cameras . Si tu peu m'aider  fait le , je te serait reconnaissant . Si non  n'empêche pas les autres de le faire.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

 

Merci beaucoup

Anguel
Commenter la réponse de Anguel
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 1 juin 2007 à 18:56
0
Utile
Re
Pas de polémique, on est là pour s'entraider.
En te lisant, je viens de voir que tu parlais de VBA de Excel : Tu aurais dû le préciser car il y a des petites choses qui diffèrent de VB6 et bien sûr de VB.Net. Bien faire attention à la rubrique dans laquelle tu postes tes questions, ça peut te faire gagner du temps.

Pour tes sous routines :
Pour la deuxième, tu remarqueras qu'elle n'est appelée qu'une seule fois, donc pas la peine de se torturer, suffit de remplacer le GOSUB 930 par les 930 à 1130 (sauf le RETURN final, bien sûr).
Remarque, pour la première, elle n'est aussi appelée qu'une fois, tu pourrais appliquer la même solution, mais je vais te montrer comment faire pour les autres :
Il faut les transformer en SUB ou plutôt en FUNCTION puisqu'elles doivent te renvoyer une valeur.
   850 REM Get the checksum
   860 CHECKSUM = SOM XOR EOM: REM Do these first
   870 CHECKSUM = CHECKSUM XOR ADDRESS: REM Now XOR in the address
   880 CHECKSUM = (CHECKSUM XOR CMND1) XOR CMND2: REM And the commands
   890 CHECKSUM = (CHECKSUM XOR DATA1) XOR DATA2: REM Then the data
   900 CHECKSUM = CHECKSUM AND 255
   910 RETURN
On voit ici que ces lignes de programme ont besoin du contenu des variables se trouvant dans ton programme appelant, il faut donc les lui transmettre : SOM, EOM, ADDRESS, CMND1, CMND2, DATA1, DATA2
En retour, il faudra renvoyer le contenu de CHECKSUM.
Il te suffit donc de créer une fonction :
Private Function monCheckSum(SOM, EOM, ADDRESS, CMND1, CMND2, DATA1, DATA2) As Variant
A la fin de ta fonction, tu remplace le RETURN de la ligne 910 par le transfert du résultat :
monCheckSum = CHECKSUM
et enfin, pour remplacer le GOSUB 850, il te suffit de faire
CHECKSUM = monCheckSum(SOM, EOM, ADDRESS, CMND1, CMND2, DATA1, DATA2)

Pour le GOSUB 1150, là, il n'a besoin que de la valeur de X et ne renvoie rien
Il faut alors utiliser une SUB :
Private Sub maSub(X)
et remplacer les GOSUB 1150 par un Call maSub(X)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Commenter la réponse de cs_Jack
Anguel 32 Messages postés mardi 8 novembre 2005Date d'inscription 15 septembre 2011 Dernière intervention - 2 juin 2007 à 00:21
0
Utile
Merci Jack
Ca m'a vraiment beacoup aidé
voila se que j'ai fait toute la soirée
et il me donne un message d'erreur N° 380 sur la commande
MSComm1.Output = SendCom

Voila mon code :

Private Const SOM As Byte = &HA0
Private Const EOM As Byte = &HAF
Dim CmndCount As Byte, panspeed As Byte, tiltspeed As Byte, CheckSum As Byte


Dim Addres As Byte, CMND1 As Byte, CMND2 As Byte, DATA1 As Byte, DATA2 As Byte
Public Function monCheckSum(SOM, Addres, CMND1, CMND2, DATA1, DATA2, EOM) As Variant
CheckSum = SOM Xor EOM
CheckSum = CheckSum Xor Addres
CheckSum = (CheckSum Xor CMND1) Xor CMND2
CheckSum = (CheckSum Xor DATA1) Xor DATA2
CheckSum = CheckSum And 255
monCheckSum = CheckSum
End Function


Public Function Envois(SOM As Byte, Addres As Byte, CMND1 As Byte, CMND2 As Byte, DATA1 As Byte, DATA2 As Byte, EOM As Byte, CheckSum As Byte) As Variant




Addres = Sheets(1).Range("a2").Value
CMND1 = Sheets(1).Range("a3").Value
CMND2 = Sheets(1).Range("a4").Value
DATA1 = Sheets(1).Range("a5").Value
DATA2 = Sheets(1).Range("a6").Value
CheckSum = monCheckSum(SOM, EOM, Address, CMND1, CMND2, DATA1, DATA2)
Range("d10") = CheckSum
SendCom = Envois((SOM), (Addres), (CMND1), (CMND2), (DATA1), (DATA2), (EOM), (CheckSum))
Range("d11") = Hex(SOM) & Hex(Addres) & Hex(CMND1) & Hex(CMND2) & Hex(DATA1) & Hex(DATA2) & Hex(EOM) & Hex(CheckSum)
  
End Function
Private Sub CommandButton1_Click()


 


Range("d10") = SendCom



MSComm1.Output = SendCom




End Sub


Private Sub UserForm_Activate()
'MSComm1.CommPort = 1
MSComm1.PortOpen = True
'MSComm1.CommPort = 1 
 'MSComm1.Settings = "4800,n,8,1" 
 'MSComm1.PortOpen = True End Sub


Private Sub UserForm1_QueryClose(Cancel As Integer, CloseMode As Integer)
  MSComm1.PortOpen = False
End Sub



 Merci 

Anguel
Commenter la réponse de Anguel
Anguel 32 Messages postés mardi 8 novembre 2005Date d'inscription 15 septembre 2011 Dernière intervention - 4 juin 2007 à 13:14
0
Utile
Bonjour Jack

Je tien te Remercié Infiniment pour ton aide et aussi d'avoir consacré de ton temps pour s'occuper de mes problèmes . 
Grasse a toi on a réussi . Le code marche Impeccable. On peut diriger les cameras Speed Dômes a partir d'un feuil de calcule Excel.
Voila se que je fait avec ton code: 



Private Const SOM As Byte = &HA0
Private Const EOM As Byte = &HAF
Dim CmndCount As Byte, panspeed As Byte, tiltspeed As Byte, CheckSum As Byte
Dim SendCom As String
Dim Addres As Byte, CMND1 As Byte, CMND2 As Byte, DATA1 As Byte, DATA2 As Byte



Public Function monCheckSum(SOM, Addres, CMND1, CMND2, DATA1, DATA2, EOM) As Byte
   CheckSum = SOM Xor EOM
   CheckSum = CheckSum Xor Addres
   CheckSum = (CheckSum Xor CMND1) Xor CMND2
   CheckSum = (CheckSum Xor DATA1) Xor DATA2
   CheckSum = CheckSum And 255
   monCheckSum = CheckSum
End Function



Public Function Envois(SOM As Byte, Addres As Byte, CMND1 As Byte, CMND2 As Byte, DATA1 As Byte, DATA2 As Byte, EOM As Byte, CheckSum As Byte) As String
   Envois = Chr$(SOM) & Chr$(Addres) & Chr$(CMND1) & Chr$(CMND2) & Chr$(DATA1) & Chr$(DATA2) & Chr$(EOM) & Chr$(CheckSum)
End Function



Private Sub CommandButton1_Click()
   Addres = (Sheets(1).Range("a2").Value - 1)
   CMND1 = Sheets(1).Range("a3").Value
   CMND2 = Sheets(1).Range("a4").Value
   DATA1 = Sheets(1).Range("a5").Value
   DATA2 = Sheets(1).Range("a6").Value
   CheckSum = monCheckSum(SOM, EOM, Address, CMND1, CMND2, DATA1, DATA2)
   Range("d10") = CheckSum
   SendCom = Envois(SOM, Addres, CMND1, CMND2, DATA1, DATA2, EOM, CheckSum)
   Range("d11") = Hex(SOM) & Hex(Addres) & Hex(CMND1) & Hex(CMND2) & Hex(DATA1) & Hex(DATA2) & Hex(EOM) & Hex(CheckSum)
   MSComm1.Output = SendCom
End Sub




 



Private Sub UserForm_Activate()



MSComm1.CommPort = 1 'On définit le port série qui sera utilisé
 MSComm1.Settings = "4800,n,8,1" 'On définit ici les paramètres de transmission
 MSComm1.PortOpen = True 'Ici on ouvre le port de communication



End Sub



Private Sub UserForm1_QueryClose(Cancel As Integer, CloseMode As Integer)
  MSComm1.Open = False
End Sub




 Tu est Un GRAND homme. Je t'admire .

Avec toutes mes amitiés ...... Anguel



Anguel
Commenter la réponse de Anguel

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.