PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Utilisation port série
Utilisation port série
Débuté par Julien PATIPE, 04 mar. 2020 18:10 - 22 réponses
Posté le 04 mars 2020 - 18:10
Bonjour à tous,

Je suis novice dans l'utilisation des ports série. Je dois communiquer mon logiciel de facturation à une machine de controle de facturation.
Le format de la commande est :
Position 1 : SOH, Longueur : 1 octet, valeur 01h
Position 2 : LEN, Longueur : 1 octet, valeur 20h-FFh
Position 3 : SEQ, Longueur : 1 octet, valeur 20h-FFh
Position 4 : CMD, Longueur : 1 octet, valeur 20h-FFh
Position 5 : DATA, Longueur : 0-200 octetS, valeur 20h-FFh
Position 6 : AMB, Longueur : 1 octet, valeur 05h
Position 7 : BBC, Longueur : 4 octetS, valeur 30h-3Fh
Position 8 : ETX, Longueur : 1 octet, valeur 03h
Je sais qu'il faut utiliser les fonctions souvre, sferme, sécrit, slit, sévenement.
Mon problème est que mes fonctions ne renvoient pas les réponses escomptées.
Ci dessous, ma fonction Write

[code:wl]
PROCEDURE Write(bufCMD est un Buffer, bufDATA est un Buffer =Null )
/////
bufLEN est un Buffer
IF bufDATA = Null THEN
bufLEN=Caract(04)+Caract(20)
bufBys est un Buffer sur 9
bufBys[[1]]=bufSOH
bufBys[[2]]=bufLEN
bufBys[[3]]=bufSEQ
bufBys[[4]]=bufCMD
bufBys[[5]]=bufAMB
///////////////////////////////declaration de la valeur faisans office de l'entier
//nVal_Entier est un entier= bufLEN+bufSEQ+bufAMB
//nVal_Entier=nVal_Entier+bufCMD
bufValHex est un Buffer = bufLEN+bufSEQ+bufAMB+bufCMD //;trace(bufValHex)
bufValString est une Buffer =bufValHex
///////////////////////////////////////
IF Taille(bufValString)=1 THEN
bufValString="000"+bufValHex
END
//////////////////////////////////
IF Taille(bufValString)=2 THEN
bufValString="00"+bufValHex
END
//////////////////////////////////
IF Taille(bufValString)=3 THEN
bufValString="0"+bufValHex
END
bufBys[[6]]=Caract(03)+bufValString[[1]]
bufBys[[7]]=Caract(03)+bufValString[[2]]
bufBys[[8]]=Caract(03)+bufValString[[3]]
bufBys[[9]]=Caract(03)+bufValString[[4]]
bufBys[[10]]=bufETX

RENVOYER bufBys
ELSE
bufLEN=Caract(04)+Caract(20)+Taille(bufDATA)
// nTailleBys est un entier = 9+Taille(bufDATA)
bufBys est un Buffer
//////il manquue la taille du buffer
bufBys[[1]]=bufSOH
bufBys[[2]]=bufLEN
bufBys[[3]]=bufSEQ
bufBys[[4]]=bufCMD

II est un entier =4
nbCal est un entier =0
bb est un Buffer
POUR TOUT CHAÎNE bb DE bufDATA
bufBys[[II]]=bb
nbCal+=bb
II+=1
FIN
bufBys[[II]]=bufAMB
II+=1

// nVal_Entier est un entier= bufLEN+bufSEQ+bufAMB
// nVal_Entier=nVal_Entier+bufCMD
bufValHex est un Buffer=bufLEN+bufSEQ+bufAMB+bufCMD
bufValString est une Buffer=bufValHex
///////////////////////////////////////
IF Taille(bufValString)=1 THEN
bufValString="000"+bufValHex
END
//////////////////////////////////
IF Taille(bufValString)=2 THEN
bufValString="00"+bufValHex
END
//////////////////////////////////
IF Taille(bufValString)=3 THEN
bufValString="0"+bufValHex
END
bufBys[[II]]=Caract(03)+bufValString[[1]]
II+=1
bufBys[[II]]=Caract(03)+bufValString[[2]]
II+=1
bufBys[[II]]=Caract(03)+bufValString[[3]]
II+=1
bufBys[[II]]=Caract(03)+bufValString[[4]]
II+=1
bufBys[[II]]=bufETX

