Bonjour,

mon but est de faire dialoger mon programme avec un autre programme via une RS485.

Disposant de 2 port RS485 sur mon PC j'ai écrit un petit prog pour faire un teste.

voici le code de la classe de mon programme principale :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package communication;
 
import gnu.io.* ;
 
import java.io.* ;
import java.lang.Thread ;
 
public class BalanceTeste extends Thread
{
    private RXTXPort port ;
    private RXTXCommDriver portDriver ;
 
    private BufferedInputStream in ;
    private BufferedOutputStream out ;
 
    /** Creates a new instance of BalanceTeste */
    public BalanceTeste()
    {
        try
        {
            port = new RXTXPort ("COM3") ;
            port.setSerialPortParams(
                    9600, // baudrate
                    8, // databits
                    2, // stopbits
                    0 // parity
                    ) ;
            in = new BufferedInputStream(port.getInputStream()) ;
            out = new BufferedOutputStream(port.getOutputStream()) ;
        }
        catch (PortInUseException ePortInUse)
        {
            System.err.println("communication, BalanceTeste," +
                    " construction : " + ePortInUse) ;
        }
        catch (UnsupportedCommOperationException eUnsuported)
        {
            System.err.println("communication, BalanceTeste," +
                    " construction : " + eUnsuported) ; 
        }
    } 
 
    public void run ()
    {
        byte[] b = new byte[4] ;
        String s ;
        while (true)
        {
            try
            {
                System.out.println("avant le read") ;
                in.read(b) ;
                s = new String (b) ;
                System.out.println("apres le read b = " + s + " (" + b + ")") ;
            }
            catch (IOException e)
            {
                System.err.println("communication, " +
                        "BalanceTeste, run : " + e) ;
            }
        }
    }
}

et voici le code de la classe de mon prod de teste :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import gnu.io.* ;
 
import java.io.* ;
import java.lang.Thread ;
 
/**
 *
 * @author Florent Ruyssen
 */
public class Comm
{
    private RXTXPort port ;
    private RXTXCommDriver portDriver ;
 
    private BufferedInputStream in ;
    private BufferedOutputStream out ;
 
    /** Creates a new instance of Comm */
    public Comm()
    {
        try
        {
            port = new RXTXPort ("COM4") ;
            port.setSerialPortParams(
                    9600, // baudrate
                    8, // databits
                    2, // stopbits
                    0 // parity
                    ) ;
            in = new BufferedInputStream(port.getInputStream()) ;
            out = new BufferedOutputStream(port.getOutputStream()) ;
        }
        catch (PortInUseException ePortInUse)
        {
            System.err.println("communication, BalancePrecia," +
                    " construction : " + ePortInUse) ;
        }
        catch (UnsupportedCommOperationException eUnsuported)
        {
            System.err.println("communication, BalancePrecia," +
                    " construction : " + eUnsuported) ; 
        }
    }
 
 
    public void run ()
    {
        byte[] b = new byte[49] ;
        String s ;
        while (true)
        {
            try
            {
                out.write("0D0A".getBytes());
                System.out.println(new String ("0D0A".getBytes())) ;
                System.out.println("avant le read") ;
                in.read(b) ;
                s = new String(b) ;
                System.out.println("apres le read b = " + s) ; 
            }
            catch (IOException e)
            {
                System.err.println("communication, " +
                        "BalancePrecia, run : " + e) ;
            }
        }
    }
}
le problème est que le premier devrait recevoir la chaine "0D0A" envoyé par le deuxième mais ce n'est pas le cas : il resoit a interva régulier quelque chose qui est transcrit par 4 carre... que le prog de teste soit lancé ou non ...

Si vous avait une idée...

Merci, floanne.