【2023】java通过modbus4j实现modbus TCP通讯

文章介绍了Modbus通信协议的三个子协议:RTU、ASCII和TCP,以及它们的存储区和功能码。重点展示了如何使用Java的Modbus4j库进行读写操作,包括读取寄存器和写入Coil等功能,并提供了测试代码示例。

Modbus通信协议:

  • 主要分为三个子协议
    • RTU
    • ASCII
    • TCP

Modbus RTU:——传输的是字节数组(bit[])
通信:读写
输出:可以读写
输入:只能读

  • 存储区:输出线圈、输入线圈、输出寄存器、输入寄存器

    • 线圈:代表一个布尔量、最小单位是一个布尔(1或者0),
    • 寄存器:一个寄存器代表16个最小单位,主要用于存储数据
    • 存储区代号:
      • 输出线圈: 0(代号)
        • 00001-09999(标准存储区地址范围)
        • 000001-065536(扩展存储区地址范围)
      • 输入线圈:1
        • 10001-19999
      • 输出寄存器:4
        • 40001-49999
      • 输入寄存器:3
        • 30001-39999
  • 存储区范围:5位和6位

    • 5位:标准地址-Y XXXX
    • 6位:扩展地址-Y XXXXX

功能代码
在这里插入图片描述

验证4个常用功能码,仿真软件上面有F=01,F=02,F=03和F=04来显示

0x01:读线圈
0x02:读离散量输入
0x03:读保持寄存器
0x04:读输入寄存器

测试使用Modbus Slave(下载) 模拟
在这里插入图片描述

saveid:看资料"从站在modbus总线上可以有多个",仿真软件就能模拟一个从站,就是ID=1,当然可以修改成ID=2
功能码:4个功能码,对应写4个方法,,仿真软件上的F=1,或者F=2,3,4
addr:一开始看代码4个方法addr都是从0开始,是否重复?答案是:4个功能码表示4个区域或者设备,addr表示各自区域的地址编号。

  • Connection设置:设置连接参数

在这里插入图片描述

  • 地址设置: F8 ,可以通过Setup或者右击点位的
  • 在这里插入图片描述

在这里插入图片描述

  • 设置不同存储区
    在这里插入图片描述
  • 读取从站在这里插入图片描述

代码实现

1、依赖下载

阿里云不能直接下载
<!-- 若想引用modbus4j需要引入下列repository id:ias-snapshots id:ias-releases 两个 ,使用默认仓库下载,不要使用阿里云仓库-->
    <repositories>
	    <repository>
	        <releases>
	            <enabled>false</enabled>
	        </releases>
	        <snapshots>
	            <enabled>true</enabled>
	        </snapshots>
	        <id>ias-snapshots</id>
	        <name>Infinite Automation Snapshot Repository</name>
	        <url>https://maven.mangoautomation.net/repository/ias-snapshot/</url>
	    </repository>
	    <repository>
	        <releases>
	            <enabled>true</enabled>
	        </releases>
	        <snapshots>
	            <enabled>false</enabled>
	        </snapshots>
	        <id>ias-releases</id>
	        <name>Infinite Automation Release Repository</name>
	        <url>https://maven.mangoautomation.net/repository/ias-release/</url>
	    </repository>
	</repositories>
	
    <dependencies>
		 <dependency>
		    <groupId>junit</groupId>
		    <artifactId>junit</artifactId>
		    <version>4.13-beta-3</version>
		    <scope>test</scope>
		</dependency>
		<dependency>
		    <groupId>com.infiniteautomation</groupId>
		    <artifactId>modbus4j</artifactId>
		    <version>3.0.3</version>
		</dependency>
		
		<dependency>
		    <groupId>org.apache.commons</groupId>
		    <artifactId>commons-lang3</artifactId>
		    <version>3.9</version>
		</dependency>
    </dependencies>

2、测试读取

  • 读取04(寄存器)
import com.intelligt.modbus.jlibmodbus.Modbus;
import com.intelligt.modbus.jlibmodbus.exception.ModbusIOException;
import com.intelligt.modbus.jlibmodbus.master.ModbusMaster;
import com.intelligt.modbus.jlibmodbus.master.ModbusMasterFactory;
import com.intelligt.modbus.jlibmodbus.tcp.TcpParameters;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class TestModbus {
   
   
    public static void main(String[] args) throws UnknownHostException {
   
   
            // 设置主机TCP参数
            TcpParameters tcpParameters = new TcpParameters();

            // 设置TCP的ip地址
            InetAddress address 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值