Translate code from VB to delphi

Résolu
cs_Valeriu Messages postés 9 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 11 octobre 2006 - 19 oct. 2005 à 18:35
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 - 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

7 réponses

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
19 oct. 2005 à 18:47
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
3
cs_Valeriu Messages postés 9 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 11 octobre 2006
19 oct. 2005 à 18:50
Qu'est que c'est checksum?
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
19 oct. 2005 à 19:31
Une variable d'un type numérique (sans doute un entier) !
0
cs_Valeriu Messages postés 9 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 11 octobre 2006
19 oct. 2005 à 19:49
Une autre question.Checksum est-il du type reel'Il me faut un nr du type integer.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Valeriu Messages postés 9 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 11 octobre 2006
19 oct. 2005 à 19:51
Il y a la une division avec 256.C'est pour ca que je demande pour quoi il est un nombre entier.
0
cs_Valeriu Messages postés 9 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 11 octobre 2006
19 oct. 2005 à 20:32
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;
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
20 oct. 2005 à 10:42
Je pense que Checksum est bien un entier, car il est utiliser comme code ASCII d'un caractère.
0
Rejoignez-nous