OVH Cloud OVH Cloud

[WD7] cherche genie du port serie

1 réponse
Avatar
Christian CDAGFreelance
Bonjour,

Pour une connexion PC / Caisse de magasin via le port serie...

Je dois envoyer des signaux de controle d'envoi et de reception de
type DC1, DC3, ACK, NAK, et là je bloque...
J'ai ecris la procédure suivante mais rien à faire le buffer d'entrée me
renvoie le contenu du buffer de sortie !!!!!
Si j'envoie "C'est rigolo" il me renvoie "c'est rigolo"
//____________________________________________________________
// Ouverture du port spécifié
sOuvre(2, 20000, 20000)

// Initialise les paramètres du port série
sFixeParamètre(...
2, ... // Port
9600, ... // Taux
2, ... // Parité : 0=aucune, 1=paire, 2=impaire
8, ... // Nb bit de données
0, ... // Nb bit de stop
// 0=1 bit de stop, 1=1,5 bits de stop, 2=2 bits de stop


Vrai, ... // DTR/DSR géré
Vrai, ... // RTS/CTS géré
Faux) // XON/XOFF ignoré

SI ErreurDétectée ALORS
Erreur("Impossible d'initialiser le port", ErreurInfo())
FIN
//Envoi de la chaine de controle
chEnv est une chaîne = "DC1"
SI sEcrit(2,chEnv)=Taille(chEnv) ALORS
Trace("ENV:"+chEnv)
SINON
Info("PB ecriture")
FIN
//Lecture du BufferIn
ChaineRecue est une chaîne = ""
DateHeureDepart est une chaîne = DateSys()+HeureSys()
TANTQUE Val(Droite(DateHeureDifférence(DateHeureDepart,DateSys()+
HeureSys()), 4))<0600
// 04secondes de timeout
SI sDansFileEntrée(2)>0 ALORS
ChaineRecue += sLit(2,sDansFileEntrée(2))
DateHeureDepart = DateSys()+HeureSys()
nCrcLu est un entier // Caractère de contrôle lu


LigneLue est une chaîne // Chaîne lue

SI ChaineRecue<>"" ALORS
SORTIR
SINON
Info("la chaine est vide")
FIN

FIN
FIN
SI ChaineRecue<>"" ALORS
Trace("REC:"+ChaineRecue)

SINON
Info("la chaine est vide")
FIN

//______________________________________________________________

Un génie du port série aurait il une idée pour éclairer ma lanterne ???
???????
Merci d'avance et désolé pour la taille du message
Ci dessous le protocole de com utilisé

//____________________________________________________

1. Interface Specification



* Hardware Interface : Asychronus RS-232C

* Transmission : Full Duplex

* Baud Rate : 9600 Bit / Sec.

* Data Length : 8 Bits / Character

* Start Bit : 1 Bit

* Stop Bit : 1 Bit

* Parity : Even Parity

Sio 85-98 1st must be set 53
1st digit 1 ; 600, 2 ;1200, 3 ;
2400
4 ;4800, 5 ;9600, 6 ;
19200
2nd digit 3 ;P.C Mode
2nd must be set 00110111b
bit0 ; parity check y/n bit1 ; odd/
even
bit2-3 ; stop bit 1/1/1.5/2
bit4-5; character 5/6/7/8
** Signal DTR and RTS of Terminal which is connected with
ET-6600 must be "ON".




2. Transmission Protocol


The Data are "Text Data" and "Control Code Data".

Text Data : start data ... STX
end data ... CR & LF

STX ..... CR LF

Control Code Data : ACK, NAK, DC1, DC3, STX, CR, LF
** STX, CR and LF are used as start and end data.

** When "Text Data" is received, Terminal and ET-6600
must transmit "ACK" or "NAK".


Terminal ET-6600

DC1 ----------> . Transmission Requirement
<---------- DC1 . Receive Enable Answer
TEXT ----------> . Require TEXT DATA
<---------- ACK or NAK . ACK/NAK Requirement
*
DC1 ----------> . Receive Enable
<---------- TEXT . Transmit "Text Data"
ACK/NAK ----------> . ACK/NAK of Transmitted Data
*
DC1 ----------> . Receive Enable
<---------- TEXT . Transmit "Text Data"
ACK/NAK ----------> . ACK/NAK of Transmitted Data
*
DC1 ----------> . Receive Enable
<---------- TEXT . Transmit final "Text Data"
with "ETX" code
ACK/NAK ----------> . ACK/NAK of final "Text Data"


Note : This time (* mark) is PC (Terminal) processing time
of the received data from ET-6600.

The time period between "ACK/NAK" (for receiving of
Text from ET-6600) and next "DC1" (for reguiring of
next Text) from PC (Terminal) needs minimum 6.0 ms.




3. Configuration of Transmission Data


. Control Code : ACK NAK DC1 DC3

. Text Data : STX ID DATA CR LF


. The code value of each Control Code are showed in page.
. ID code identifys the Text Data.
. The data length is different, it depends on "ID code".
. Data Code is ASCII except "ID code".
* Refer to Code Table.



* Text Format

-----------------------------
Basic Format : | STX | ID | DATA | CR | LF |
|----------------------------
Final Data : | STX | ID | ETX | CR | LF |
---------------------------
* only the case of all data request


Requirement of all data transmission of ID code

-------------------------------
| STX | ID | ?(3Fh) | CR | LF |
-------------------------------

Example 1 :
The following format is the requirement of all
department programming data.

------------------------------------
| STX | 30h(ID) | 3Fh(?) | CR | LF |
------------------------------------

Example 2 :
The following is the requirement of department No.12
programming data.

--------------------------------------------------
| STX | 30h(ID) | 30 30 31 32 | 3Fh(?) | CR | LF |
--------------------------------------------------

Example 3 :
The following is the requirement of 123 PLU Sales
Data.

--------------------------------------------------------
| STX | 43h(ID) | 30 30 30 31 32 33 | 3Fh(?) | CR | LF |
--------------------------------------------------------

//
________________________________________________________________________
______
--
Article posté depuis le site FORUMS WINDEV® :
http://forums.wdscript.com
Une archive de plus de 120000 articles sur Windev® et Webdev®
--

1 réponse

Avatar
Romain PETIT
Christian CDAGFreelanc a pensé très fort :
Bonjour,

Pour une connexion PC / Caisse de magasin via le port serie...

Je dois envoyer des signaux de controle d'envoi et de reception de
type DC1, DC3, ACK, NAK, et là je bloque...
J'ai ecris la procédure suivante mais rien à faire le buffer d'entrée me
renvoie le contenu du buffer de sortie !!!!!
Si j'envoie "C'est rigolo" il me renvoie "c'est rigolo"



Ton câble est très probablement en cause.

Si tu es en DB9 des 2 côtés, tu devrais avoir (au minimum) les pins
suivants :

2 ----- 3
3 ----- 2
5 ----- 5


Quand aux caractères de contrôle, il ne faut pas envoyer des chaines
(!!) mais le caractère correspondant :

Exemple, pour envoyer ACK, il faudra utiliser
sEcrit(eNumPort, caract(6))

Voir la table ASCII ici (par exemple) :
http://www.asciitable.com/

Et des infos sur les liaisons série :
http://www.beyondlogic.org/serial/serial.htm
www.aggsoft.com/rs232-pinout-cable/ serial-port-interface.htm
http://eintr.net/serial/

etc...

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)