以前没弄过串口通信,现在业务需要,就弄了个modBusScan虚拟了一个modBus设备,连上以后,再copy了网上一段代码,开始报类找不到,就下了个rxtx-2.2pre2-bins.zip,把里面的包和dll文件都弄到了jre里面,初始化就成功了,但是读写又遇到这个问题,弄了个近1天,还是没弄出来,网上的方法也基本都试过了,实在是不知所以然。
代码如下。
@Test
public void test1(){
int SLAVE_ADDRESS=1;
int rate=57600;
SerialParameters serialParameters=new SerialParameters();
//设定MODBUS通讯的串行口
        serialParameters.setCommPortId("COM1");
 
        //设定成无奇偶校验
        serialParameters.setParity(0);
 
        //设定成数据位是10位
        serialParameters.setDataBits(8);
 
        //设定为1个停止位
        serialParameters.setStopBits(1);
 
 
        //串行口上的波特率
        serialParameters.setBaudRate(rate);
 
        ModbusFactory modbusFactory = new ModbusFactory();
        ModbusMaster master = modbusFactory.createRtuMaster(serialParameters);
        
        try {
            master.init();
            readDiscreteInputTest(master,SLAVE_ADDRESS,0,8);
            //writeRegistersTest(master,SLAVE_ADDRESS, 0, new short[]{0x0,0x1,0x1,0x0,0x1,0x0, 0x1, 0x0, 0x1,0x0} );
           // readHoldingRegistersTest(master,SLAVE_ADDRESS,0,8);
        } catch (ModbusInitException e) {
         System.out.println( "Modbus Master Init Error: " + e.getMessage());
e.printStackTrace();
}
        finally {
            master.destroy();
        }
        
}

/**
     * 读开关量型的输入信号
     * @param master 主站
     * @param slaveId 从站地址
     * @param start 起始偏移量
     * @param len 待读的开关量的个数
     */
    private static void readDiscreteInputTest(ModbusMaster master, int slaveId, int start, int len) {
        try {
            ReadDiscreteInputsRequest request = new ReadDiscreteInputsRequest(slaveId, start, len);
            ReadDiscreteInputsResponse response = (ReadDiscreteInputsResponse) master.send(request);
 
            if (response.isException())
                System.out.println("Exception response: message=" + response.getExceptionMessage());
            else
                System.out.println(Arrays.toString(response.getBooleanData()));
        }
        catch (ModbusTransportException e) {
            e.printStackTrace();
        }
    }后来又换了一个rxtx直接连串口的测试代码,还是不行,主要是一连modbusScan,就代码报unkwon application,把modbusScan断开,就报timeout