Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Lecteur de glycémie & port Série...

2 réponses
Avatar
Celine78
Bonjour =E0 tous,

diab=E9tique depuis quelques ann=E9es, je cherche =E0 me d=E9velopper une
application en JAVA pour me personnaliser mes suivis de glyc=E9mie (plus
avantageusement que le logiciel fourni par le fabriquant du lecteur).

J'utilise le lecteur de glyc=E9mie One Touch Ultra et la communication
s'effectue gr=E2ce =E0 un cable qui relie le lecteur au PC via le port
s=E9rie (RS 232).

J'ai trouv=E9 sur le site de LifeScan (le fabriquant), les
sp=E9cifications techniques sur la communication avec le lecteur que je
r=E9sume ci-dessous : =AB

Cable: Connect LifeScan Interface cable to an available serial/com port
on the computer. Insert the
LifeScan Interface cable plug into the ONE TOUCH=AE Ultra data port that
is located at the
bottom of the meter.

Software: Select port settings in communications software:
Baud Rate =3D 9600 bps Data Bits =3D 8
Stop Bits =3D 1 Parity
=3D none
Flow Control =3D None Com Port =3D
port # utilized

Set the Caps lock to "ON" on your keyboard and type a "DM?"
command to wake up the Meter. The Meter
should display "PC". The Meter is now ready to communicate with
your computer. You may now issue the
following commands to upload and erase the results stored in the
Meter's memory.

=B7 DM? : send the Meter's software version and date
=B7 DM@ : send the Meter's serial number
=B7 DMF : send date and time from the Meter's clock
=B7 DMP : upload blood and control records from the Meter's
memory
=B7 DMSU'x' : set or display the glucose Units
=B7 DMST'x' : set or display the Time format (AM/PM or 24hr)
=B7 DMTmm/dd/yy hh:mm[:ss] : set the date and Time of the Meter's
clock
=B7 DMZ : zero the Meter's data log

Serial commands and responses are encoded as ASCII characters. A
checksum is generated for all messages and the hexadecimal
representation of the least significant 16 bits of the checksum (a
blank followed by 4 characters) is placed at the end of each response
message, just before the carriage return (<CR>), line feed (<LF>) pair.

The following conditions must be met to enable the LifeScan Interface
Cable to work with the ONE
TOUCH=AE Ultra Meter:
1=2E The computer must assert (apply a positive RS-232 voltage to) RTS
and/or DTR. Either or
both of these signals supply power to the cable circuitry.
2=2E The computer may leave RTS "open" but may not drive it to a negative
RS-232 level.
3=2E The computer communications port must be set to 9600 baud, 8 data
bits, no parity, and one
stop bit. =BB


J'ai =E9crit le code JAVA suivant pour essayer de r=E9veiller le lecteur
: =AB

public void init() {
Win32Driver w32Driver =3D new Win32Driver();
SerialPort portSerie =3D null;

// initialisation du port
w32Driver.initialize();
portInitialise =3D true;

// ouverture du port "COM1"
portId =3D CommPortIdentifier.getPortIdentifier("COM1");
portSerie =3D (SerialPort)portId.open("GlucoMeter", 2000);

// param=E9trage du port
portSerie.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);

portSerie.setRTS(true);
portSerie.setDTR(true);

portSerie.setSerialPortParams(9600, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

// r=E9cup=E9ration du flux de lecture
BufferedReader fluxLecture =3D new BufferedReader( new
InputStreamReader(portSerie.getInputStream()) );

// ajout d'un flux d'=E9criture
OutputStream fluxEcriture =3D portSerie.getOutputStream();

// ajout du listener
portSerie.addEventListener(this);


// =3D=3D=3D TENTATIVE DE COMMUNICATION AVEC LE LECTEUR =3D=3D=3D
char debut =3D 17;
oneTouch.sendMessage(debut + "\rDMS\r\r");

try {
Thread.sleep(1700);
} catch (InterruptedException e1) {
e1.printStackTrace();
}

oneTouch.sendMessage(debut + "\rDMS\r\r");

try {
Thread.sleep(1700);
} catch (InterruptedException e1) {
e1.printStackTrace();
}

oneTouch.sendMessage(debut + "\rDM?");

...ETC...
}