RENVOYER bufBys
END
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 04 mars 2020 - 23:09
Bonsoir,
Ni voyez aucune attaque mais votre code est très "fouilli" pas facile de comprendre ce que vous voulez faire...
Il y a beaucoup d'erreur et c'est normal que cela ne fonctionne pas.
//---------------------------------------------
la place de
bufBys[[1]]=bufSOH
bufBys[[2]]=bufLEN
bufBys[[3]]=bufSEQ
bufBys[[4]]=bufCMD
bufBys = Caract(0x01) + bufLEN + bufSEQ + bufCMD
//------------------------------------------
bb est un Buffer
POUR TOUT CHAÎNE bb DE bufDATA
bb est un buffer ou une chaine ???
//------------------------------------------
Pourquoi utilisez-vous beaucoup les buffer ?
//-----------------------------------------
ELSE
bufLEN=Caract(04)+Caract(20)+Taille(bufDATA)
bufBys est un Buffer
Pourquoi Caract(04)+Caract(20)+Taille(bufDATA) car LEN est sur 1 octet ( 3 octets dans votre code)
Taille renvoie un entier il sera casté automatiquement ce qui peut apporté des erreurs que la fonction NumériquVersChaine vous évitera
//----------------------------------------
II est un entier = 4
nbCal est un entier = 0
bb est un Buffer
POUR TOUT CHAÎNE bb DE bufDATA
bufBys[[II]]=bb
nbCal+=bb
II+=1
FIN
bufBys[[II]]=bufAMB
II+=1
ou plus simplement bufBys += bufDATA + bufAMB
nbCal ne sert à rien
//-------------------------------------------
bufValHex est un Buffer=bufLEN+bufSEQ+bufAMB+bufCMD
bufValString est une Buffer=bufValHex
///////////////////////////////////////
IF Taille(bufValString)=1 THEN
bufValString="000"+bufValHex
END
//////////////////////////////////
IF Taille(bufValString)=2 THEN
bufValString="00"+bufValHex
END
//////////////////////////////////
IF Taille(bufValString)=3 THEN
bufValString="0"+bufValHex
END
bufLEN+bufSEQ+bufAMB+bufCMD : Vous ne respectez pas l'ordre des champs !
Position 1 : SOH, Longueur : 1 octet, valeur 01h
Position 2 : LEN, Longueur : 1 octet, valeur 20h-FFh
Position 3 : SEQ, Longueur : 1 octet, valeur 20h-FFh
Position 4 : CMD, Longueur : 1 octet, valeur 20h-FFh
Position 5 : DATA, Longueur : 0-200 octetS, valeur 20h-FFh
Position 6 : AMB, Longueur : 1 octet, valeur 05h
Position 7 : BBC, Longueur : 4 octetS, valeur 30h-3Fh
Position 8 : ETX, Longueur : 1 octet, valeur 03h
en plus la taille de bufLEN+bufSEQ+bufAMB+bufCMD est toujours égale à 4 !
NumériqueVersChaine(Taille(bufValString), "04d")) fait le travail de formatage...
//-----------------------------------------------------
Si vous désirez plus d'aide partagez la documentation du protocole de communication de votre matériel ou l'adresse du site pour la télécharger.

--
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
Quand un utilisateur vous a aidé, n'oubliez pas de le remercier...
Membre enregistré
4 messages
Posté le 09 mai 2020 - 17:57
Bonjour, j'aimerais comprendre le format de la commande. la documentation en question est ci-dessous,





