首页 > 编程语言 > 详细

java代码实现Modubs从站服务端

时间:2021-06-17 09:38:30      阅读:23      评论:0      收藏:0      [点我收藏+]

ModbusSlave.zip下载

1、ModbusTCPSlave

此处new TcpSlave(10000, false)因ubuntu下1000以下端口需要root权限,故这里使用了10000这个端口,windows下可以使用502端口

package slave;

import com.serotonin.modbus4j.ModbusFactory;
import com.serotonin.modbus4j.ModbusSlaveSet;
import com.serotonin.modbus4j.ip.tcp.TcpSlave;

public class ModbusTCPSlave {
    public static void main(String[] args) throws Exception {
        run();
    }

    public static void run() throws Exception {
        /* createSlave方法执行完成后,会进行监听,影响之后的业务运行,需要以线程的方式进行启动 */
        new Thread(() -> {
            createSalve();
        }).start();
        /* 为保证在进行点表数据初始化的时候slave已经启动完成,在此处进行了1s的休眠 */
        Thread.sleep(1000);
        /* 开始进行点表的初始化数据写入 */
        // InitModbusSlave();
    }

    /**
     * @description 创建ModbusTCP服务器
     */
    private static void createSalve() {
        //创建modbus工厂
        ModbusFactory modbusFactory = new ModbusFactory();
        //创建TCP服务端
        // final ModbusSlaveSet salve = modbusFactory.createTcpSlave(false);
        final ModbusSlaveSet salve = new TcpSlave(10000, false);

        //向过程影像区添加数据
        salve.addProcessImage(Register.getModscanProcessImage(1));
        //获取寄存器
        salve.getProcessImage(1);
        try {
            salve.start();
            System.out.println("salve.start();");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2、BasicProcessImageListener

package slave;

import com.serotonin.modbus4j.ProcessImageListener;

/**
 * 监听线圈和寄存器,实现ProcessImageListener
 */
public class BasicProcessImageListener implements ProcessImageListener {

    @Override
    public void coilWrite(int i, boolean b, boolean b1) {

    }

    @Override
    public void holdingRegisterWrite(int offset, short oldValue, short newValue) {
        System.out.println("Register at " + offset + "," + "change " + oldValue + " to " + newValue);
    }
}

3、Register

package slave;

import com.serotonin.modbus4j.BasicProcessImage;

/**
 * 寄存器及线圈
 */
public class Register {
    public static BasicProcessImage getModscanProcessImage(int slaveId) {
        /* 初始化过程影像区 */
        BasicProcessImage processImage = new BasicProcessImage(slaveId);
        /* 初始化寄存器数据范围 */
        processImage.setInvalidAddressValue(Short.MIN_VALUE);
        /* 初始化过程影像区各个数值为0 */
        for (int i = 0; i < 608; i++) {
            processImage.setHoldingRegister(i, (short) 0);
        }
        /* 为影像区添加监听 */
        processImage.addListener(new BasicProcessImageListener());
        return processImage;
    }
}

java代码实现Modubs从站服务端

原文:https://www.cnblogs.com/kikyoqiang/p/14891564.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!