public void serialEvent(SerialPortEvent event) {
System.out.println("Je re=E7ois un d=E9but de signal...");

// gestion des =E9v=E9nements sur le port :
// on ne fait rien sauf quand les donn=E9es sont disponibles
switch (event.getEventType()) {
case SerialPortEvent.BI : System.out.println("message lu BI =3D=3D
BREAK"); break;
case SerialPortEvent.OE : System.out.println("message lu OE"); break;
case SerialPortEvent.FE : System.out.println("message lu FE"); break;
case SerialPortEvent.PE : System.out.println("message lu PE"); break;
case SerialPortEvent.CD : System.out.println("message lu CD"); break;
case SerialPortEvent.CTS : System.out.println("message lu CTS");
break;
case SerialPortEvent.DSR : System.out.println("message lu DSR");
break;
case SerialPortEvent.RI : System.out.println("message lu RI"); break;
case SerialPortEvent.OUTPUT_BUFFER_EMPTY :
System.out.println("message lu VIDE");
break;
case SerialPortEvent.DATA_AVAILABLE :
System.out.println("Message disponible : ");

try {
maChaine =3D new String(fluxLecture.readLine());
System.out.println("chaine re=E7u : " + maChaine);

} catch (Exception e) {
System.out.println("impossible de lire la ligne...");
e.printStackTrace();
}
break;
}
}
}

public void sendMessage(String s) {
try {
fluxEcriture.write(s.getBytes());
System.out.println("Message suivant envoy=E9 : " + s);
} catch (IOException e) {
System.out.println("Erreur lors de l'envoi du message : " +
e=2EgetMessage());
}
} =BB.

Lorsque j'ex=E9cute le code ci-dessus, il ne se passe rien ; mon lecteur
refuse de se r=E9veiller et d'afficher "PC" pour commencer la
communication. Je me suis alors d=E9cid=E9 =E0 utiliser les logiciels
Serial Sniffer AX DEMO 2.0, HHD Serial Monitor, Serial Monitor
Professionnal pour espionner le logiciel fourni par LifeScan qui
fonctionne bien avec mon cable.

Je me suis ainsi aper=E7u :
- la commande pour r=E9veiller le lecteur n'est pas "DM?" comme =E9crit
dans la specification mais "DMS"
- les commandes sont pr=E9c=E9d=E9s du caract=E8re num=E9ro : 17

Mais en envoyant exactement les m=EAmes donn=E9es au lecteur de glyc=E9mie
que le logiciel fourni par Lifescan, mon lecteur refuse de s'allumer.

Il doit y avoir un probl=E8me sur le mode de communication ?
Y-aurait-il une erreur sur la sp=E9cification au niveau de la vitesse,
du controle de flux de donn=E9es, du nombre de bits d'arret ..etc ?
Auriez-vous une id=E9e et comment pourrais-je d=E9tecter d'o=F9 viens le
probl=E8me ?


De plus, le logiciel Serial Monitor Professionnal m'a donn=E9 une
information suppl=E9mentaire :

- avec le logiciel de LifeScan, durant la communication, on a :
* RTS et DTR qui sont verts, c'est =E0 dire au niveau haut
du signal ;
* CTS, DSR, DCD, RI sont gris, indiquant un =E9tat de la
ligne non d=E9termin=E9 pour le moment.

- avec ma classe JAVA (cf. ci-dessus), on a durant la
communication :
* RTS et DTR qui sont verts, c'est =E0 dire au niveau haut
du signal ;
* CTS, DSR, DCD, RI sont ROUGES, indiquant un niveau bas du
signal.

Comment dois-je faire pour que ces capteurs soient consid=E9r=E9s comme
"non d=E9termin=E9 pour le moment" ???

Merci beaucoup pour votre aide.
Mille bisous =E0 tous.

C=E9line DUPONT.

2 réponses

Avatar
TestMan
Bonjour à tous,

diabétique depuis quelques années, je cherche à me développer une
application en JAVA pour me personnaliser mes suivis de glycémie (plus
avantageusement que le logiciel fourni par le fabriquant du lecteur).

J'utilise le lecteur de glycémie One Touch Ultra et la communication
s'effectue grâce à un cable qui relie le lecteur au PC via le port
série (RS 232).

J'ai trouvé sur le site de LifeScan (le fabriquant), les
spécifications techniques sur la communication avec le lecteur que je
résume ci-dessous : «

Cable: Connect LifeScan Interface cable to an available serial/com port
on the computer. Insert the
LifeScan Interface cable plug into the ONE TOUCH® Ultra data port that
is located at the
bottom of the meter.

Software: Select port settings in communications software:
Baud Rate = 9600 bps Data Bits = 8
Stop Bits = 1 Parity
= none
Flow Control = None Com Port > port # utilized

Set the Caps lock to "ON" on your keyboard and type a "DM?"
command to wake up the Meter. The Meter
should display "PC". The Meter is now ready to communicate with
your computer. You may now issue the
following commands to upload and erase the results stored in the
Meter's memory.

