Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Echange TPE et Application Windev

290 views
Skip to first unread message

Nathalie

unread,
Dec 30, 2003, 5:27:42 AM12/30/03
to
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

Romain PETIT

unread,
Dec 30, 2003, 6:47:56 AM12/30/03
to
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é)

Nathalie

unread,
Dec 30, 2003, 10:29:01 AM12/30/03
to
Nous avons modifié les paramétres en utilisant la fonction
sFixeParamètre(PortTPE, 1200, 1, 7, 0)

cela ne change rien

Pascal H

unread,
Dec 30, 2003, 12:00:05 PM12/30/03
to
Le mar. 30 déc. 2003 16:29:01, dans le message
news:6a3705b4.03123...@posting.google.com, nco...@cecab.com
(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

eric flament

unread,
Jan 1, 2004, 4:23:29 AM1/1/04
to
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

Michel Moreno

unread,
Jan 5, 2004, 3:15:12 AM1/5/04
to
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:\tmp\resultat.txt",focreation+fotexte)
global
abandon est un booleen
STX=caract(2)
ETX=caract(3)
ENQ=caract(5)
ACK=caract(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=faux
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

jeanyves34

unread,
May 21, 2014, 4:21:41 AM5/21/14
to
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

BOUSQUET

unread,
Jul 8, 2014, 10:40:28 AM7/8/14
to
jeanyves34 a utilisᅵ son clavier pour ᅵcrire :
> 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

je pense que simplement les drivers Windows feraient l'affaire, c'est
ce que l'on faisait dᅵjᅵ il y a 10 ans...
0 new messages