Translate code from VB to delphi [Résolu]

cs_Valeriu 9 Messages postés jeudi 27 janvier 2005Date d'inscription 11 octobre 2006 Dernière intervention - 19 oct. 2005 à 18:35 - Dernière réponse : crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention
- 20 oct. 2005 à 10:42
J'ai besoin de comuniquer avec une interface connecte au port serial.J'ai ecrit un program en delphi qui fait ca,mais il me rest de comprendre le message qu'il faut envoyer.La pb c'est que c'est ecrit en VB et moi je connais pas.S'il ya quelq'un qui peut m'aider ca serait super.


checksum = (255 - ((((13 + address + Asc("T") + Asc(factor)) / 256) - Int((13 + address + Asc("T") + Asc(factor)) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "T" & factor & Chr$(checksum)

messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Afficher la suite 

7 réponses

Meilleure réponse
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 19 oct. 2005 à 18:47
3
Merci
Connait pas le Delphi mais je peux te dire que en VB :
- Asc() est une fonciton qui renvoie le code ASCII du 1er caractère de la chaine qui lui est transmis en argument
- Int() retourne la partie entière du nombre qui lui est transmis en argument
- Chr$() retourne une chaine de caractère contenant le caractère dont le code ASCII lui est transmis en argument (Le contraire de Asc(), quoi)
- L'opérateur & effectue de la concaténation de chaines de caractères
- "comm.Output = messagestring" signifie "Affecte la la propriété Output de l'objet nommé comm (sans doute un controle MSComm celui-là !)la valeur contenu dans la variable nommée messagestring
Donc, grosso modo :
- La 1ere ligne de code calcule le checksum de "factor"
- La seconde construit une chaine de caractère : Un retour chariot, suivi du 1er car dont le code ASCII est dans "address suivi du car "T", suivi de "factor" (implicitement converti en string par VB car ce doit être un numérique celui-là) suivi du caractère dont le code ASCII est le checksum calculé juste avant.
- La 3eme ligne reconcatène la chaine obtenu afec elle-même (ca bé bé bé béguait ton ton ton co co code non ?)
- La 4eme ligne reconcatène à nouveau la chaine avec elle-même : tu as donc QUATRE fois ton message dans la chaine à ce stade
- La 5eme ligne balance la chaine dans le buffer de sortie du controle MSComm

En esperant t'avoir aidé ...

Christophe

Merci crenaud76 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

cs_Valeriu 9 Messages postés jeudi 27 janvier 2005Date d'inscription 11 octobre 2006 Dernière intervention - 19 oct. 2005 à 18:50
0
Merci
Qu'est que c'est checksum?
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 19 oct. 2005 à 19:31
0
Merci
Une variable d'un type numérique (sans doute un entier) !
cs_Valeriu 9 Messages postés jeudi 27 janvier 2005Date d'inscription 11 octobre 2006 Dernière intervention - 19 oct. 2005 à 19:49
0
Merci
Une autre question.Checksum est-il du type reel'Il me faut un nr du type integer.
cs_Valeriu 9 Messages postés jeudi 27 janvier 2005Date d'inscription 11 octobre 2006 Dernière intervention - 19 oct. 2005 à 19:51
0
Merci
Il y a la une division avec 256.C'est pour ca que je demande pour quoi il est un nombre entier.
cs_Valeriu 9 Messages postés jeudi 27 janvier 2005Date d'inscription 11 octobre 2006 Dernière intervention - 19 oct. 2005 à 20:32
0
Merci
J'ai suivi tes indications et je suis arrive a cet code en pascal.La pb c'est que checksum est un entier,mais son expression ce n'est pas.

var fac,ms:string;
factor,checksum,address:integer;
begin
address:=1;
factor:=1;
fac:=IntToStr(factor);

checksum:=(255-((((13+address+ord('T')+ord(fac[1]))/256)-
trunc((13+address+ord('T')+ord(fac[1]))/256))* 256))+1;
ms:=Chr(13)+Chr(address)+'T'+fac+Chr(checksum);
ms:=ms+ms;
ms:=ms+ms;
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 20 oct. 2005 à 10:42
0
Merci
Je pense que Checksum est bien un entier, car il est utiliser comme code ASCII d'un caractère.

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.