OVH Cloud OVH Cloud

Echange TPE et Application Windev

6 réponses
Avatar
ncollin
Bonjour,

Nous sommes en train de développer une application caisse en liaison
avec un terminal TPE INGENICO.

Le TPE est connecté sur le port Serie 2

Mais nous n'arrivons pas à envoyer le montant sur le terminal et nous
n'arrivons pas à récupérer les messages du terminal

Merci de votre aide

Nous avons écrit les ordres Suivant

PortTPE est une constante = 2
ChENQ = Caract(5)
ChEtx = Caract(3)
ChStx = Caract(2)

sOuvre(PortTPE,256,256)

sEcrit(PortTPE,ChENQ)

lcmontant = "00" + NumériqueVersChaine((pnmontant*100),"08d")+ChEtx

lnresultat = CalculLRC(lcmontant)

sEcrit(PortTPE,ChSTX+lcmontant+Caract(lnresultat))


PROCEDURE CalculLRC(pctexte)

lnind est un entier
lnval est un entier
lnou est un entier

lnou = Asc(Gauche(pctexte,1))
POUR lnind = 1 A Taille(pctexte)
lnval=Asc(Milieu(pctexte,1))
lnou = OuExclusifBinaire(lnou,lnval)
FIN
SI lnou>127 ALORS lnou = lnou - 128

RENVOYER lnou

6 réponses

Avatar
Romain PETIT
Nathalie a exprimé avec précision :

Le TPE est connecté sur le port Serie 2
Mais nous n'arrivons pas à envoyer le montant sur le terminal et nous
n'arrivons pas à récupérer les messages du terminal



Avez-vous paramétré correctement la vitesse de transmission, la parité
etc...
Cf sFixeParametre.

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
ncollin
Nous avons modifié les paramétres en utilisant la fonction
sFixeParamètre(PortTPE, 1200, 1, 7, 0)

cela ne change rien
Avatar
Pascal H
Le mar. 30 déc. 2003 16:29:01, dans le message
news:,
(Nathalie) a écrit :

Nous avons modifié les paramétres en utilisant la fonction
sFixeParamètre(PortTPE, 1200, 1, 7, 0)

cela ne change rien



Bonjour,

Deux idées en passant:
- n'y a-t-il pas un cache dont il faudrait forcer le vidage ?
- si vous essayez d'envoyer par la suite d'autres chaînes au terminal,
les premiers caractères envoyés sont-il récupérés ?

Ce problème me rappelle des soucis rencontrés il y a déjà pas mal
d'années sous WD 4.1 avec une imprimante série.
Si mes souvenirs sont bons, ce problème avait été résolu grâce à un des
switches présents sur l'imprimante.
Par contre nous utilisions des commandes iImprime et non une
communication directe sur le port série...


--
Pascal
Avatar
eric flament
Nathalie a couché sur son écran :

Bonjour,

Nous sommes en train de développer une application caisse en liaison
avec un terminal TPE INGENICO.



[Cut les sources prog]

lcmontant = "00" + NumériqueVersChaine((pnmontant*100),"08d")+ChEtx

lnresultat = CalculLRC(lcmontant)



je ne sais si le calcul du xor sur la chaine est bon,
dans beaucoup d'application j'ai
lnresult = calculrc(chStx+lcmontant)
secrit(portPE,chStx+lcmontant+lnresult+chEtx)
La verification de la chaine recue se fait sur chetx et non chstx
juste une idée.

Eric

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com
Avatar
Michel Moreno
Nathalie wrote:
Bonjour,

Nous sommes en train de développer une application caisse en liaison
avec un terminal TPE INGENICO.

Le TPE est connecté sur le port Serie 2



/////////////////////////////////////////////////////////////////////////////////
//
//
// syntaxe : TPE.EXE PortTPE Nombre Operation Montant1
ModePaiement1... //
// Montant2 ModePaiement2 ... Montantn ModePaiementn
//
//
//
/////////////////////////////////////////////////////////////////////////////////
TerminalTPE est un entier long = extraitchaine(lignecommande(),1," ")
NbreOperations est un entier long = extraitchaine(lignecommande(),2," ")

si TerminalTPE = 0 alors ferme
si NbreOperations = 0 alors ferme