· DM? : send the Meter's software version and date
· DM@ : send the Meter's serial number
· DMF : send date and time from the Meter's clock
· DMP : upload blood and control records from the Meter's
memory
· DMSU'x' : set or display the glucose Units
· DMST'x' : set or display the Time format (AM/PM or 24hr)
· DMTmm/dd/yy hh:mm[:ss] : set the date and Time of the Meter's
clock
· DMZ : zero the Meter's data log

Serial commands and responses are encoded as ASCII characters. A
checksum is generated for all messages and the hexadecimal
representation of the least significant 16 bits of the checksum (a
blank followed by 4 characters) is placed at the end of each response
message, just before the carriage return (<CR>), line feed (<LF>) pair.

The following conditions must be met to enable the LifeScan Interface
Cable to work with the ONE
TOUCH® Ultra Meter:
1. The computer must assert (apply a positive RS-232 voltage to) RTS
and/or DTR. Either or
both of these signals supply power to the cable circuitry.
2. The computer may leave RTS "open" but may not drive it to a negative
RS-232 level.
3. The computer communications port must be set to 9600 baud, 8 data
bits, no parity, and one
stop bit. »
<...>>

Lorsque j'exécute le code ci-dessus, il ne se passe rien ; mon lecteur
refuse de se réveiller et d'afficher "PC" pour commencer la
communication. Je me suis alors décidé à utiliser les logiciels
Serial Sniffer AX DEMO 2.0, HHD Serial Monitor, Serial Monitor
Professionnal pour espionner le logiciel fourni par LifeScan qui
fonctionne bien avec mon cable.

Je me suis ainsi aperçu :
- la commande pour réveiller le lecteur n'est pas "DM?" comme écrit
dans la specification mais "DMS"
- les commandes sont précédés du caractère numéro : 17

Mais en envoyant exactement les mêmes données au lecteur de glycémie
que le logiciel fourni par Lifescan, mon lecteur refuse de s'allumer.

Il doit y avoir un problème sur le mode de communication ?
Y-aurait-il une erreur sur la spécification au niveau de la vitesse,
du controle de flux de données, du nombre de bits d'arret ..etc ?
Auriez-vous une idée et comment pourrais-je détecter d'où viens le
problème ?


De plus, le logiciel Serial Monitor Professionnal m'a donné une
information supplémentaire :

- avec le logiciel de LifeScan, durant la communication, on a :
* RTS et DTR qui sont verts, c'est à dire au niveau haut
du signal ;
* CTS, DSR, DCD, RI sont gris, indiquant un état de la
ligne non déterminé pour le moment.

- avec ma classe JAVA (cf. ci-dessus), on a durant la
communication :
* RTS et DTR qui sont verts, c'est à dire au niveau haut
du signal ;
* CTS, DSR, DCD, RI sont ROUGES, indiquant un niveau bas du
signal.

Comment dois-je faire pour que ces capteurs soient considérés comme
"non déterminé pour le moment" ???

Merci beaucoup pour votre aide.
Mille bisous à tous.

Céline DUPONT.



Bonjour,

Est-ce que vous arrivez à obtenir des informations en vous connectant
avec l'hyperterminal de windows dans le bon mode ?

Un fois que vous pourrez arriver à dialoguer sous l'hyperterminal, avec
votre lecteur vous pourrez certainement logiquement faire la même chose
avec la comm API ...

Je suis pas spécialiste de la prog de port série mais à première
lecture, les points important sont :
1. The computer must assert (apply a positive RS-232 voltage to) RTS
and/or DTR. Either or
both of these signals supply power to the cable circuitry.


Ce qui signifie que le cable est auto-alimenté par les broches RTS et/ou
DTR. Et je suis pas sûr que ce soit le cas par défaut ...

Bonne chance pour ce super projet !

A+

TM

Avatar
rp
Celine78 a formulé la demande :
Bonjour à tous,


Bonjour,

J'utilise le lecteur de glycémie One Touch Ultra et la communication
s'effectue grâce à un cable qui relie le lecteur au PC via le port
série (RS 232).
[.../...]


Je me suis ainsi aperçu :
- la commande pour réveiller le lecteur n'est pas "DM?" comme écrit
dans la specification mais "DMS"


Les erreurs de doc sont courantes...

- les commandes sont précédés du caractère numéro : 17


C'est le caractère DC1, utilisé par le contrôle de flux logiciel
(Xon/Xoff).
A mon avis (vite lu le code), il faut activer le controle de flux
logiciel de ton côté :
portSerie.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
à remplacer par (ou quelque chose d'approchant)
portSerie.setFlowControlMode(SerialPort.FLOWCONTROL_XONXOFF);

ou alors c'est que la désactivation du XON/XOFF du côté automate n'est
pas effective (il faut parfois les rebooter ces machines pour que ce
soit pris en compte)...

Bon courage,

A+

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