2

バイト シーケンスをシリアル ポートに送信しようとしていますが、ポート自体からの応答を読み取ることができません。シリアルポートを処理するためにRealtermで同じメッセージを送信していますが、応答を受け取ります。Eltimaのシリアルポートモニターでも監視しており、書き込み操作は成功していますが、何も読み取れません。
私はJFrameインターフェースを使用しており、シリアルポートをそのメソッドを持つ属性として実装するSerialDeviceという名前の別のクラスを宣言しました(jsscから取得)。
シリアル ポートは、57600、8 ビット データ、1 ストップ ビット、および RTS を使用する必要があります。
RXCHAR() イベントは発生しないようです...

public class SerialDevice {
    private SerialPort serialPort;

    public SerialDevice(String pname){
        serialPort = new SerialPort(pname);
    }

    public void open() throws SerialPortException{
        //Open port
        serialPort.openPort();
    }

    public void setParameters() throws SerialPortException{       
        // We expose the settings. You can also use this line:
        // serialPort.setParams(9600, 8, 1, 0);
        serialPort.setParams(SerialPort.BAUDRATE_57600, 
                        SerialPort.DATABITS_8,
                        SerialPort.STOPBITS_1,
                        SerialPort.PARITY_NONE);
        //serialPort.setRTS(true);        
        serialPort.setFlowControlMode(
             SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT
        );
    }

    public void close()throws SerialPortException{
        //Close Port
        serialPort.closePort();
    }

    public void SendGetInfo() throws SerialPortException{
        byte[] ms = { (byte)0x01, (byte)0x80, (byte)0x04, (byte)0x00, (byte)0x2A,
                (byte)0x81, (byte)0x00, (byte)0x00 };
        serialPort.writeBytes(ms);
    }

    public void readOnEvent() throws SerialPortException{
        // Prepare mask:
        int mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS 
                    + SerialPort.MASK_DSR;
        // Set mask:
        serialPort.setEventsMask(mask);
        // Add SerialPortEventListener:
        serialPort.addEventListener(new SerialPortReader());
    }
    /*
     * In this class must implement the method serialEvent, through it we learn
     * about events that happened to our port. But we will not report on all
     * events but only those that we put in the mask. In this case the arrival
     * of the data and change the status lines CTS and DSR
     */
    public class SerialPortReader implements SerialPortEventListener {

        public void serialEvent(SerialPortEvent event) {
            if (event.isRXCHAR()) {  //If data is available
                try {
                    System.out.println("OK");
                    byte buffer[] = serialPort.readBytes(event.getEventValue());
                    System.out.println(buffer);
                } catch (SerialPortException ex) {
                    System.out.println(ex);
                }
            }
            else if (event.isCTS()) {  //If CTS line has changed state
                if(event.getEventValue() == 1){//If line is ON
                    System.out.println("CTS - ON");
                }
                else {
                    System.out.println("CTS - OFF");
                }
            }
            else if(event.isDSR()){  //If DSR line has changed state
                if(event.getEventValue() == 1){//If line is ON
                    System.out.println("DSR - ON");
                }
                else {
                    System.out.println("DSR - OFF");
                }
            }
        }
    }

以下のコードは、ボタンの mouseclicked アクションの一部です

    try{
        boolean availablePorts = false;
        String[] portNames = SerialPortList.getPortNames();
        for(int i = 0; i < portNames.length; i++){
            if (jTextField2.getText().equals(portNames[i])) {
                availablePorts =true;
            }
        }
        if (!availablePorts) throw new Exception();

        /**creation of a new serial Device*/
        SerialDevice serial = new SerialDevice(jTextField2.getText());

        try{
            //port Initialize
            serial.open();
            serial.setParameters();

            //Sending 1st message
            //serial.SendGetInfo();
            serial.readOnEvent();
            serial.SendGetInfo();

            //Closing port
            serial.close();                
        } catch (Exception ex) {
            jLabel2.setText("Unable to Open Port");
        }

イベントが発生しない理由を見つけるのを手伝ってください

4

0 に答える 0