ii,jj,LRC est un entier long
Donnees est une chaine
ACK,ENQ,STX,ETX sont des chaines
TempsInit,TempsEnCours est un entier long
Reponse sont des chaines
Indice est un entier long
MontantTransaction est reel double
TypeReglement est un entier long
TimeOut est un entier long = 500
Essai est un entier
Suite est un booleen
wtest est un booleen = faux
testCh est une chaine
testii est un entier long
numfic est un entier long
wtest = faux
si wtest alors numfic = fouvre("c:tmpresultat.txt",focreation+fotexte)
global
abandon est un booleen
STXÊract(2)
ETXÊract(3)
ENQÊract(5)
ACKÊract(6)
abandon = faux
/////////////////////////////////////////////////////////////////////////////////
//
//
// Ouverture du Port
//
//
//
/////////////////////////////////////////////////////////////////////////////////
sferme(TerminalTPE)
si pas souvre(TerminalTPE,2000,2000,1000) alors
erreur("Impossible d'ouvrir le port COM"+TerminalTPE)
ferme
fin
si pas sfixeparametre(TerminalTPE,1200,1,7,0) alors
erreur("Impossible fixer paramètres du port COM"+TerminalTPE)
ferme
fin

pour Indice = 0 à NbreOperations-1
MontantTransaction = extraitchaine(lignecommande(),(Indice*2)+3," ")
TypeReglement = extraitchaine(lignecommande(),(Indice*2)+4," ")
selon TypeReglement
cas 2 // Cheque
INFOS="Chèque
"+sansespace(numeriqueverschaine(MontantTransaction,"15,2fS"))+caract(128)

Donnees="01"+verschaine(MontantTransaction*100,"08d")+"1C0978"+repete("X",10)+ETX
autres cas // CB
INFOS="Carte Bancaire
"+sansespace(numeriqueverschaine(MontantTransaction,"15,2fS"))+caract(128)

Donnees="01"+verschaine(MontantTransaction*100,"08d")+"110978"+repete("X",10)+ETX
fin
multitache()
/////////////////////////////////////////////////////////////////////////////////
//
//
// Calcul LRC
//
//
//
/////////////////////////////////////////////////////////////////////////////////
LRC=0
pour ii = 1 à taille(Donnees)
LRC=ouexbinaire(LRC,asc(Donnees[[ii]]))
FIN
Donnees=STX+Donnees+caract(LRC)
/////////////////////////////////////////////////////////////////////////////////
//
//
// Vidage des eventuels caractères polluant le COM
//
//
//
/////////////////////////////////////////////////////////////////////////////////
tantque sdansfileentree(TerminalTPE) > 0
multitache(-1)
Reponse=slit(TerminalTPE,sdansfileentree(TerminalTPE))
testCh=""
pour testii = 1 à taille(Reponse)
testCh+=asc(Reponse[[testii]])+" "
FIN
si wtest alors
fecritligne(NumFic,"Vidage du port com "+Reponse+" "+testCh)
fin
FIN
Essai = 0
Suite = faux
tantque pas Suite
Essai++
si Essai > 3 alors
erreur("pas de réponse du TPE après l'initialisation")
sferme(TerminalTPE)
ferme
FIN
si wtest alors
fecritligne(NumFic,"envoi ENQ essai = "+Essai)
fin
si pas secrit(TerminalTPE,ENQ) alors
erreur("Impossible d'envoyer l'ENQ")
sferme(TerminalTPE)
ferme
FIN
Reponse=""
TempsInit=heureversentier(heuresys())
tantque pas Suite
multitache(-1)
TempsEnCours=heureversentier(heuresys())
si TempsEnCours-TempsInit > TimeOut alors // Pas de reponse pendant 2
secondes
secrit(TerminalTPE,ENQ)
si wtest alors
fecritligne(NumFic,"Envoi ENQ Timeout")
fin
sortir
fin
si sdansfileentree(TerminalTPE) > 0 alors
Reponse+=slit(TerminalTPE,sdansfileentree(TerminalTPE))
si wtest alors
testCh=""
pour testii = 1 à taille(Reponse)
testCh+=asc(Reponse[[testii]])+" "
FIN
fecritligne(NumFic,"Lecture port com "+Reponse+" "+testCh)
fin
fin
si taille(Reponse) > 0 alors
si Reponse[[1]] <> ACK alors
secrit(TerminalTPE,ENQ)
si wtest alors
fecritligne(NumFic,"Pas ACK renvoi ENQ")
fin
sortir
FIN
Suite = vrai
fin
FIN
fin
si wtest alors
fecritligne(NumFic,"Envoi Données")
fin
si pas secrit(TerminalTPE,Donnees) alors
erreur("Impossible d'envoyer les données au terminal")
sferme(TerminalTPE)
ferme
FIN
TempsInit=heureversentier(heuresys())
tantque sdansfileentree(TerminalTPE) = 0
si wtest alors
fecritligne(NumFic,"Attente reponse apres donnees")
fin
multitache(-1)
TempsEnCours=heureversentier(heuresys())
si TempsEnCours-TempsInit > TimeOut alors // Pas de reponse pendant 2
secondes
erreur("Impossible d'envoyer les données au terminal (boucle attente)")
sferme(TerminalTPE)
ferme
fin
FIN
Reponse=""
TempsInit=heureversentier(heuresys())
tantque sdansfileentree(TerminalTPE) > 0
si wtest alors
fecritligne(NumFic,"Acquisition reponse apres envoi données")
fin
multitache(-1)
TempsEnCours=heureversentier(heuresys())
si TempsEnCours-TempsInit > TimeOut alors // Pas de reponse pendant 2
secondes
erreur("Pas de réponse du terminal après données")
sferme(TerminalTPE)
ferme
fin
Reponse+=slit(TerminalTPE,sdansfileentree(TerminalTPE))
FIN
si wtest alors
testCh=""
pour testii = 1 à taille(Reponse)
testCh+=asc(Reponse[[testii]])+" "
FIN
fecritligne(NumFic,"Réponse après données "+Reponse+" "+testCh)
fin
si wtest alors
fecritligne(NumFic,"J'envoie 1 EOT")
fin
si pas secrit(TerminalTPE,EOT) alors
erreur("Impossible d'envoyer EOT")
sferme(TerminalTPE)
ferme
FIN
abandonúux
jj=0
boucle
si wtest alors
fecritligne(NumFic,"J'attends le EOT final du TPE nbre recu "+jj)
fin
si abandon alors sortir
multitache(-1)
si sdansfileentree(TerminalTPE) <> 0 alors
Reponse=slit(TerminalTPE,sdansfileentree(TerminalTPE))
si wtest alors
testCh=""
pour testii = 1 à taille(Reponse)
testCh+=asc(Reponse[[testii]])+" "
FIN
fecritligne(NumFic,"Attente fin "+Reponse+" "+testCh)
fin
si position(Reponse,eot) > 0 alors
si wtest alors
fecritligne(NumFic,"Reception EOT Sortie")
fin
sortir
fin
si position(Reponse,ENQ) > 0 alors
si wtest alors
fecritligne(NumFic,"Reception ENQ -> Envoi ACK")
fin
secrit(TerminalTPE,ACK)
FIN
si position(Reponse,ETX) > 0 alors
si wtest alors
fecritligne(NumFic,"Reception ETX -> Envoi ACK")
fin
secrit(TerminalTPE,ACK)
FIN
fin
FIN
multitache(-10)
fin
si wtest alors fferme(NumFic)
//pour ii = 1 à 3
// secrit(TerminalTPE,EOT)
//FIN
sferme(TerminalTPE)
ferme
Avatar
jeanyves34
Le mardi 30 Décembre 2003 à 11:27 par ncollin :
Bonjour,

