赤红热血 2016-11-07 08:40 采纳率: 0%
浏览 3634

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();
    }
}

}

  • 写回答

5条回答 默认 最新

  • 赤红热血 2016-11-07 08:41
    关注

    这是报的的错:
    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

    评论

报告相同问题?

悬赏问题

  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的