écriture d'une trame en java

semi000 - 23 avril 2017 à 23:52
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 9 mai 2017 à 11:11
Bonjour,
comment écrire une telle trame en java
H|\^&|||cobas-e411^1|||||host|RSUPL^BATCH|P|1[CR]

4 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
27 avril 2017 à 09:04
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 ?


0
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
0
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)
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
9 mai 2017 à 11:11
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

0
Rejoignez-nous