Java测试modbus pool 虚拟串口通信的例子

public class RtuModBusDemo {
// 设定MODBUS网络上从站地址
private final static int SLAVE_ADDRESS = 1;
// 串行波特率
private final static int BAUD_RATE = 9600;
public static void main(String[] args) {
SerialParameters serialParameters = new SerialParameters();
// 设定MODBUS通讯的串行口
serialParameters.setCommPortId("COM2");
// 设定成无奇偶校验
serialParameters.setParity(1);
// 设定成数据位是8位
serialParameters.setDataBits(8);
// 设定为1个停止位
serialParameters.setStopBits(1);
// 设定端口名称
serialParameters.setPortOwnerName("portName");
// 设定端口波特率
serialParameters.setBaudRate(BAUD_RATE);
// 创建ModbusFactory工厂实例
ModbusFactory modbusFactory = new ModbusFactory();
// 创建ModbusMaster实例
ModbusMaster master = modbusFactory.createRtuMaster(serialParameters);
// 初始化
try {
master.init();
readHoldingRegistersTest(master, SLAVE_ADDRESS, 1, 1);

    } catch (ModbusInitException e) {
        e.printStackTrace();
    } finally {
        master.destroy();
    }

}
/**
* 读输入信号
* @param master 主站
* @param slaveId 从站地址
* @param start 起始偏移量
* @param len 待读的个数
*/
public 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();
    }
}
/**
 * 读输入寄存器上的内容
 * @param master 主站
 * @param slaveId 从站地址
 * @param start 起始地址的偏移量
 * @param len 待读寄存器的个数
 */
private static void readHoldingRegistersTest(ModbusMaster master,
        int slaveId, int start, int len) {
    try {
        ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest(
                slaveId, start, len);
        ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master
                .send(request);
        if (response.isException()) {
            System.out.println("Exception response: message="
                    + response.getExceptionMessage());
        } else {
            System.out.println(Arrays.toString(response.getShortData()));
            short[] list = response.getShortData();
            for(int i = 0; i < list.length; i++){
                System.out.print(list[i] + " ");
            }
        }
    } catch (ModbusTransportException e) {
        e.printStackTrace();
    }
}
 /**
 * 批量写数据到寄存器
 * @param master 主站
 * @param slaveId 从站地址
 * @param start 起始地址的偏移量
 * @param values 待写数据
 */
public static void writeRegistersTest(ModbusMaster master, int slaveId, int start, short[] values) {
    try {
        WriteRegistersRequest request = new WriteRegistersRequest(slaveId, start, values);
        WriteRegistersResponse response = (WriteRegistersResponse) master.send(request);
        if (response.isException()){
            System.out.println("Exception response: message=" + response.getExceptionMessage());
        }
        else {
            System.out.println("Success");
        }
    }
    catch (ModbusTransportException e) {
        e.printStackTrace();
    }
}

}

这是报的的错:
com.serotonin.modbus4j.exception.ModbusInitException: com.serotonin.io.serial.SerialPortException: gnu.io.PortInUseException: Unknown Application
at com.serotonin.modbus4j.serial.SerialMaster.init(SerialMaster.java:31)
at com.serotonin.modbus4j.serial.rtu.RtuMaster.init(RtuMaster.java:23)
at com.jy.rtumodbus.RtuModBusDemo.main(RtuModBusDemo.java:42)
Caused by: com.serotonin.io.serial.SerialPortException: gnu.io.PortInUseException: Unknown Application
at com.serotonin.io.serial.SerialUtils.openSerialPort(SerialUtils.java:55)
at com.serotonin.modbus4j.serial.SerialMaster.init(SerialMaster.java:27)
... 2 more
Caused by: gnu.io.PortInUseException: Unknown Application
at gnu.io.CommPortIdentifier.open(CommPortIdentifier.java:467)
at com.serotonin.io.serial.SerialUtils.openSerialPort(SerialUtils.java:43)
... 3 more

这是modbus pool图片说明

我也是同样的错,求楼主解答,是不是虚拟串口的名字不对

应该接两个串口就可以通信了,这是接一个串口导致的结果

把connect的参数修改成下面这样

img