Nous sommes en train de développer une application caisse en liaison
avec un terminal TPE INGENICO.

Le TPE est connecté sur le port Serie 2

Mais nous n'arrivons pas à envoyer le montant sur le terminal et nous
n'arrivons pas à récupérer les messages du terminal

Merci de votre aide

Nous avons écrit les ordres Suivant

PortTPE est une constante = 2
ChENQ = Caract(5)
ChEtx = Caract(3)
ChStx = Caract(2)

sOuvre(PortTPE,256,256)

sEcrit(PortTPE,ChENQ)

lcmontant = "00" +
NumériqueVersChaine((pnmontant*100),"08d")+ChEtx

lnresultat = CalculLRC(lcmontant)

sEcrit(PortTPE,ChSTX+lcmontant+Caract(lnresultat))


PROCEDURE CalculLRC(pctexte)

lnind est un entier
lnval est un entier
lnou est un entier

lnou = Asc(Gauche(pctexte,1))
POUR lnind = 1 A Taille(pctexte)
lnval=Asc(Milieu(pctexte,1))
lnou = OuExclusifBinaire(lnou,lnval)
FIN
SI lnou>127 ALORS lnou = lnou - 128

RENVOYER lnou


Bonjour,

Et depuis... le temps a passé... !!! et ça donnerait quoi aujourd'hui avec un TPE en usb ou en série mais avec un Windev 17 par exemple ?? ;)
{le code était aussi long que cela à l'époque ?!!!! }

Aussi, quelqu'un pourrait me donner un exemple de code pour communiquer et imprimer avec une imprimante ticket genre EPSON TM en usb (ex. TM-T20) ??
Merci pour votre réponse !
Cordialement, JY