La chaîne a envoyer au port, Merci
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 09 mai 2020 - 23:37
Bonsoir
code qui devrais vous aider à répondre à votre problème
cSTX est un entier sans signe sur 1 octet = 0x01 //n°1 -> Start of TeXt
cLEN est un entier sans signe sur 1 octet = 0x24 //n°2 -> 0x20 + 1 pour LEN + 1 pour SEQ + 1 pour CMD + 1 pour AMD ça c'est fixe
cSEQ est un entier sans signe sur 1 octet = 0x01 //n°3 -> Il faut incrémenter à chaque envoie d'une trame compléte et arrivé à 0xff repositionner à 0x01. Sans plus de précision il n'est pas impossible que 0x00 soit un numéro de séquence valide
cCMD est un entier sans signe sur 1 octet = 0x00 //n°4 -> Mettre le code d'une commande valide (c'est sur 1 octet)
sData est une chaîne = "" //n°5 -> Mettre les données en accord avec CMD (voir votre documentation)
cAMB est un entier sans signe sur 1 octet = 0x05 //n°6
iBCC est un entier sans signe sur 2 octets = 0x00 //n°7
cETX est un entier sans signe sur 1 octet = 0x03 //n°8 -> End of TeXt
cBCC1, cBCC2, cBCC3, cBCC4 est un entier sans signe sur 1 octet


cLEN += Taille(sData)
SousTrame est une chaîne = Caract(cLEN) + Caract(cSEQ) + Caract(cCMD) + sData + Caract(cAMB)

// Calcul du BCC
i est un entier
FOR i=1 _TO_ Taille(SousTrame)
iBCC += Asc(SousTrame[[i]])
END

// BCC en 4 caractères affichables
cBCC1 = bitDécaleDroite(iBCC & 0xf000, 12) + 0x30
cBCC2 = bitDécaleDroite(iBCC & 0x0f00, 08) + 0x30
cBCC3 = bitDécaleDroite(iBCC & 0x00f0, 08) + 0x30
cBCC4 = iBCC & 0x000f + 0x30

sTrame est une chaîne = Caract(cSTX) + SousTrame + Caract(cBCC1) + Caract(cBCC2) + Caract(cBCC3) + Caract(cBCC4) + Caract(cETX)


--
« L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie ; la vérité ne devient pas erreur parce que nul ne la voit. » Gandhi
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 09 mai 2020 - 23:38
Erreur
remplacer : cBCC3 = bitDécaleDroite(iBCC & 0x00f0, 08) + 0x30
par : cBCC3 = bitDécaleDroite(iBCC & 0x00f0, 04) + 0x30
Membre enregistré
286 messages
Popularité : +24 (28 votes)
Posté le 10 mai 2020 - 11:21
Bravo !
Membre enregistré
4 messages
Posté le 11 mai 2020 - 14:32
Merci pour cette réponse,
en faisant les test, pas de réponse de mon terminal bien que connecte.
j'aimerais tester la commande (C1h) comme a l'image



les commandes valides sont comme ; C1h,C2h,2Bh,C0h,31h,33h,35h,38h,
Qu'est ce qui cloche?
le code
sFerme(SAI_NumPort)// Fermeture du port si ouvert


// Ouverture du port série
bPcom est un booléen = sOuvre(SAI_NumPort,SAI_BufferEntree, SAI_BufferSortie, SAI_DureeAttente, Vrai)
SI ErreurDétectée ALORS
Son(sonSystèmeArrêtCritique)
ToastAffiche("Impossible d'ouvrir le port COM" + SAI_NumPort, toastLong, cvMilieu, chCentre, RougePastel)
SINON
ToastAffiche("Prêt pour recevoir les données du port Port COM" + SAI_NumPort)

sEvénement(SAI_NumPort,sEveCaractèreReçu, LectureCom)
sFixeParamètre(SAI_NumPort, SAI_Taux, SAI_Parite, SAI_NumBitDonnees, SAI_NumBitStop)

