Java Modbus数据读取:TCP部分

最近在研究传输协议这一块。今天看了看Modbus4j相关的内容,感觉还是蛮简单的,就是官方有几个大坑没填,还需要自己去搞。

我使用的库是modbus4j,注意maven导入的时候要设置对应repository,阿里云仓库里面好像没有这个库

首先需要安装两个软件,一个是modbus slave,另一个是vspd,这两个软件网上都有相关的教程。也可以参考这篇博文:https://www.cnblogs.com/ioufev/p/10831289.html

先从简单的来,就用Modbus TCP来进行传输。在Modbus Slave的Connection中设置如下:

image-20200521212426183

然后依次创建4个从站,从站ID相同,但是代表不同的功能。

image-20200521212514686

其中ID代表的是从站的ID,而F则代表对应的功能码

  • F = 1 读取线圈状态
  • F = 2 读取输入状态
  • F = 3 读取存储寄存器的值
  • F = 4 读取写入寄存器的值

可以直接按照我的样式来设置值。至于那个 – 是怎么出现的,只需要按如下设置即可:

image-20200521212746286

接下来是代码部分,TCP这块官方没什么坑,可以直接按照套路来,先生成modbus的数据主站:

public static void main(String[] args) throws Exception {
	IpParameters ipParameters = new IpParameters();
    	//master数据主站的初始化
        ipParameters.setHost("localhost");
        ipParameters.setPort(502); //初始端口号,要和从站的一致
        ModbusFactory modbusFactory = new ModbusFactory();
	    //通过工厂模式创建
        ModbusMaster master = modbusFactory.createTcpMaster(ipParameters, false);
        master.setTimeout(4000);
        master.setRetries(1);
    // ...
}

TCP的数据读取方式主要是通过BaseLocator工具类来实现的

//找到数据在从站中的位置,及其对应的数据类型
BaseLocator<Number> locator = BaseLocator.holdingRegister(1, 2, DataType.FOUR_BYTE_FLOAT);
//通过站获取从站的数据
Number value = master.getValue(locator);

这样就是一个通过master读取数据的典例。注意这里用的是BaseLocator.holdingRegister方法读取,对应的slave应该是slaveId = 1, F=3的从站,即:

image-20200521213612956

其他的方法类似。这就是TCP部分的读写。串口RTU的话下一期继续。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值