écriture d'une trame en java

semi000 - 23 avril 2017 à 23:52 - Dernière réponse : Twinuts 5255 Messages postés dimanche 4 mai 2003Date d'inscriptionModérateurStatut 11 janvier 2018 Dernière intervention
- 9 mai 2017 à 11:11
Bonjour,
comment écrire une telle trame en java
H|\^&|||cobas-e411^1|||||host|RSUPL^BATCH|P|1[CR]
Afficher la suite 

4 réponses

Répondre au sujet
Twinuts 5255 Messages postés dimanche 4 mai 2003Date d'inscriptionModérateurStatut 11 janvier 2018 Dernière intervention - 27 avril 2017 à 09:04
0
Utile
Salut,

Peux-tu être plus explicite stp.
Tu souhaites écrire quoi dans quoi ?
Il s'agit d'une simple chaîne de caractère ou de données binaires ?


Commenter la réponse de Twinuts
0
Utile
bjr ,merci pour avoir me répondre
en fait mon projet PFE consiste à envoyer et recevoir des trames à une automate VIdas ou Cobas
le cablage est rs232
protocol : ASTM
au niveau de la documentation de ces automates la trame est sous cette forme :
<STX><FN><text><ETB><CH><CL><CR><LF>
CH,CL :checksum
STX:début trame
ETB:si trame intermidiare
ETX:si trame final

le message est fomé par plusieurs records et chaque record est formé par plusieurs fields
ce que j'ai écrit la bas un juste un record qu'on appelle H(Header:entete de message) et qui est fomé par plusieurs champs (fields) qui sont séparer par des séparateur tel que |
H|\^&|||cobas-e411^1|||||host|RSUPL^BATCH|P|1[CR]
CR:fin de record
un message envoyé vers ou depuis cette automate doit etre diviser sous forme des trames comme j'ai indiqué et la taille de chaque trame ne doit pas dépasser 247 character
LE probléme est que j'ai pas meme reussi à capturer la trame envoyé par ces automates voila le code que j'ai utilisé :
package View;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Enumeration;

import java.io.InputStream;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.UnsupportedCommOperationException;

public class Test1
{
CommPortIdentifier portId;
SerialPort serialPort;

public Test1(String com)
{
System.out.println("listage des ports série disponibles:");
listePortsDispo();
try
{
portId=CommPortIdentifier.getPortIdentifier(com);
serialPort=(SerialPort)portId.open("Envoi",2000);

serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
System.out.println("Ouverture du port "+com);

try
{
 
 //Trame trame =new Trame();
 //String tr=trame.getTrame();
 serialPort.enableReceiveTimeout(1000);
serialPort.enableReceiveThreshold(0);
OutputStream out=serialPort.getOutputStream();
out.write(0x05);

BufferedReader in=new BufferedReader (new InputStreamReader(serialPort.getInputStream()));
String line=in.readLine();
while (line!=null){   
    try{
        System.out.println(line);
        line = in.readLine();

    }catch(IOException e){
        System.out.println("No more characters received");
        break;
    }
    //Print the line read
    if (line.length() != 0) 
        System.out.println(line);
 
 /*InputStream in =serialPort.getInputStream();
 int x=in.read();
 
  System.out.println(x);
  //x=in.read();**/
 

}}
catch (UnsupportedCommOperationException e)
{
     // TODO Auto-generated catch block
     e.printStackTrace();
}
//OutputStream out = (OutputStream) serialPort.getOutputStream();
//out.write(0x05);


     

}
//}

 


/*BufferedReader in=new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
String line;
while (true){   
    try{
        line = in.readLine();
        System.out.println(line);
    }catch(IOException e){
        System.out.println("No more characters received");
        break;
    }
    //Print the line read
    if (line.length() != 0) 
        System.out.println(line);
}**/
 /* byte ENQ = 5;
 byte ACK = 6;
 byte NAK = 21;
 byte EOT = 4;
 byte ETX = 3;
byte ETB = 23;
 byte STX = 2;
 byte NEWLINE = 10;
 byte[] ACK_BUFF = { ACK };
 byte[] ENQ_BUFF = { ENQ };
 byte[] NAK_BUFF = { NAK };
 byte[] EOT_BUFF = { EOT };**/
//byte seperator =7c;

//String trame="";//Suite à votre trame 


//byte[] outputArray = trame.getBytes( );

//out.write ( 0x05 ); 
//int b = in.read();
//String reponse=in.readLine();
//System.out.println("ligne: "+b+"\n Réponse: "+reponse);


catch (Exception e)
{
e.printStackTrace();
}
serialPort.close();
}//fin constructeur

public void listePortsDispo()
{
System.err.println("recherche...");
Enumeration portList=CommPortIdentifier.getPortIdentifiers();
if (portList==null)
{
System.err.println("Aucun port de communication détecté");
return;
}
while (portList.hasMoreElements())
{
portId=(CommPortIdentifier)portList.nextElement();
System.out.println("* "+portId.getName());
} // while
} //fin de la methode listePortsDispo()

public static void main(String args[])
{
new Test1("COM8");
}//fin du main


}//fin de la classe

aider moi svp chui vraiment totalement bloqué :'(



Twinuts: Edit, ajout balise code
Commenter la réponse de semi000
0
Utile
lorsque j'exécute ce code voilà ce que j'obtient :
recherche...
listage des ports série disponibles:
  • COM8

Ouverture du port COM8
java.io.IOException: Underlying input stream returned zero bytes
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at View.Test1.<init>(Test1.java:43)
at View.Test1.main(Test1.java:146)
Commenter la réponse de semi000
Twinuts 5255 Messages postés dimanche 4 mai 2003Date d'inscriptionModérateurStatut 11 janvier 2018 Dernière intervention - 9 mai 2017 à 11:11
0
Utile
Salut,

De manière globale, je te déconseille fortement de faire un readline pour effectuer une lecture sur liaison série.
Ce type de read avec ce genre de lien, peut être une véritable source de problème.

Tu peux t'aider de ce lien : ICI

Commenter la réponse de Twinuts

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.