// Ecriture
sTrame est une chaîne = CmdTrame()
Trace(sTrame)

sEcrit(SAI_NumPort, sTrame)


FIN


La procédure CmdTrame() votre code
Procedure CmdTrame(cCMD est un entier sans signe sur 1 octet = 0xC1 , sData est une chaîne = "" )

cSTX est un entier sans signe sur 1 octet = 0x01 //n°1 -> Start of TeXt
cLEN est un entier sans signe sur 1 octet = 0x24 //n°2 -> 0x20 + 1 pour LEN + 1 pour SEQ + 1 pour CMD + 1 pour AMD ça c'est fixe
cSEQ est un entier sans signe sur 1 octet = 0x01 //n°3 -> Il faut incrémenter à chaque envoie d'une trame compléte et arrivé à 0xff repositionner à 0x01. Sans plus de précision il n'est pas impossible que 0x00 soit un numéro de séquence valide

//cCMD est un entier sans signe sur 1 octet = 0x00 //n°4 -> Mettre le code d'une commande valide (c'est sur 1 octet)

//sData est une chaîne = "" //n°5 -> Mettre les données en accord avec CMD (voir votre documentation)
//Le codage UTF-8 doit être utiliser pour les champs de texte si nécessaire

cAMB est un entier sans signe sur 1 octet = 0x05 //n°6
iBCC est un entier sans signe sur 2 octets = 0x00 //n°7
cETX est un entier sans signe sur 1 octet = 0x03 //n°8 -> End of TeXt
cBCC1, cBCC2, cBCC3, cBCC4 est un entier sans signe sur 1 octet

cLEN += Taille(sData)
SousTrame est une chaîne = Caract(cLEN) + Caract(cSEQ) + Caract(cCMD )+ sData + Caract(cAMB)

// Calcul du BCC
i est un entier
FOR i=1 _TO_ Taille(SousTrame)
iBCC += Asc(SousTrame[[i]])
END

// BCC en 4 caractères affichables
cBCC1 = bitDécaleDroite(iBCC & 0xf000, 12) + 0x30
cBCC2 = bitDécaleDroite(iBCC & 0x0f00, 08) + 0x30
cBCC3 = bitDécaleDroite(iBCC & 0x00f0, 04) + 0x30
cBCC4 = iBCC & 0x000f + 0x30

sTrame est une chaîne = Caract(cSTX) + SousTrame + Caract(cBCC1) + Caract(cBCC2) + Caract(cBCC3) + Caract(cBCC4) + Caract(cETX)
//Info(sTrame)

RENVOYER sTrame


la procédure LectureCom
NumPort est un entier=SAI_NumPort

i est un entier
BufferRx += sLit(NumPort,sDansFileEntrée(NumPort))
// ici on test BufferRx pour savoir si on à reçu le ou les caractères de fin de trame (dépend du protocole)
//ici ETX =0x03 //n°8 -> End of TeXt

i = Position(BufferRx, Caract(0x03))
IF i > 0 THEN
// si oui on exploite
Trace(BufferRx[[1 A i-1]])
BufferRx = BufferRx[[i+1 A]]
END


Merci
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 11 mai 2020 - 16:55
Bonjour
Effectivement il y avait des erreurs... Testez avec cette procédure :
Procedure MakeTrame(cSEQ est un entier sans signe sur 1 octet, cCMD est un entier sans signe sur 1 octet, sData est une chaîne):chaîne

cSTX est un entier sans signe sur 1 octet = 0x02
cLEN est un entier sans signe sur 1 octet = 0x24
cAMB est un entier sans signe sur 1 octet = 0x05
iBCC est un entier sans signe sur 2 octets = 0x00
cETX est un entier sans signe sur 1 octet = 0x03
cBCC1, cBCC2, cBCC3, cBCC4 est un entier sans signe sur 1 octet
SousTrame, sTrame est une chaîne

