PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → URGENT !!! TPE INGENICO ENVOI DE MONTANT !!  LRC ?
URGENT !!! TPE INGENICO ENVOI DE MONTANT !! LRC ?
Débuté par jer_mest, 19 aoû. 2004 19:45 - 3 réponses
Posté le 19 août 2004 - 19:45
Bonjour,

J'aimerais envoyer un montant sur le TPE, le dialogue se fait bien avec le
TPE je lui envoie le ENQ, je recois le ACK mais ensuite quand je lui envoi
le message + une LRC tout bete ca ne marche pas ...

Code //

//------- Initialisation du Tableau qui sera remplie du montant à valider
!
Tabn est un tableau de 12 entiers sur 1 octet
Tabn[1]=0
Tabn[2]=1
Tabn[3]=0
Tabn[4]=0
Tabn[5]=0
Tabn[6]=0
Tabn[7]=0
Tabn[8]=5
Tabn[9]=0
Tabn[10]=0
Tabn[11]=Null
Tabn[12]=3
//------------------------------------

// Calcul de la LRC (Octet de contrôle du message)
LRC=0
LRC=OuExclusifBinaire(Tabn[1],Tabn[2])
POUR i=3 A 12
LRC = OuExclusifBinaire(LRC,Tabn[i])
FIN
Info("LRC = "+LRC)

// Ouverture du port spécifié
SI PAS sOuvre(1, 5000, 5000) ALORS Erreur("Erreur ouverture port Com")

// Initialise les paramètres du port série
SI PAS sFixeParamètre(...
1, ... // Port
1200, ... // Taux
1, ... // Parité : 0=aucune, 1=paire, 2=impaire
7, ... // Nb bit de données
0) ALORS//, ... // Nb bit de stop
// 0=1 bit de stop, 1=1,5 bits de stop, 2=2 bits de stop
Erreur("Erreur a la fixation des parametres !", ErreurInfo(errInfo))
FIN

// Envoi d'un message au buffer de sortie de COM1
// Envoie ENQ = 05
sEcrit(1,Caract(NumériqueVersChaine(5, "X")))
// Pause
Multitache(6)

// Lit Réponse ACK ou NAK
MessageLu=sLit(1, 1)
SI Asc(MessageLu)<>06 ALORS
Erreur("Erreur Transmission de données au TPE : ","Réponse du TPE : "+Asc(MessageLu))
sFerme(1)
RETOUR
FIN

// Pause
Multitache(6)

// Envoi d'un message au buffer de sortie de COM1
// Envoie STX = 02
sEcrit(1,Caract(NumériqueVersChaine(2, "X")))

// Pause
Multitache(6)

// Envoie Message Type Caisse Normal (ECR#+MNT+IND)
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[1], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[2], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[3], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[4], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[5], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[6], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[7], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[8], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[9], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[10], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[11], "X"))) // Si =
1 le TPE renvoi N° Carte Bancaire

// ECR#
resultat=sEcrit(1,Caract(48)+Caract(49))
Multitache(6) // Pause
Info(resultat)
// Message
resultat=sEcrit(1,Caract(48)+Caract(48)+Caract(48)+Caract(48)+Caract(48)+Caract(53)+Caract(48)+Caract(48))
Multitache(6) // Pause
Info(resultat)

// Envoi ETX (End of Text) = 03
resultat=sEcrit(1,Caract(NumériqueVersChaine(3, "X")))
Multitache(6) // Pause

// Envoi LRC (OuExclusif tt les Octects du message)
resultat=sEcrit(1,LRC)
Multitache(6) // Pause

// Lit Réponse ACK ou NACK
MessageLu=sLit(1, 1)
SI Asc(MessageLu)<>06 ALORS
Erreur("Erreur Transmission de données au TPE : ","Réponse du TPE : "+Asc(MessageLu))
sFerme(1)
RETOUR
FIN

// Fermeture du port spécifié
sFerme(1)

Si quelqu'un peut m'envoyer un bout de code avec un nombre et une LRC correcte
pour que je vérifie si mon calcule est faux !

MERCI D'AVANCE ..
Cordialement JM !
Posté le 20 août 2004 - 09:51
J'emploie cette fonction depuis longtemps,
si ça peut t'aider.

PROCEDURE PRIVÉ SmartNet::CalculLRC(trame)
MonLRC est un entier sur 2 octets
i est un entier
MonLRC = Asc( trame[[ 1 ]] )
POUR i = 2 A Taille(trame)
MonLRC = OuExclusifBinaire( MonLRC, Asc( trame[[ i ]] ))
FIN
RENVOYER MonLRC




