引用j2mod编写Modbus TCP从站Slave例子

Maven引入j2mod包,我使用3.1.1版本

<dependency>
    <groupId>com.ghgande</groupId>
    <artifactId>j2mod</artifactId>
    <version>3.1.1</version>
</dependency>

直接上例子代码:

package com.fuyan.test.modbus.slave;

import com.ghgande.j2mod.modbus.ModbusException;
import com.ghgande.j2mod.modbus.procimg.*;
import com.ghgande.j2mod.modbus.slave.ModbusSlave;
import com.ghgande.j2mod.modbus.slave.ModbusSlaveFactory;

/**
 * @Description: Modbus TCP 从站(服务端)
 * @Author fuyan.wang
 * @Date 2024/5/10
 */
public class ModbusTCPSlave {

    public static void main(String[] args) {
        // 简单添加几个测试数据
        
        SimpleProcessImage spi = new SimpleProcessImage();
        // 线圈状态
        spi.addDigitalOut(new SimpleDigitalOut(true));
        spi.addDigitalOut(new SimpleDigitalOut(false));
        // 输入状态
        spi.addDigitalIn(new SimpleDigitalIn(true));
        spi.addDigitalIn(new SimpleDigitalIn(true));
        spi.addDigitalIn(new SimpleDigitalIn(false));
        spi.addDigitalIn(new SimpleDigitalIn(true));
        // 保持寄存器
        spi.addRegister(new SimpleRegister(200));
        spi.addRegister(new SimpleRegister(99));
        // 输入寄存器
        spi.addInputRegister(new SimpleInputRegister(44));
        spi.addInputRegister(new SimpleInputRegister(55));

        // 端口
        int port = 502;
        // 连接池大小(简单理解就是允许多少个主站同时连接)
        int poolSize = 2;
        // 从站Id
        int unitId = 1;

        try {
            ModbusSlave slave = ModbusSlaveFactory.createTCPSlave(port,poolSize);
            slave.addProcessImage(unitId,spi);
            // 多个从站就多个addProcessImage就可以了
            // 启动从站服务
            slave.open();

            // 关闭(自定处理)
            //ModbusSlaveFactory.close();
        } catch (ModbusException e) {
            // 处理异常...
            //...
            throw new RuntimeException(e);
        }

    }
}


  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使用 Python 编写一个 MODBUS TCPSlave)程序,你可以使用第三方库 pymodbus。以下是一个简单的示例代码: ```python from pymodbus.server.sync import StartTcpServer from pymodbus.datastore import ModbusSequentialDataBlock from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext # 定义 MODBUS数据 block = ModbusSequentialDataBlock(0, [0] * 100) store = ModbusSlaveContext(di=block, co=block, hr=block, ir=block) context = ModbusServerContext(slaves=store, single=True) # 创建 MODBUS TCP服务器 server = StartTcpServer(context, address=("0.0.0.0", 502)) # 启动服务器 if __name__ == "__main__": try: print("MODBUS TCP Slave is running...") server.serve_forever() except KeyboardInterrupt: print("MODBUS TCP Slave stopped.") ``` 在这个示例中,我们首先导入了 `pymodbus` 库的相关模块,然后定义了一个 ModbusSequentialDataBlock 对象来存储从数据。`di` 代表离散输入寄存器,`co` 代表线圈,`hr` 代表保持寄存器,`ir` 代表输入寄存器。在这里,我们使用同一个数据块来模拟这些寄存器。 接下来,我们创建了一个 ModbusSlaveContext 对象,并将之前定义的数据块添加到其中。然后,我们创建了一个 ModbusServerContext 对象,将从数据存储对象添加到其中。 最后,我们使用 `StartTcpServer` 函数创建一个 MODBUS TCP服务器,并指定服务器的地址和端口号。然后,我们调用 `server.serve_forever()` 启动服务器,使其一直运行,直到接收到键盘中断信号。 你可以根据你的实际需求修改数据块的大小和内容,并根据需要进行其他设置。正常情况下,你需要根据你的设备和通信要求进行适当的配置。 希望这个示例能够帮助你开始编写 MODBUS TCP程序!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值