cLEN += Taille(sData)
SousTrame = Caract(cLEN) + Caract(cSEQ) + Caract(cCMD) + sData + Caract(cAMB)

// Calcul du BCC
i est un entier
FOR i=1 _TO_ Taille(SousTrame)
iBCC += Asc(SousTrame[[i]])
END

// BCC en 4 caractères affichables
cBCC1 = bitDécaleDroite(iBCC & 0xf000, 12) + 0x30
cBCC2 = bitDécaleDroite(iBCC & 0x0f00, 08) + 0x30
cBCC3 = bitDécaleDroite(iBCC & 0x00f0, 04) + 0x30
cBCC4 = (iBCC & 0x000f) + 0x30 // les parenthéses sont très importantes

sTrame = Caract(cSTX) + SousTrame + Caract(cBCC1) + Caract(cBCC2) + Caract(cBCC3) + Caract(cBCC4) + Caract(cETX)

RENVOYER sTrame

n'oubliez pas d'incrémenter cSEQ après chaque envoie

--
« L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie ; la vérité ne devient pas erreur parce que nul ne la voit. » Gandhi
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 11 mai 2020 - 16:58
j'ai laissé passer cette erreur : cSTX est un entier sans signe sur 1 octet = 0x02 doit être remplacé par cSOH est un entier sans signe sur 1 octet = 0x01

et
sTrame = Caract(cSTX) + SousTrame + Caract(cBCC1) + Caract(cBCC2) + Caract(cBCC3) + Caract(cBCC4) + Caract(cETX)
remplacée par
sTrame = Caract(cEOT) + SousTrame + Caract(cBCC1) + Caract(cBCC2) + Caract(cBCC3) + Caract(cBCC4) + Caract(cETX)

--
« L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie ; la vérité ne devient pas erreur parce que nul ne la voit. » Gandhi
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 11 mai 2020 - 17:01
avec la correction :
Procedure MakeTrame(cSEQ est un entier sans signe sur 1 octet, cCMD est un entier sans signe sur 1 octet, sData est une chaîne):chaîne
cSOH est un entier sans signe sur 1 octet = 0x01
cLEN est un entier sans signe sur 1 octet = 0x24
cAMB est un entier sans signe sur 1 octet = 0x05
iBCC est un entier sans signe sur 2 octets = 0x00
cETX est un entier sans signe sur 1 octet = 0x03
cBCC1, cBCC2, cBCC3, cBCC4 est un entier sans signe sur 1 octet
SousTrame, sTrame est une chaîne

cLEN += Taille(sData)
SousTrame = Caract(cLEN) + Caract(cSEQ) + Caract(cCMD) + sData + Caract(cAMB)

// Calcul du BCC
i est un entier
FOR i=1 _TO_ Taille(SousTrame)
iBCC += Asc(SousTrame[[i]])
END

// BCC en 4 caractères affichables
cBCC1 = bitDécaleDroite(iBCC & 0xf000, 12) + 0x30
cBCC2 = bitDécaleDroite(iBCC & 0x0f00, 08) + 0x30
cBCC3 = bitDécaleDroite(iBCC & 0x00f0, 04) + 0x30
cBCC4 = (iBCC & 0x000f) + 0x30

sTrame = Caract(cSOH) + SousTrame + Caract(cBCC1) + Caract(cBCC2) + Caract(cBCC3) + Caract(cBCC4) + Caract(cETX)

RENVOYER sTrame


--
« L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie ; la vérité ne devient pas erreur parce que nul ne la voit. » Gandhi
Membre enregistré
4 messages
Posté le 11 mai 2020 - 18:41
Merci pour vos réponses .
Ce qui est bizarre ça ne fonctionne pas,
un seul code comme ci dessous fait réagir le terminal mais pas de réponses
sEcrit(SAI_NumPort, "C1h")