"Jérémie" <jer_mest@hotmail.com> a écrit dans le message de news:
4124cb20$1@news.pcsoft.fr...


Bonjour,

J'aimerais envoyer un montant sur le TPE, le dialogue se fait bien avec le
TPE je lui envoie le ENQ, je recois le ACK mais ensuite quand je lui envoi
le message + une LRC tout bete ca ne marche pas ...

Code //

//------- Initialisation du Tableau qui sera remplie du montant à valider
!
Tabn est un tableau de 12 entiers sur 1 octet
Tabn[1]=0
Tabn[2]=1
Tabn[3]=0
Tabn[4]=0
Tabn[5]=0
Tabn[6]=0
Tabn[7]=0
Tabn[8]=5
Tabn[9]=0
Tabn[10]=0
Tabn[11]=Null
Tabn[12]=3
//------------------------------------

// Calcul de la LRC (Octet de contrôle du message)
LRC=0
LRC=OuExclusifBinaire(Tabn[1],Tabn[2])
POUR i=3 A 12
LRC = OuExclusifBinaire(LRC,Tabn[i])
FIN
Info("LRC = "+LRC)

// Ouverture du port spécifié
SI PAS sOuvre(1, 5000, 5000) ALORS Erreur("Erreur ouverture port Com")

// Initialise les paramètres du port série
SI PAS sFixeParamètre(...
1, ... // Port
1200, ... // Taux
1, ... // Parité : 0=aucune, 1=paire, 2=impaire
7, ... // Nb bit de données
0) ALORS//, ... // Nb bit de stop
// 0=1 bit de stop, 1=1,5 bits de stop, 2=2 bits de stop
Erreur("Erreur a la fixation des parametres !", ErreurInfo(errInfo))
FIN

// Envoi d'un message au buffer de sortie de COM1
// Envoie ENQ = 05
sEcrit(1,Caract(NumériqueVersChaine(5, "X")))
// Pause
Multitache(6)

// Lit Réponse ACK ou NAK
MessageLu=sLit(1, 1)
SI Asc(MessageLu)<>06 ALORS
Erreur("Erreur Transmission de données au TPE : ","Réponse du TPE :

"+Asc(MessageLu))
sFerme(1)
RETOUR
FIN

// Pause
Multitache(6)

// Envoi d'un message au buffer de sortie de COM1
// Envoie STX = 02
sEcrit(1,Caract(NumériqueVersChaine(2, "X")))

// Pause
Multitache(6)

// Envoie Message Type Caisse Normal (ECR#+MNT+IND)
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[1], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[2], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[3], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[4], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[5], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[6], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[7], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[8], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[9], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[10], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[11], "X"))) // Si =
1 le TPE renvoi N° Carte Bancaire

// ECR#
resultat=sEcrit(1,Caract(48)+Caract(49))
Multitache(6) // Pause
Info(resultat)
// Message

resultat=sEcrit(1,Caract(48)+Caract(48)+Caract(48)+Caract(48)+Caract(48)+Car
act(53)+Caract(48)+Caract(48))
Multitache(6) // Pause
Info(resultat)

// Envoi ETX (End of Text) = 03
resultat=sEcrit(1,Caract(NumériqueVersChaine(3, "X")))
Multitache(6) // Pause

// Envoi LRC (OuExclusif tt les Octects du message)
resultat=sEcrit(1,LRC)
Multitache(6) // Pause

// Lit Réponse ACK ou NACK
MessageLu=sLit(1, 1)
SI Asc(MessageLu)<>06 ALORS
Erreur("Erreur Transmission de données au TPE : ","Réponse du TPE :

"+Asc(MessageLu))
sFerme(1)
RETOUR
FIN

// Fermeture du port spécifié
sFerme(1)

Si quelqu'un peut m'envoyer un bout de code avec un nombre et une LRC

correcte
pour que je vérifie si mon calcule est faux !

MERCI D'AVANCE ..
Cordialement JM !
Posté le 20 août 2004 - 11:46
Je ne comprends pas trop, trame est en ASCII ? Comment dois je employer cette
fonction merci !
Posté le 20 août 2004 - 18:31
'Trame' est la chaine de caractères sur laquelle doit s'appliquer le LRC.

"Jérémie" <jer_mest@hotmail.com> a écrit dans le message de news:
4125ac58$1@news.pcsoft.fr...


Je ne comprends pas trop, trame est en ASCII ? Comment dois je employer

cette
fonction merci !