mais la procédure MakeTrame le terminal ne réagit pas du tout avec les paramètres cSEQ=1 , cCMD =C1h, sData=""
// Ecriture
sTrame est une chaîne = MakeTrame(1,C1h,"")

sEcrit(SAI_NumPort, sTrame)


Ais-je omis un un bout de code?
Merci
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 11 mai 2020 - 18:59
- Etes vous sur e votre paramétrage dans la ligne : sFixeParamètre(SAI_NumPort, SAI_Taux, SAI_Parite, SAI_NumBitDonnees, SAI_NumBitStop) ?
- Avez-vous changé la valeur de cSEQ en essayant de mettre 0x02 car d'après ce que j'ai compris vous ne pouvez pas envoyer deux fois de suite la même trame.
- Pouvez vous m'envoyer la documentation par email : philippe.pasquali.76(at)hotmail.fr
- L'appareil est-il fourni avec un programme de démo ?

--
« L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie ; la vérité ne devient pas erreur parce que nul ne la voit. » Gandhi
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 11 mai 2020 - 19:14
cSEQ doit être : 20H à FFh, alors testez avec 0x21h

--
« L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie ; la vérité ne devient pas erreur parce que nul ne la voit. » Gandhi
Membre enregistré
4 messages
Posté le 11 mai 2020 - 20:04
non plus cSEQ
oui L'appareil -il fourni avec un programme de démo
Posté le 12 novembre 2020 - 12:29
Bonjour je peux avoir aussi la documentation stp
germain7g@gmail.com
Posté le 06 mai 2021 - 18:38
Salut Julien. Je suis sur un projet de soutenance et j'ai ce genre de soucis actuellement. Je te demande vraiment de me donner un coup de main a propos du protocole de communication entre le site et le mcf. Je suis nul en langage machine et tout mes efforts a essayer les codes trouvés sur le net sont vains. J'espère que tu répondras vivement a ma requête
Posté le 12 mai 2021 - 12:59
Bonjour les amis. j'ai eu le même travail à faire comme la communication avec la machine de facturation. Avec vos instructions j'ai pu réussi avec la Commande C1 mais les autres commandes ne marchent pas.
Je voudrais demander si quelqu'un a pu faire et de m'aider.
Posté le 02 juin 2021 - 17:56
Bonsoir ,

j'ai fini par avoir un code qui marche bien.

Puis je avoir le modèle de MCF que tu utilises ?
Posté le 07 juin 2021 - 16:15
Bonjour Monsieur Julien
j'ai le modèle incotex 133
Posté le 07 juin 2021 - 16:34
Bonjour Monsieur Julien PATIPE

Merci de me répondre. c'est la machine incotex 133 que j'ai.
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 08 juin 2021 - 09:45
hello,
pour piloter les imprimantes "fiscales" il y a aussi la possibilité d'utiliser ErpNet.FP
ErpNet.FP est un serveur http léger qui facilite l'impression sur les imprimantes de type "fiscal" à travers une simple api json
ErpNet.FP is a light-weight multi-platform Http server facilitating printing to fiscal printers through simple JSON Api. The library provides methods to detect, get status, print receipts, reports and other documents to fiscal printers.

The ErpNet.FP http server provides a REST API with JSON input/output, which prints documents transactionally and returns result status.

The http server receives input through the REST API and uses different transports to communicate with the fiscal printers. The transports include:

COM serial connection
Bluetooth connection through mapping to COM port
TCP/IP
etc.

All communication with the ErpNet.FP print server is based on the Net.FP (Net Fiscal Protocol).

Supported devices and operating systems
Currently, the http server is available for:

Windows 32/64 bit
macOS 10.10 and up
Linux x64
Linux Arm
The library supports printers from the following manufacturers:

Datecs (http://www.datecs.bg)
Tremol (https://www.tremol.bg)
Daisy (https://daisy.bg)
Eltrade (https://www.eltrade.com)
Incotex (http://www.incotex.bg)
ISL (http://isl.bg)
If you want your device to be supported, please contact us, and we will try our best to help you!

Tested on
Datecs DP-25, firmware: 263453 08Nov18 131, protocol: bg.dt.c.isl.com
Datecs WP-50, firmware: 261403 08Nov18 1050, protocol: bg.dt.c.isl.com
Datecs FP-2000, firmware: 1.00BG 23NOV18 1000, protocols: bg.dt.p.isl.com, bg.dt.p.isl.tcp
Datecs FP-700X, firmware: 266207 29Jan19 1634, protocols: bg.dt.x.isl.com, bg.dt.x.isl.tcp
Daisy CompactM, firmware: ONL-4.01BG, protocol: bg.dy.isl.com
Daisy CompactM, firmware: ONL01-4.01BG, protocol: bg.dy.isl.com
Eltrade A1, firmware: KL5101.1811.0.3 15Nov18 15:49, protocol: bg.ed.isl.com
Tremol FP01-KL-V2, firmware: 99C4, protocol: bg.zk.v2.zfp.com
Tremol M20, firmware: Ver. 1.01 TRA20 C.S. 25411, protocol: bg.zk.zfp.com
Incotex 300SM KL-Q, firmware: 2.11 Jan 22 2019 14:00, protocol: bg.in.isl.com
ISL5011S-KL, firmware: BG R1 21.01.201948, protocol: bg.is.icp.com
Supported protocols and devices
bg.dt.c.isl - Datecs WP-50, Datecs DP-05, Datecs DP-05B, Datecs DP-05C, Datecs DP-25, Datecs DP-35, Datecs DP-150, Datecs DP-15

bg.dt.p.isl - Datecs FP-650, Datecs FP-800, Datecs FP-2000, Datecs FMP-10, Datecs SK1-21F, Datecs SK1-31F

bg.dt.x.isl - Datecs DP-25X, Datecs FMP-350X, Datecs FP-700X, Datecs WP-500X, Datecs FMP-55X, Datecs WP-50X, Datecs FP-700X, Datecs DP-150X, Datecs WP-25X, Datecs FP-700XE

bg.zk.zfp - Tremol A19Plus, Tremol S21, Tremol M23, Tremol M20, Tremol FP15, Tremol SB, Tremol S25, Tremol FP24

bg.zk.v2.zfp - Tremol Z-KL-V2, Tremol ZM-KL-V2, Tremol ZS-KL-V2, Tremol FP01-KL V2, Tremol FP05-KL V2, Tremol M-KL-V2, Tremol S-KL-V2, Tremol FP15 KL V2, Tremol FP03-KL V2, Tremol FP07-KL V2, Tremol FP01, Tremol FP21

bg.ed.isl - Eltrade A1 KL, Eltrade A1 KL, Eltrade A3 KL, Eltrade B1 KL, Eltrade PRP 250F KL, Eltrade A6 KL, Eltrade B3 KL, EPSON TM - T810F KL модел 01, EPSON TM - T81F KL модел 03, ELTRADE PRP 250F KL

bg.dy.isl - Daisy Compact S, Daisy Compact M, Daisy eXpert SX 01, Daisy eXpert SX, Daisy Compact M 02, Daisy Compact S 01, Daisy Perfect M 01, Daisy MICRO C 01, Daisy Compact M 01, Daisy eXpert 01, Daisy Perfect S 01, Daisy FX 1300, Daisy FX 1200C, Daisy Perfect SA, Daisy FX 21 01

bg.in.isl - Incotex 133 KL-Q, Incotex 181 KL-Q, Incotex 777, Incotex 300SM KL-Q, Incotex 300S KL-Q

bg.is.icp - ISL5011S-KL


On peut le télécharger ici :
https://github.com/erpnet/ErpNet.FP/blob/master/README.md ( Download)
Il a une licence BSD Zero Clause License ( gratuite)

--
Ami calmant, J.P
Posté le 19 octobre 2021 - 07:51
Bonjour mon cher ami

Puis-je avoir ton code qui marche bien là stp.

J'utilise deux machines
Incotx 133 et eltrade

Merci pour ta générosité.

yawo907@gmail.com
Membre enregistré
1 message
Posté le 01 novembre 2021 - 03:24
bonsoir :(
j'ai besoin d'aide pour finir un projet semblable svp :(
voici mon code

la reponse est sur 1 octet et je recois rien
sFerme(SAI_Port_Com)


nPort est un entier

// Ouverture du Port série
nPort = sOuvre(SAI_Port_Com, 4096, 4096, sTimeoutDéfaut, Vrai)
SI ErreurDétectée ALORS
ToastAffiche("Erreur sur le port")
Erreur()
SINON
ToastAffiche("Ouverture du port")
NumSeq est un entier = Hasard(32,255)
// Paramétrage d'E/S
sFixeParamètre(nPort, 115200, 1, 8, 0, Vrai, Vrai, Vrai)


ToastAffiche("Ecriture")
sEcrit(SAI_Port_Com, MakeTrame (Caract(NumSeq),0xC1, ""))
Temporisation(100)
sEvénement(SAI_Port_Com,sEveCaractèreReçu, LectureCOM)
// Insérez votre code ici

FIN




procedure mktrams
Procedure MakeTrame(cSEQ est un entier sans signe sur 1 octet, cCMD est un entier sans signe sur 1 octet, sData est une chaîne):chaîne
cSOH est un entier sans signe sur 1 octet = 0x01
cLEN est un entier sans signe sur 1 octet = 0x24
cAMB est un entier sans signe sur 1 octet = 0x05
iBCC est un entier sans signe sur 2 octets = 0x00
cETX est un entier sans signe sur 1 octet = 0x03
cBCC1, cBCC2, cBCC3, cBCC4 est un entier sans signe sur 1 octet
SousTrame, sTrame est une chaîne

cLEN += Taille(sData)
SousTrame = Caract(cLEN) + Caract(cSEQ) + Caract(cCMD) + sData + Caract(cAMB)
ToastAffiche(SousTrame,toastLong)

// Calcul du BCC
i est un entier
FOR i=1 _TO_ Taille(SousTrame)
iBCC += Asc(SousTrame[[i]])
END

// BCC en 4 caractères affichables
cBCC1 = bitDécaleDroite(iBCC & 0xf000, 12) + 0x30
cBCC2 = bitDécaleDroite(iBCC & 0x0f00, 08) + 0x30
cBCC3 = bitDécaleDroite(iBCC & 0x00f0, 04) + 0x30
cBCC4 = (iBCC & 0x000f) + 0x30

sTrame = Caract(cSOH) + SousTrame + Caract(cBCC1) + Caract(cBCC2) + Caract(cBCC3) + Caract(cBCC4) + Caract(cETX)
ToastAffiche(sTrame,toastLong,cvHaut)

RENVOYER sTrame



procedure lecture com
Procedure LectureCOM()

sMessageLu est une chaîne
nNbCar est un entier
sMessageRetour est une chaîne

nNbCar=sDansFileEntrée(SAI_Port_Com)

Trace(nNbCar)

sMessageLu+=sLit(SAI_Port_Com,sDansFileEntrée(SAI_Port_Com))



SI Contient(sMessageLu,EOT) ALORS
sMessageRetour=ExtraitChaîne(sMessageLu,1,EOT)
SINON
sMessageRetour=sMessageLu
FIN

SI Contient(sMessageRetour,Caract(1)) ALORS
sMessageRetour = ExtraitChaîne(sMessageRetour,2,Caract(1))
sMessageRetour = sMessageRetour[[4 À]]
FIN
SAI_Retou +=" "+RC+sMessageRetour
RENVOYER sMessageRetour


voici mon mail arthuravoce@yahoo.fr

--
“La victoire sur soi est la plus grande des victoires.”--- PLATON